我是新的html 5自适应流媒体和信息是相当矛盾的.我想在我的Windows服务器云上创建一个测试环境,流式传输一个2小时的h264文件,并在我的本地计算机上使用html5播放器播放.
问题:为什么我需要Dash.js来播放Mpeg短划线视频?Dash.js是我必须在服务器中安装的(听起来很明显)还是客户端(听起来很奇怪)?
我正在使用以下命令为html5流创建一个支离破碎的mp4:
-i rtsp://172.20.28.52:554/h264 -vcodec copy -an -f mp4 -reset_timestamps 1 -movflags empty_moov+default_base_moof+frag_keyframe -loglevel quiet -
Run Code Online (Sandbox Code Playgroud)
一切都运行良好,期待我试图解决的延迟问题.如果我每次从stdout进入数据时都会记录,并且到达时间戳,我得到这个输出:
16/06/2015 15:40:45.239数据大小= 24
16/06/2015 15:40:45.240得到的数据大小= 7197
16/06/2015 15:40:45.241得到数据大小= 32768
2015年6月16日15:40:45.241数据大小= 4941
2015年6月16日15:40:45.241数据大小= 12606
2015年6月16日15:40:45.241数据大小= 6345
16/06/2015 15:40:45.241得到数据大小= 6339
2015年6月16日15:40:45.242得到数据大小= 6336
2015年6月16日15:40:45.242得到数据大小= 6361
2015年6月16日15:40:45.242获得数据大小= 6337
16/06/2015 15:40:45.242得到数据大小= 6331
2015年6月16日15:40:45.242得到数据大小= 6359
16/06/2015 15:40:45.243得到的数据大小= 6346
16/06/2015 15:40:45.243得到的数据大小= 6336
2015年6月16日15:40:45.243数据大小= 6338
2015年6月16日15:40:45.243得到数据大小= 6357
2015年6月16日15:40:45.243得到数据大小= 6357
16/06/2015 15:40:45.243得到的数据大小= 6322
16/06/2015 15:40:45.243得到数据大小= 6359
2015年6月16日15:40:45.244数据大小= 6349
16/06/2015 …
我正在撰写关于直播的论文.我用的ffmpeg,与RTMP模块和dash.js从ngix服务器短跑行业.我通过ffmpeg开始流向服务器,并且通过破折号播放,播放器运行良好,但是存在一些问题.
如果mpd-dash播放列表仍然具有块t = 0,则播放器仅播放,因此每当用户请求播放器和*.mpd更新时,块t = 0播放器都不会运行.
我将*.mpd文件上传到Dash Validator并收到错误:"Schematron验证未成功 - DASH无效!".但是玩家是由nginx生成的 - rtmp模块而不是我.
在搜索了一些论坛后,我得到了一些信息,nginx-rtmp模块生成错误的短划线播放列表*.mpd Nginx rtmp模块-bug,可能是该bug被修复并合并到github中的master(我认为是Mered - 报告).但我尝试下载最新的nginx和rtmp模块,播放器也播放不正确.
如果我玩2年前的dash.all.js版本:视频只播放好(播放结束)如果播放列表*.mpd中存在chunk t = 0,或播放器不播放(播放中间播放)如果我玩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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
和其他一些配置:
location /hls {
# Serve HLS fragments …Run Code Online (Sandbox Code Playgroud) 我期待在HLS和MPEG Dash之间进行转换.我不访问原始完全连接的视频文件,只访问单个HLS段.
在对MPEG Dash进行此转换时,我需要为Dash清单.mpd文件提供初始化段.
我的问题是:
也许一个解决方案MP4Box是将'.ts'的HLS段转换为自动初始化的Dash'.m4s'段,但我不确定如何解决这个问题?
任何想法都非常感谢.
非常感谢.
更新:使用原始hls段流式传输的片段.视频一直播放,但只是黑色.
<Representation width="426" height="238" frameRate="25" id="238p 400kbps" bandwidth="400000">
<SegmentList timescale="25000" duration="112500">
<SegmentURL media="video_0_400000/hls/segment_0.ts"/>
<SegmentURL media="video_0_400000/hls/segment_1.ts"/>
<SegmentURL media="video_0_400000/hls/segment_2.ts"/>
</SegmentList>
</Representation>
</AdaptationSet>
Run Code Online (Sandbox Code Playgroud) ffmpeg http-live-streaming adaptive-bitrate mpeg-dash mp4box
我正在研究 DASH,试图为最终用户优化 QoE。
我有一个视频,并使用 ffmpeg 将其编码为不同的比特率,一切都很好,并且可以使用 dash 播放该视频。
我想要的是将用户收到的片段合并为一个 m4,并将该 m4 转换为 mp4。
我在 ffmpeg 中尝试了很多方法,但它总是给我这个错误:
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x9a9e500] could not find corresponding track id 1
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x9a9e500] could not find corresponding trex
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x9a9e500] error reading header
test2.m4s: Invalid data found when processing input
Run Code Online (Sandbox Code Playgroud)
那里有segment_1.m4s。
我该如何解决这个问题?
我一直在尝试实现一个类似 Plex 的视频播放器,可以按需转码任意视频文件,并在网页上使用 MPEG-Dash 播放它。我能够使用dash.js参考实现来实现客户端播放器,因此它将动态地从服务器请求片段(SegmentTemplate在 mpd 文件中使用)。
但我在实时生成这些块时遇到一些问题。Ffmpeg 允许我设置-ss和-t定义所需片段的边界,但它们无法在播放器中正常播放,因为它们是“完整”视频文件而不是 Dash 片段。
那么,如何调整 ffmpeg 命令以将我需要的部分转码为 Dash 片段,而无需提前生成整个视频文件的片段?
输入视频文件可以是任何格式,因此不能假设它采用 mp4/dash 兼容的编解码器。因此需要转码(使用ffmpeg或类似工具)。
我当前的 ffmpeg 命令如下所示(经过多次尝试):
ffmpeg -ss 10 -t 5 -i video.mkv -f mp4 -c:a aac -c:v h264 -copyts -movflags empty_moov+frag_keyframe temp/segment.mp4
Run Code Online (Sandbox Code Playgroud)
客户端播放器应该能够缓冲接下来的 X 段,并且用户应该能够查看持续时间栏上的当前位置并寻找不同的位置。因此,将其视为直播并不是一个选择。
在他们的开发者文档中,他们说他们支持以下内容:
•容器:MP4/CENC,WebM,MPEG-DASH,SmoothStreaming
但是,MPEG-DASH和SmoothStreaming是允许各种容器的流协议.MPEG-DASH规范允许MPEG2-TS块,但我没有看到任何有关DASH清单内支持的容器格式的信息.
我目前正在使用JavaScript和MediaSource API处理DASH播放器
流媒体工作正常,但我坚持改变表示.在播放期间更改表示的最强制方式可能是替换HTML文档中的<video>元素.
Hovewer,我想知道是否有一种简单的方法来使用Media Source API实现适应(更改表示).我已经读过单个Media Source对象可以处理许多源缓冲区,但是在添加第二个视频缓冲区之后会引发异常.
我使用的是Chrome 43.0.2357.65m
var mediaSource = MediaSource();
var url = URL.createObjectURL(mediaSource);
videoElement.src = url;
mediaSource.addEventListener('sourceopen', function () {
var buffer1 = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.4d4015"');
var buffer2 = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.4d4015"');
}
Run Code Online (Sandbox Code Playgroud)
例外:
Uncaught QuotaExceededError: Failed to execute 'addSourceBuffer' on 'MediaSource': This MediaSource has reached the limit of SourceBuffer objects it can handle. No additional SourceBuffer objects may be added.
Run Code Online (Sandbox Code Playgroud) 我知道我的术语不正确,但在视频方面我是一个完整的新手。
我有一个普通的 .mp4 视频文件。我使用 MP4Box 来分割视频文件,这样我就可以使用支持 MPEG dash 的视频播放器播放它。它不是通过创建多个较小的视频文件来分割的。它会创建一个比旧视频文件大一点的新的大视频文件。
我想将常规视频文件与虚线视频文件进行比较,看看 MP4Box 对它做了什么来分割它。我相信它正在向新视频文件添加某种类型的标题。显然,当我在文本编辑器中打开它时,它是不可读的。我该如何比较这些文件?
我正在使用 FFmpeg 创建 CMAF 流,并使用FFMpeg的方法将其上传到AWS资源 (AWS MediaStore) PUT。我需要Content-Type在上传清单和段时传递标头。我有 3 种类型的文件:
application/x-mpegURL : m3u8 清单
application/dash+xml : mpd 清单
video/mp4 : 视频片段
目前,所有类型都Binary - octet-stream在AWS资源 (AWS MediaStore)中设置为。由于我将上传大量文件,因此无法在文件上传后使用 AWS Lambda 函数设置正确的内容类型。
[https @ 0x555fe7a7d1c0] Opening 'https://XXXX.YYYY.amazonaws.com/chunk-stream0-00001.mp4' for writing
[https @ 0x555fe7a7d0c0] request: PUT /chunk-stream0-00001.mp4 HTTP/1.1
Transfer-Encoding: chunked
User-Agent: Lavf/58.28.100
Accept: */*
Connection: keep-alive
Host: XXXXX.YYYY.amazonaws.com
Icy-MetaData: 1
Run Code Online (Sandbox Code Playgroud)
我尝试了 FFMpeg 的静态构建和主分支。我尝试了不同的方法来传递内容类型,但没有成功:
-mime_type 1 -headers "Content-type: video/mp4\r\n"
-mime_type "video/mp4,application/dash+xml,application/x-mpegURL"
-content_type application/dash+xml
-multiple_requests …
ffmpeg mediastore amazon-web-services http-live-streaming mpeg-dash
mpeg-dash ×10
ffmpeg ×5
video ×3
dash.js ×2
media-source ×2
mp4 ×2
chromecast ×1
google-cast ×1
html5-video ×1
javascript ×1
mediastore ×1
mp4box ×1
mpeg ×1
nginx ×1
rtmp ×1
transcoding ×1