2016-04-29 8 views
2

Я следую this tutorial, чтобы передать WebM. У меня нет проблем работает в FFmpeg не команды для создания видео/аудио/файлов манифеста, но когда я пытаюсь запустить его локально, нет видео или аудио на всех и dashjs заливает консоль с:dashjs не может найти сегмент инициализации на manifest.mpd

Searching for initialization.  
Start searching for initialization.  
Perform init search: http://localhost:8080/video_1280x720_500k.webm  
Perform SIDX load: http://localhost:8080/video_640x360_750k.webm  
Perform SIDX load: http://localhost:8080/video_1280x720_500k.webm 

Дать, что консоли, пока я не остановлю сервер. Я пробовал использовать другие файлы mpd, такие как this, который используется на dashjs quickstart, и он без проблем воспроизводит видео.

Я использовал this guide установить последнюю версию FFmpeg на Ubuntu 14.04 LTS:

ffmpeg version N-79688-g3cb3ddd Copyright (c) 2000-2016 the FFmpeg developers 
built with gcc 5.3.0 (Ubuntu 5.3.0-3ubuntu1~14.04) 20151204 
configuration: --prefix=/home/ab/cpp/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/home/ab/cpp/ffmpeg_build/include --extra-ldflags=-L/home/ab/cpp/ffmpeg/lib --bindir=/home/ab/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree 
libavutil  55. 23.100/55. 23.100 
libavcodec  57. 38.100/57. 38.100 
libavformat 57. 34.103/57. 34.103 
libavdevice 57. 0.101/57. 0.101 
libavfilter  6. 44.100/6. 44.100 
libswscale  4. 1.100/4. 1.100 
libswresample 2. 0.101/2. 0.101 
libpostproc 54. 0.100/54. 0.100 

При работе на FFmpeg:

ffmpeg \ 
-f webm_dash_manifest -i video_160x90_250k.webm \ 
-f webm_dash_manifest -i video_320x180_500k.webm \ 
-f webm_dash_manifest -i video_640x360_750k.webm \ 
-f webm_dash_manifest -i video_640x360_1000k.webm \ 
-f webm_dash_manifest -i video_1280x720_500k.webm \ 
-f webm_dash_manifest -i audio_128k.webm \ 
-c copy -map 0 -map 1 -map 2 -map 3 -map 4 -map 5 \ 
-f webm_dash_manifest \ 
-adaptation_sets "id=0,streams=0,1,2,3,4 id=1,streams=5" \ 
manifest.mpd 

Он генерирует следующие manifest.mpd:

<?xml version="1.0" encoding="UTF-8"?> 
<MPD 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="urn:mpeg:DASH:schema:MPD:2011" xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011" type="static" mediaPresentationDuration="PT117.726S" minBufferTime="PT1S" profiles="urn:webm:dash:profile:webm-on-demand:2012"> 
    <Period id="0" start="PT0S" duration="PT117.726S"> 
    <AdaptationSet id="0" mimeType="video/webm" codecs="vp9" lang="eng" bitstreamSwitching="true" subsegmentAlignment="true" subsegmentStartsWithSAP="1"> 
     <Representation id="0" bandwidth="198155" width="160" height="90"> 
     <BaseURL>video_160x90_250k.webm</BaseURL> 
     <SegmentBase indexRange="2007834-2008211"> 
      <Initialization range="0-437" /> 
     </SegmentBase> 
     </Representation> 
     <Representation id="1" bandwidth="459264" width="320" height="180"> 
     <BaseURL>video_320x180_500k.webm</BaseURL> 
     <SegmentBase indexRange="4459996-4460374"> 
      <Initialization range="0-439" /> 
     </SegmentBase> 
     </Representation> 
     <Representation id="2" bandwidth="718495" width="640" height="360"> 
     <BaseURL>video_640x360_750k.webm</BaseURL> 
     <SegmentBase indexRange="6614036-6614414"> 
      <Initialization range="0-441" /> 
     </SegmentBase> 
     </Representation> 
     <Representation id="3" bandwidth="931445" width="640" height="360"> 
     <BaseURL>video_640x360_1000k.webm</BaseURL> 
     <SegmentBase indexRange="8309082-8309460"> 
      <Initialization range="0-441" /> 
     </SegmentBase> 
     </Representation> 
     <Representation id="4" bandwidth="821274" width="1280" height="720"> 
     <BaseURL>video_1280x720_500k.webm</BaseURL> 
     <SegmentBase indexRange="8728812-8729190"> 
      <Initialization range="0-441" /> 
     </SegmentBase> 
     </Representation> 
    </AdaptationSet> 
    <AdaptationSet id="1" mimeType="audio/webm" codecs="vorbis" lang="eng" audioSamplingRate="44100" bitstreamSwitching="true" subsegmentAlignment="true" subsegmentStartsWithSAP="1"> 
     <Representation id="5" bandwidth="107104"> 
     <BaseURL>audio_128k.webm</BaseURL> 
     <SegmentBase indexRange="1538710-1539184"> 
      <Initialization range="0-4112" /> 
     </SegmentBase> 
     </Representation> 
    </AdaptationSet> 
    </Period> 
</MPD> 

index.html имеет несколько изменений, поскольку dash.js изменил способ инициализации игрока.

<!doctype html> 
<html> 
    <head> 
     <title>Video Streaming</title> 
     <style> 
      video { 
       width: 640px; 
       height: 360px; 
      } 
     </style> 
     <script src="http://cdn.dashjs.org/latest/dash.all.debug.js"></script> 
    </head> 
    <body> 
     <div> 
      <video data-dashjs-player src="manifest.mpd" controls></video> 
     </div> 
    </body> 
</html> 

И вот Chromium's log file. Я конвертирую this webm от this site.

Если я пропустил какую-либо другую релевантную информацию, или если кто-нибудь может вести меня в правильном направлении, пожалуйста, дайте мне знать.

Edit:

Как Вилл Закон упоминался, используя Shaka плеер работал без каких-либо проблем с моим текущим манифестом. Надеюсь, это поможет кому угодно.

ответ

3

@Abelardo - эта статья была написана против 1.x версий проигрывателя dash.js. С версиями 2.x вставляемые страницы и в инструкции инициализации изменились (как вы указали). Кроме того, библиотека dash.webm.min.js не обновляется с 2.x. В центре внимания большинства участников проекта dash.js был AVC с ISOBMFF. Хотя мы хотели бы, чтобы dash.webm.min.js обновлялся и поддерживался, у него нет, и поэтому я бы не хотел, чтобы вы ударили головой, ожидая, что он сработает. Я ожидаю, что игрок Shaka, являющийся инициативой Google, будет действовать в отношении WebM - это то, что работает на вас? Если вы хотите спуститься к сорнякам и довести dash.webm.min до настоящего времени, это будет полезно для сообщества.

+1

Спасибо за ваш ответ @ will-law. Я не знал о состоянии веб-библиотеки lib в проекте dash.js. Я не попросил игрока Шаки, но я это сделаю. Я также хотел бы внести свой вклад в dash.web.js lib, но поскольку я просто попадал в тему потокового видео, мне понадобилось бы некоторое время, чтобы понять все, чтобы мои руки были грязными с кодом. –