Nginx-rtmp-Modul und mpeg-dash(Dash industry dash.js)
Mpeg-Dash-Streaming
Arbeite ich an meiner Doktorarbeit über live-streaming . Ich benutzt ffmpeg,ngix server mit rtmp-Modul und dash.js von Dash industry. Ich starte stream server ffmpeg und spielen von dash, Spieler gefahrene gut, aber es gab einige Probleme.
Spieler nur spielen, wenn mpd-dash-spielen Liste noch chunk t=0, also wenn der Benutzer eine Anfrage-player und *.mpd aktualisiert mit out-chunk t=0 player nicht ausgeführt werden.
Ich meine Dateien hochladen *.mpd-Datei zu Dash Validator und erhalten den Fehler: "Schematron-Validierung nicht erfolgreich – DASH ist nicht gültig! ". Aber playist ist erzeugen von nginx - rtmp-Modul nicht mir.
Suche nach irgendeinem forum habe ich einige Informationen, nginx-rtmp-Modul erzeugen falsche dash Spiel-Liste *.mpd Nginx-rtmp-Modul -bug , und kann sein, dass der Fehler behoben wurde und zusammengeführt, um Meister in github (ich dachte so Mered - Bericht) . Aber ich habe versucht, herunterladen der neuesten nginx-rtmp-Modul , Spieler spielen auch falsch.
Wenn ich mit gespielt dash.all.js version 2 Jahr : video nur gut spielen, (Spiel zu Ende), wenn chunk t=0 existieren in der Spiel-Liste *.mpd ,oder der Spieler nicht spielen (spielen in der Mitte der streaming)
Wenn ich mit gespielt dash.all.js dauerte version : video-Wiedergabe-und stop-spielen-bald-oder loop-Wiedergabe.
Ich brauche Hilfe, meine Frist ist comming.
Hier ist meine nginx config(main 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;
}
}
}
und einige andere 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 *;
}
und im 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 spielen hervorragend, aber nicht dash. Ich habe versucht, ändern dash config in nginx-config und C-Quelle von rtmp-Modul mit kompilieren aber nicht, was sich verändert.
Mein mpd-play-Liste :
<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>
Ich brauche wirklich Hilfe.
Vielen Dank für das Lesen, und bin so sorry für mein schlechtes Englisch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Während dieses Problem wurde behoben in der nginx-rtmp, es sieht aus wie das original-repository ist Schal geworden - die Lösung ist nur in einigen Gabeln. Versuchen Sie kompilieren von nginx-rtmp von https://github.com/sergey-dryabzhinsky/nginx-rtmp-module oder https://github.com/mattpepin/nginx-rtmp-module - beide scheinen den commit, der es fest in.