Мы внедрили службу SMAPI и пытаемся обслуживать аудиокнигу. Мы можем выбрать аудиокнигу и начать воспроизведение, но у нас возникают проблемы, когда мы хотим перемещаться между главами, потому что наши аудиофайлы не разделены по главам. Каждая аудиокнига делится на части примерно одинаковой длины, и у нас есть информация о том, с какой части и как далеко в части начинается каждая глава.
Итак, мы столкнулись с проблемой, когда наш ответ getMetadata
возвращает главы аудиокниги, потому что именно так мы хотим, чтобы пользователь мог перемещаться по книге, но наши ответы getMediaURI
для каждого В главе приводятся URL-адреса для частей, на которые делятся аудиофайлы, и мы, похоже, не можем начать с определенной позиции в этих файлах.
Нашей первой попыткой решить проблему было включение positionInformation
в наш getMediaURI
ответ. Это все еще оставило бы нас с проблемой завершения главы в соответствующем месте, но могло бы позволить нам начинать в соответствующем месте. Но согласно документам Sonos , вы не должны включать информацию о положении для отдельных глав аудиокниг, и это, кажется, игнорируется.
Нашей второй мыслью и, возможно, лучшим решением было использование секции httpHeaders
ответа getMediaURI
, чтобы установить заголовок Range
только для той части файла, которая соответствует главе. Но у Sonos, похоже, есть проблемы с установкой заголовка Range
, и он, похоже, либо игнорирует наш заголовок, либо прерывает его, когда мы пытаемся воспроизвести главу. Мы предполагаем, что это потому, что Sonos пытается установить свои Range
заголовки .
В настоящее время мы думаем, что мы сможем передать URL-адреса мультимедиа через своего рода прокси-сервер, настроив заголовок Sonos Range
, добавив смещение к начальным и конечным значениям в зависимости от того, где начинается глава в аудиофайле. .
Итак, сейчас мы возвращаем <fileUrl>
из getMediaURI
и Sonos отправляет запрос следующим образом:
<fileUrl>
Range: bytes=100-200
Вместо этого мы вернем <proxyUrl>?url=<urlEncodedFileUrl>&offset=3000
из getMediaURI
. Sonos отправит что-то вроде этого:
<proxyUrl>?url=<htmlEncodedFileUrl>&offset=3000
Range: bytes=100-200
И прокси перенаправит на что-то вроде этого:
<fileUrl>
Range: bytes=3100-3200
Кто-нибудь еще имел дело с аудиофайлами, которые не совпадают один к одному с их главами? Как ты с этим справился?