Chromecast Receiver CAF, бесконечная загрузка потока MPEG-DASH, доступ к ShakaPlayer - PullRequest
0 голосов
/ 04 июня 2018

У меня проблема с проигрыванием Chromecast в прямом эфире MPEG-DASH.Бесконечная загрузка происходит из-за отсутствия тега UTCTiming в манифесте.Известно, что проблема возникает с ShakaPlayer.Это первая проблема в FAQ: https://github.com/google/shaka-player/blob/master/docs/tutorials/faq.md

В chromecast, однако, я не могу получить доступ к ShakaPlayer напрямую (или, может быть, есть способ, с которым я не знаком).Есть 2 решения проблемы, о которых я могу подумать:

  1. Изменить манифест динамически.
 this.playbackConfig.manifestHandler = (manifest) => {
    //adding UTCTiming to the manifest with attributes like this:
    customUTC.setAttribute("schemeIdUri", "urn:mpeg:dash:utc:http-head:2014");
    customUTC.setAttribute("value", this.manifestUrl); }

Это, однако, не меняетсяповедение проигрывателя chromecast, бесконечная загрузка все еще происходит, я что-то здесь не так делаю?

Использование более старого плеера (Media Player Library) через настройку useLegacyDashSupport делает воспроизведение chromecast обычным потоком, но немного нарушает интерфейс. Могу ли я динамически переключаться на унаследованный плеер только тогда, когда это необходимо?Например, на основе манифеста или во время loadRequest из приложения отправителя.

Ответы [ 2 ]

0 голосов
/ 25 июля 2018

Элемент UTCTiming необходим, так как Shaka Player должен знать, сколько времени на сервере, чтобы он мог играть в нужное время.Если у клиента и сервера разное время, видео, скорее всего, не сможет воспроизводиться.На самом деле это не требование Shaka Player, больше требование DASH в целом.

Но если вы не можете установить элемент в манифесте, вы можете использовать manifest.dash.clockSyncUri (см. docs ) параметр конфигурации для установки URL-адреса синхронизации часов.Например:

player.configure({manifest: {dash: {clockSyncUri: 'https://example.com/clock'}}});

Обратите внимание, что URL-адрес, используемый для синхронизации часов, должен иметь правильный заголовок Date в ответе (будьте осторожны с кэшированием), и если запрос является перекрестным источником, вы будетенужно выставить заголовок, иначе будут CORS ошибки.

Также shaka-player # 999 - это запрос функции, который поможет с дрейфом.После того, как эта функция приземлится, Игрок будет использовать сегменты в манифесте, чтобы угадать живой фронт вместо использования времени часов.Это означает, что вам не нужно настраивать синхронизацию часов.

0 голосов
/ 15 июня 2018

Я согласен с вами.Это очень раздражающее поведение, которое Shaka заставляет использовать UTCTiming.

Если у вас есть возможность изменить коды проигрывателя shaka в вашем форке, я бы посоветовал вам вызвать метод setClockOffset после инициализации манифеста ( проверьте здесь ),Манифест имеет presentationTimeline, который имеет метод setClockOffset.В противном случае вы можете получить манифест от здесь .Метод setClockOffset запускается для UTCTiming.Если вы не можете настроить UTCTiming для своего манифеста, установка смещения вручную может быть наилучшим вариантом для вашего случая.

Пример кода будет иметь вид =>

player.load(manifestUri)
  .then(() => {
    const manifest = player.getManifest();
    const presentationTimeline = manifest.presentationTimeline;
    presentationTimeline.setClockOffset(10/* find a suitable offset */);
  });

Удачи!

...