2015-12-16 7 views
5

Mpeg Dash-Streaming

ich in meiner Doktorarbeit über Live-Streaming arbeite. Ich benutzte ffmpeg, ngix Server mit rtmp Modul und dash.js von Dash industry. Ich starte Stream zu Server von ffmpeg, und spiele mit dem Strich, der Player lief gut, aber es gab einige Probleme.Nginx-rtmp Modul und mpeg-Dash (Dash Industrie dash.js)

Player nur spielen, wenn mpd-dash spielen Liste immer noch chunk t = 0, also wann immer Benutzer anfordern Spieler und * .mpd aktualisiert mit out Chunk t = 0 Spieler nicht laufen.

Ich lade meine * .mpd Datei auf Dash Validator und bekomme Fehler: "Schematron Validierung nicht erfolgreich - DASH ist nicht gültig!". Aber playist wird von nginx generiert - rtmp modul nicht ich.

Nach einigem Forum Suche habe ich einige Informationen, dass nginx-rtmp Modul falsch dash Spielliste generiert * Nginx rtmp module -bug .mpd und kann, dass Fehler behoben und verschmolzen sein wurden in Github zu meistern (i thinked so Mered - report). Aber ich habe versucht, neueste nginx und rtmp-Modul, Player auch falsch spielen.

Wenn ich mit demh.all.js vor 2 Jahren gespielt habe: Video nur gut abspielen (Play to End) wenn Chunk t = 0 in der Playliste * .mpd existiert, oder Player nicht spielen (in der Mitte spielen von streaming) Wenn ich mit demh.all.js gedriftete version gespielt habe: video play und hör auf zu spielen bald oder loop playing.

Ich brauche wirklich etwas Hilfe, meine Deadline kommt.

Hier ist meine nginx config (Haupt config):

rtmp { 

    server { 
     listen 1935; 
     ping 30s; 
     notify_method get; 
     chunk_size 4000; 
     allow play all; 

     application myapp { 
      live on; 
      dash on; 
      dash_path /tmp/dash; 

      hls on; 
      hls_cleanup on; 
      hls_sync 100ms; 
      hls_fragment 2s; 
      hls_path /tmp/hls; 

      allow play all; 


     } 
    } 
} 

and some others config:

location /hls { 
     # Serve HLS fragments 
     types { 
      application/vnd.apple.mpegurl m3u8; 
      video/mp2t ts; 
     } 
     root /tmp; 
     add_header Cache-Control no-cache; 
     add_header Access-Control-Allow-Origin *; 
    } 
    location /dash.js { 
     root /usr/share/nginx/html; 
    } 

    location /streaminghls { 
     root /usr/share/nginx/html; 
    } 

    location /dash { 
     # Serve DASH fragments 
     root /tmp; 
     add_header Access-Control-Allow-Origin *;    

    } 

and in html player :

<script src="dash-old.all.js"></script> 

     <script> 
      function getUrlVars() { 
       var vars = {}; 
       var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) { 
        vars[key] = value; 
       }); 
       return vars; 
      } 
      function startVideo() { 
       var vars = getUrlVars(), 
        url = "http://192.168.100.107:80/dash/Screen.mpd", 
        video, 
        context, 
        player; 
       if (vars && vars.hasOwnProperty("url")) { 
        url = vars.url; 
       } 
       video = document.querySelector(".dash-video-player video"); 
       context = new Dash.di.DashContext(); 
       player = new MediaPlayer(context); 
       player.startup(); 
       player.attachView(video); 
       player.setAutoPlay(true); 
       player.attachSource(url); 
      } 
     </script> 

Hls play excellently but not dash. I tried changing dash config in nginx config and C-source of rtmp-module with recompiling but not thing changed.

My mpd play list :

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2011/XMLSchema-instance" type="dynamic" availabilityStartTime="2015-12-17T03:17:07+07:00" availabilityEndTime="2015-12-17T03:18:23+07:00" minimumUpdatePeriod="PT5S" minBufferTime="PT5S" timeShiftBufferDepth="PT0H0M0.00S" suggestedPresentationDelay="PT10S" profiles="urn:hbbtv:dash:profile:isoff-live:2012,urn:mpeg:dash:profile:isoff-live:2011" xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011 DASH-MPD.xsd"> 
<Period start="PT0S" id="dash"> 
<AdaptationSet id="1" segmentAlignment="true" maxWidth="320" maxHeight="240" maxFrameRate="20"> 
<Representation id="Screen_H264" mimeType="video/mp4" codecs="avc1.64000c" width="320" height="240" frameRate="20" sar="1:1" startWithSAP="1" bandwidth="192000"> 
<SegmentTemplate presentationTimeOffset="0" timescale="1000" media="Screen-$Time$.m4v" initialization="Screen-init.m4v"> 

<SegmentTimeline> 
<S t="0" d="12500"/> 
<S t="12500" d="12500"/> 
<S t="25000" d="10550"/> 
<S t="35550" d="15700"/> 
<S t="51250" d="12500"/> 
<S t="63750" d="12500"/> 
</SegmentTimeline> 
</SegmentTemplate> 
</Representation> 
</AdaptationSet> 
<AdaptationSet id="2" segmentAlignment="true"> 
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="1"/> 
<Representation id="Screen_AAC" mimeType="audio/mp4" codecs="mp4a.40.2" audioSamplingRate="22050" startWithSAP="1" bandwidth="62000"> 
<SegmentTemplate presentationTimeOffset="0" timescale="1000" media="Screen-$Time$.m4a" initialization="Screen-init.m4a"> 
<SegmentTimeline> 
<S t="0" d="12500"/> 
<S t="12500" d="12500"/> 
<S t="25000" d="10550"/> 
<S t="35550" d="15700"/> 
<S t="51250" d="12500"/> 
<S t="63750" d="12500"/> 
</SegmentTimeline> 
</SegmentTemplate> 
</Representation> 
</AdaptationSet> 
</Period> 
</MPD> 

I really need help.

Thanks for reading, and am so sorry about my bad english.

Antwort