Аудиокниги, которые не начинаются с начала файла - PullRequest
0 голосов
/ 26 июня 2019

Мы внедрили службу 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

Кто-нибудь еще имел дело с аудиофайлами, которые не совпадают один к одному с их главами? Как ты с этим справился?

1 Ответ

0 голосов
/ 27 июня 2019

Простой ответ заключается в том, что проигрыватели Sonos учитывают продолжительность файла, а не продолжительность, выраженную в метаданных.Вы не можете обойти это с помощью positionInformation или облачных очередей.

Однако примечание, что вы не должны использовать positonInformation для глав в аудиокниге, кажется неправильным, поэтому я удалил его. Документация по сохранению и возобновлению гласит, что вы должны включить его, если пользователь возобновляет прослушивание.Вы можете использовать это, чтобы начать воспроизведение с определенной позиции в аудиофайле.Получили ли вы ошибку при попытке сделать это?

Обратите внимание, что вы не сможете остановить воспроизведение в файле (например, если глава закончилась до того, как файл закончился).Плеер будет проигрывать весь файл перед остановкой.Метаданные также не изменятся до конца файла.Так, например, если метаданные для файла - «Глава 2», а глава 2 заканчивается до конца файла, приложение Sonos будет по-прежнему отображать «Глава 2» до конца файла.

Также обратите внимание, что API отчетности устарели.См. Добавление отчетов , чтобы узнать о новой конечной точке отчетов, которую должна размещать ваша служба.

...