Mpeg Dash流
我正在写关于现场直播的论文。我使用了ffmpeg,ngix服务器与rtmp模块和dash.js从破折号工业。我用ffmpeg开始流到服务器,用破折号开始玩,玩家跑得很好,但也有一些问题。
只有当mpd-破折号播放列表仍然有块t=0时才播放,所以每当用户请求播放器和*.mpd更新时,t=0播放器就不会运行。
我将我的*.mpd文件上传到破折号气垫船并得到错误:"Schematron验证不成功--破折号无效!“但剧作家是由nginx模块生成的,而不是我。
在搜索了一些论坛之后,我得到了nginx模块生成错误的dash play list *.mpd Nginx rtmp模块-bug的一些信息,并且可能是该bug被修复并合并到github中的master (我认为是Mered报告)。但是我试着下载最新的nginx和rtmp模块,播放器也玩错了。
如果我在2年前使用dash.all.js版本:如果play list *.mpd中存在块t=0,则只播放好(play to end),或者如果我玩dash.all.js持续的版本,则播放机不播放(在流媒体中播放):视频播放,并很快停止播放或循环播放。
我真的需要一些帮助,我的截止日期快到了。
下面是我的nginx配置(主配置):
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;
}
}
}
还有一些配置:
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>
他打得很好,但没有破折号。我尝试在nginx和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>
我真的需要帮助。 谢谢你的阅读,对我糟糕的英语感到很抱歉。
发布于 2016-02-29 19:01:54
虽然这个问题是在nginx-rtmp中修复的,但看起来原来的存储库已经过时了--修复只在一些分叉中可用。尝试从https://github.com/sergey-dryabzhinsky/nginx-rtmp-module或https://github.com/mattpepin/nginx-rtmp-module编译nginx这两种方法似乎都有将其修复的提交。
https://stackoverflow.com/questions/34322021
复制相似问题