我正在写关于直播的论文。 我使用了ffmpeg,带有rtmp模块的ngix服务器以及来自Dash行业的 dash.js。 我开始通过ffmpegstream向服务器,并通过短跑,玩家运行良好,但也有一些问题。
玩家只有在mpd-dash play list仍然有chunk t = 0的情况下才会玩,所以无论何时用户请求玩家和* .mpd更新out chunk t = 0玩家都不会运行。
我将我的* .mpdfile upload到Dash Validator,并得到错误:“Schematronvalidation不成功 – DASH无效!”。 但是playman是由nginx生成的 – rtmp模块不是我的。
search一些论坛后,我得到了一些信息, Nginx的rtmp模块生成错误的短跑播放列表* .mpd Nginx rtmp模块-bug ,并可能是该错误已修复,并合并到主(github)(我认为如此Mered – 报告 )。 但是我试过下载最新的nginx和rtmp模块,播放器也玩不正确。
如果我玩的是2年前的dash.all.js版本:如果在播放列表* .mpd中存在块t = 0,则只播放video(播放结束),或播放器不播放(在stream媒体中播放)我玩了dash.all.js持续版本:video播放,并立即停止播放或循环播放。
我真的需要一些帮助,我的最后期限即将到来。
这是我的nginxconfiguration(主configuration):
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; } } }
和其他一些configuration:
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 *; }
和在HTML播放器:
<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>
他打得很好,但不是破折号。 我试着改变nginxconfiguration中的破折号configuration和rtmp模块的C源与重新编译,但没有改变的东西。
我的mpd播放列表:
<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>
我真的需要帮助。
感谢您的阅读,对于我的英文不好,真的很抱歉。
虽然这个问题已经在nginx-rtmp中解决了,但是看起来原来的版本库已经过时了 – 修正只能在一些分支中使用。 尝试从https://github.com/sergey-dryabzhinsky/nginx-rtmp-module或https://github.com/mattpepin/nginx-rtmp-module编译nginx-rtmp – 两者似乎都有提交它在。