HTTP Live Streaming 会话中 I 帧的推荐位置是什么?
我知道,如果我要使用 #EXT-XI-FRAMES-ONLY 标签,那么每个段在段的最开始都恰好包含 1 个 I-Frame。
但是如果我不使用这个标签呢?
如果我严格根据时间长度创建段会怎样?
如果一个片段不是以 I-Frame 开头,玩家是否通常认为他们应该根据前一个片段的最后一个 I-Frame 计算图像?如果是这样,那我为什么还要创建#EXT-XI-FRAMES-ONLY 播放列表?
我正在尝试创建一个包含多个音频流的 HLS 播放列表。我有以下文件:
- videoHD.mp4
- videoSD.mp4
- audioEN.mp4
- audioFR.mp4
- audioIT.mp4
Run Code Online (Sandbox Code Playgroud)
我将如何在ffmpeg命令中将这些全部转换在一起以创建HLS播放列表?
我使用ffmpeg -i fighter.mp4 -hls_time 10 stream.m3u8来创建m3u8文件。但是#EXT-X-KEYm3u8文件中没有信息。我应该怎么做才能在HLS播放列表中添加密钥?
我正在尝试在我的应用程序中实现自适应比特率流,它会根据连接速度自动切换质量。我怎么能做到这一点。是否有任何第三方库可用于此。默认的 android 视频视图是否支持自适应比特率流?
android http-live-streaming adaptive-bitrate android-videoview
我正在尝试从 .mp4 文件中创建一个 hls 流。到目前为止,我可以创建一个清单 + .ts 文件,但我没有 playlist.m3u8 来决定我应该根据用户的带宽为用户提供哪个清单。我怎么做?
这是我当前创建 HLS 流的命令(无播放列表):
ffmpeg -i test.mp4 -codec copy -vbsf h264_mp4toannexb -map 0 -f segment -segment_list out.m3u8 -segment_time 10 out%03d.ts
Run Code Online (Sandbox Code Playgroud)
这创建的是 out.m3u8:
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10,
out.ts
#EXTINF:10,
out.ts
Run Code Online (Sandbox Code Playgroud)
我想创造什么:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=860000
low.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=512000
medium.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=160000
high.m3u8
Run Code Online (Sandbox Code Playgroud) <video width="352" height="198" controls>
<source src="video.m3u8" type="application/x-mpegURL">
</video>
Run Code Online (Sandbox Code Playgroud)
此代码适用于我 android 设备上的所有浏览器,但不适用于我计算机上的 Firefox / Chrome / Safari。我需要在所有设备上播放视频。我能做什么?
我有这个 m3u8 文件。#EXT-X-TARGETDURATION为8,第一段#EXTINF为6,当avplayer切换到这个m3u8时,报错如下。
错误域=CoreMediaErrorDomain 代码=-12312 \“媒体输入时间值与 MEDIA-SEQUENCE 477000 的先前播放列表不匹配:8.000000 vs 6.000000\” UserInfo={NSDescription=媒体输入时间值与 MEDIA-SEQUENCE 的先前播放列表不匹配:47700 8.000000 对 6.000000}”
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:477000
#EXT-X-ALLOW-CACHE:NO
#EXT-X-VERSION:2
#EXT-X-FAXS-CM:URI="xxxxxxxx"
#EXT-X-KEY:METHOD=xxxxxxx
#EXT-X-TARGETDURATION:8
#EXTINF:6,
477000.ts
#EXTINF:8,
477001.ts
#EXTINF:8,
477002.ts
#EXTINF:8,
477003.ts
#EXTINF:8,
477004.ts
#EXTINF:8,
477005.ts
#EXTINF:8,
477006.ts
Run Code Online (Sandbox Code Playgroud)
问题是在实时播放列表中,每个片段的#EXT-X-TARGETDURATION 和#EXTINF 是否必须相等?!我找不到来自 Apple 的任何文件来定义此规则。在本文档中,https://developer.apple.com/library/ios/technotes/tn2288/_index.html
Lie Playlist 示例,它们都是相同的。
我试图找到HLS and DASH两种广泛使用的流格式之间的差异.
通过我的研究,我看了一下展示自适应流媒体特征比较的图像.
我不确定HTML5支持.
是MPEG-DASH支持HTML5的唯一流格式
或下面的图片是一种古老的功能比较的?
我想做一个直播。而且,我想使用 HLS。
我知道 HLS 直播流只是一个带有“.m3u8”扩展名的主播放列表文件,其中列出了所有要播放的文件。
但是,对于实时流,由于并非所有文件都可以随时使用,因此它们会在进来时添加。
我现在想使用 S3 来托管这些文件和播放列表文件。
现在,我想更新 S3 中的播放列表文件。但它实际上将替换现有的播放列表文件,而不是仅仅更新它(根据这个答案)。
所以,我假设在文件替换期间不会有死区时间。如果有死区时间,我该如何克服它?这是这样做的方法还是有其他更好的方法来做到这一点。
我正在使用 NodeJS 服务器,仅供参考。
*没有文件时的死区时间。
在网站上向用户提供视频时,可供选择的选项很少。即 HLS、Smooth streaming、Dash 或 HDS。Dash 似乎是一个更好的选择。看看它是如何工作的,它将文件分成许多部分并流式传输。另一种选择是手动拆分文件。破折号和拆分 mp4 文件有什么区别。
video http-live-streaming html5-video smooth-streaming mpeg-dash