2016-04-29 27 views
2

Ich folge this tutorial, um ein WebM zu streamen. Ich habe keine Probleme, die ffmpeg-Befehle ausführen, die Videos/Audio/Manifest-Dateien zu erzeugen, aber wenn ich versuche, es lokal zu laufen, gibt es kein Video oder Audio überhaupt und dashjs flutet die Konsole mit:dashjs kann das Initialisierungssegment in manifest.mpd nicht finden

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 

Schreiben, das zu Konsole, bis ich den Server stoppe. Ich habe versucht, mit anderen mpd-Dateien wie this, die auf der dashjs quickstart verwendet wird und es spielt das Video ohne Probleme.

verwendete ich this guide die neueste Version von ffmpeg auf Ubuntu 14.04 LTS zu installieren:

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 

Beim Laufen auf 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 

Es erzeugt die folgende 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> 

Die index.html hat ein paar Änderungen, weil dash.js die Art und Weise geändert hat, wie der Player initialisiert wird.

<!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> 

Und hier ist Chromiums log file. Ich wandeln this webm von this site.

Wenn ich andere relevante Informationen verpasst habe oder wenn jemand mich in die richtige Richtung führen kann, lass es mich wissen.

Edit:

Wie Will Gesetz erwähnt, mit dem Shaka-Player ohne Probleme mit meinem aktuellen Manifest gearbeitet. Hoffe das hilft anderen.

Antwort

3

@Abelardo - dieser Artikel wurde gegen 1.x Versionen von dash.js Player geschrieben. Bei den 2.x-Versionen hat sich die Seite eingebettet und in Initialisierungsanweisungen geändert (wie Sie hingewiesen haben). Darüber hinaus wurde die Bibliothek dash.webm.min.js seit 2.x nicht aktualisiert. Der Schwerpunkt der meisten Teilnehmer des Projekts dash.js war AVC mit ISOBMFF. Während wir Dash.webm.min.js gerne aktualisieren und pflegen würden, hat es das nicht getan, und deshalb würde ich nicht wollen, dass Sie Ihren Kopf schlagen und erwarten, dass es funktioniert. Ich würde erwarten, dass der Shaka-Player, der eine Google-Initiative ist, in Bezug auf WebM aktuell ist - funktioniert das für Sie? Wenn Sie sich in die Unkräuter vertiefen möchten und das-d.webm.min auf den neuesten Stand bringen wollen, wäre das gut für die Gemeinde.

+1

Danke für Ihre Antwort @ Willensrecht. Ich hatte keine Ahnung von dem Zustand der Webm-Bibliothek im Projekt dash.js. Ich habe dem Shaka-Spieler keinen Versuch gegeben, aber ich werde es tun. Ich würde auch gerne zu der dash.web.js lib beitragen, aber da ich gerade in das Video-Streaming-Thema komme, würde es eine Weile dauern, alles zu verstehen, um meine Hände mit dem Code schmutzig zu machen. –