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.

InformationsquelleAutor huuthang | 2015-12-16
Schreibe einen Kommentar