我正在写关于流媒体直播的论文。我使用了ffmpeg、带有rtmp模块和dash的ngix服务器。来自Dash industry的js。我通过ffmpeg启动流到服务器,并通过dash播放,播放器运行良好,但存在一些问题。
仅当mpd dash play list仍有chunk t=0时,玩家才能玩,所以每当用户请求玩家和*。mpd已更新,但块t=0玩家不运行。
我上传我的*。mpd文件发送到Dash验证器,并收到错误:“Schematron验证未成功–Dash无效!”。但玩家是由nginx-rtmp模块生成的,而不是我。
搜索了一些论坛后,我得到了一些信息,即nginx-rtmp模块生成错误的dash播放列表*. mpd Nginx rtmp模块-bug,可能是该错误已修复并合并到github中的master(我想是这样的Mered-报告)。但我尝试下载最新的nginx和rtmp模块,播放器也播放不正确。
如果我玩dash。全部的2年前的js版本:如果播放列表*中存在chunk t=0,则视频仅播放良好(播放至结束)。mpd,或者如果我玩dash,播放器不玩(在流媒体播放过程中播放)。全部的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 config和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中得到了修复,但看起来原始存储库已经过时了——该修复仅在某些Fork中可用。尝试从中编译nginx rtmphttps://github.com/sergey-dryabzhinsky/nginx-rtmp-module或https://github.com/mattpepin/nginx-rtmp-module-这两个似乎都有解决问题的promise。
author: Wuxiaolong 在Python中有一些内置的数据类型,比如int, str, list, tuple, dict等。Python的collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:namedtuple, defaultdict, deque, Counter, OrderedDict等,其中defaultdict和namedtuple是两个很实用
1、主模块和非主模块的定义 在 Python 函数中,如果一个函数调用了其他函数完成一项功能,我们称这个函数为主函数,如果一个函数没有调用其他函数,我们称这种函数为非主函数。主模块和非主模块的定义也类似,如果一个模块被直接使用,而没有被别人调用,我们称这个模块为主模块,如果一个模块被别人调用,我们称这个模块为非主模块。 2、name 属性 在 Python 中,有主模块和非主模块之分,当然,我们也
包(crate) Rust 中,crate 是一个独立的可编译单元。具体说来,就是一个或一批文件(如果是一批文件,那么有一个文件是这个 crate 的入口)。它编译后,会对应着生成一个可执行文件或一个库。 执行 cargo new foo,会得到如下目录层级: foo ├── Cargo.toml └── src └── lib.rs 这里,lib.rs 就是一个 crate(入口),它编
问题内容: 我刚刚开始在我的Java类中使用from,它很棒!但是,如果尝试包含python模块(,等),则会收到以下异常(用于): 如何从jython jar中使类“查看” python可用的模块? 问题答案: 您嵌入了jython,将使用一些Python模块: 如果要在Java代码中设置路径(sys.path): Py在org.python.core中。 rootPath和modulesDir
主要内容:实例,BEGIN 和 END 模块,实例,什么是 Perl 模块?,实例,Require 和 Use 函数,实例,实例,创建 Perl 模块,安装 Perl 模块Perl 中每个包有一个单独的符号表,定义语法为: 此语句定义一个名为 mypack 的包,在此后定义的所有变量和子程序的名字都存贮在该包关联的符号表中,直到遇到另一个 package 语句为止。 每个符号表有其自己的一组变量、子程序名,各组名字是不相关的,因此可以在不同的包中使用相同的变量名,而代表的是不同的变量。 从一个包
食氧;视窗7;JDK 9决赛从9日开始,21日结束;JUnit4.12和现有的应用程序。作为起点,可以编译、执行应用程序,并且所有JUnit测试都显示为绿色。现在我们使用eclipse生成文件模块信息。JAVA结果是: 但有一个错误:junit无法解析为模块。问题是:如何告诉文件junit没有定义任何模块,应该在兼容模式下运行?
在路径上使用 super (父级)和 self(自身)关键字,可以在访问项时消除歧义和防止不必要的路径的硬编码。 fn function() { println!("called `function()`"); } mod cool { pub fn function() { println!("called `cool::function()`"); }
当一个项目变大以后,良好的软件工程实践是把它分为一堆较小的部分,再把它们装配到一起。定义良好的接口也非常重要,以使有些功能是私有的,而有些是公有的。Rust 有一个模块系统来帮助我们处理这些工作。 Rust 有两个不同的术语与模块系统有关:包装箱(crate)和模块(module)。包装箱是其它语言中库(library)或包(package)的同义词。因此,“Cargo”则是 Rust 包管理工具