我使用 rtmp 将流广播到服务器,并使用 HLS 将视频流式传输到我的设备。是否有一个字幕协议可以实时更新字幕,例如,服务器中有一个字幕文件,我可以继续写入该文件,我的播放器也可以继续读取该文件。
我知道 WebVTT 适用于录制的流媒体视频,但它也适用于直播流视频吗?我可以将我的播放器链接到 webVTT 文件,并且可以通过继续写入来更新字幕吗?
我有一个 IP 摄像机,它通过 UDP 在 RTSP 中发送实时流,我想在浏览器中显示这个流,我希望它可以在主要浏览器和移动设备(iO 和 Android)上运行。为了实现这一点,我想在将流发送到客户端之前将流转换为服务器上的 HTTP Live Streaming (HLS)。现在我读过不久前,Apple 添加了对分段 MP4 (fMP4) 作为流格式的支持,而通常流将以 MPEG-TS 格式发送。而fMP4也是MPEG-DASH支持的格式,几年后MPEG-DASH可能会成为行业标准。
现在我的问题是,fMP4 和 MPEG-TS 的优缺点是什么?
编辑:根据 Apple 的 HLS 技术说明,直播流必须编码为 MPEG-TS 流(https://developer.apple.com/library/content/technotes/tn2224/_index.html#//apple_ref/doc /uid/DTS40009745-CH1-ENCODEYOURVARIANTS)。是否有原因或此信息已过时?
format video-streaming live-streaming http-live-streaming fmp4
我目前正在构建一个用于下载 M3U8 播放列表的应用程序,但我遇到了一个问题:如果播放列表是用 AES-128 加密的,例如有这样一行:
#EXT-X-KEY:METHOD=AES-128,URI="https://website.com/link.key",IV=0xblablabla
我必须在将它们写入输出文件之前解密这些段,如果存在 IV,则下面的代码对我有用,但如果 IV 属性不存在,则解密会产生错误的结果:
var iv = "parsed iv"; // empty if not present
var key_url = "parsed keyurl";
var AES = new AesManaged()
{
Mode = CipherMode.CBC,
Key = await Client.GetByteArrayAsync(key_url)
};
if (!string.IsNullOrEmpty(iv))
AES.IV = Functions.HexToByte(iv.StartsWith("0x") ? iv.Remove(0, 2) : iv);
else
AES.IV = new byte[16];
//...
using (FileStream fs = new FileStream("file.ts", FileMode.Create, FileAccess.Write, FileShare.Read))
{
var data = DownloadSegment(...); // Downloads segment as byte array (encrypted)
byte[] temp = new …Run Code Online (Sandbox Code Playgroud) 我有一些.ts文件作为 hls 音频流的一部分。我可以使用该cat命令附加它们并获取 .mp3 文件吗?我很好奇如何从或文件ffmpeg创建 mp3 ,以便我可以在节点服务器中实现它.ts.m3u8
MP4文件(实际上是使用MP4格式的HLS流)包含AVC格式的H.264流:[NALU length][NALU data]. H.264 解码器需要附件 B 格式:[startcode][NALU data]. 一般来说,起始码模拟可以以AVC格式发生(例如0x00000001可以发生在编码数据内部)。这是否意味着 MP4 文件格式也可以包含带有起始码仿真的 H.264 NALU?还是应该在封装成 MP4 之前应用仿真预防?
我想从后端添加新的传入块到已经播放“实时”m3u8 播放列表的播放器
这是一个现有的播放列表(已经设置和播放)
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:6
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PROGRAM-DATE-TIME:2018-10-19T16:39:07Z
#EXTINF:6.000,
56-06000.ts
#EXTINF:6.000,
56-06000.ts
#EXTINF:6.000,
56-06000.ts
#EXTINF:6.000,
56-06000.ts
#EXT-X-ENDLIST
Run Code Online (Sandbox Code Playgroud)
这是一个更新的播放列表,我想用下一个替换旧的播放列表(在下面列出),但我不想用命令重新加载 videojs 播放器 (player.src(...))
#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:6
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PROGRAM-DATE-TIME:2018-10-19T16:39:07Z
#EXTINF:6.000,
56-06000.ts
#EXTINF:6.000,
56-06000.ts
#EXTINF:6.000,
56-06000.ts
#EXTINF:6.000,
56-06000.ts
....
....
many another chunks
....
....
#EXT-X-ENDLIST
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?或者也许存在其他更新播放列表的好方法?
就速度而言,通过 HLS 或 DASH 等自适应流协议提供静态视频内容(不是实时流)比使用 HTTP 服务器直接将其作为文件提供是否有优势?
例如,当您有一个 500MB mp4 h264+AAC 视频时,您必须通过 HTML5 视频元素在网站上提供该视频。您是否愿意直接提供它,因为大多数流行的浏览器都实现了诸如搜索之类的功能,而无需先下载整个文件;或者您愿意使用 ffmpeg 或类似的解决方案从 mp4 文件创建 HLS 块,然后向 HTML5 视频元素提供 .m3u8 播放列表源。这样做的速度有真正的优势吗?
如果您有数百个视频文件全部用作静态内容,您会实施哪一个?
所以我想做的是从我拥有的 Backblaze B2 存储桶中播放 HLS m3u8 文件(通过 B2 的 S3 API)。我遇到的问题是 HLS 文件由 .m3u8 文件组成,该文件跟踪所有 .ts 文件,这些文件是 .m3u8 文件需要播放的部分。所以我遇到的问题是,当将 .m3u8 文件放入 HTML 视频标签时,即使在兼容 HLS 文件的浏览器(即 Google Chrome)中也没有任何反应。
我检查过其他类似的问题,但似乎都不起作用,因为 ts 文件总是丢失。
我知道问题是 .ts 文件丢失,但我不知道如何从我的网络服务器引用它们。有什么方法可以通过 HTML 视频标签播放 HLS 文件及其所有部分吗?
我当前的代码是这样的:
<video width="1920" height="1080" controls>
<source src="https://f002.backblazeb2.com/file/ARandomBucket/index.m3u8" type="application/x-mpegURL">
Your browser does not support the video tag.
</video>
Run Code Online (Sandbox Code Playgroud) 我需要.ts从 mp4 视频创建固定持续时间(例如 5 或 10 秒)的视频块 ( )。我还需要不同格式的块(260p、480p、720p、1080p)。
我可以使用以下命令创建块和 m3u8:
ffmpeg -i input.mp4 -g 60 -hls_time 10 out.m3u8
Run Code Online (Sandbox Code Playgroud)
但无法创建如上所述的不同分辨率。
我有一个 Apple TV 应用程序,可以从 Windows 媒体服务播放 HLS 直播流。这些视频在 tvOS 13.3 上完美播放,但自从在 tvOS 13.4 上进行测试后,当我尝试开始流式传输视频时,我遇到了一个神秘的错误。我使用的 URL 格式是:
https://myhost.streaming.mediaservices.windows.net/{uuid}/{uuid}.ism/manifest(format=m3u8-aapl, audio-only=false)
这是当我尝试使用该 url 加载 AVPlayer 时运行 13.4 的 tvOS 设备的错误输出:
Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSLocalizedFailureReason=An unknown error occurred (-12746), NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x6000000c8360 {Error Domain=NSOSStatusErrorDomain Code=-12746 "(null)"}}
我将-12746错误跟踪到此文档,但同样没有太多细节。我还检查了errorLog()播放器项目的 ,但那里什么也没有。
另一件有趣的事情是,当我按照 Apple 的创建基本视频播放器示例时,我可以重现此错误。只需复制并粘贴他们的测试网址,它在 tvOS 13.3 及更低版本上运行良好,但在 tvOS 13.4 上失败并出现上述错误。
有其他人在 tvOS 13.4 上看到此错误吗?如果是,您找到了解决方法吗?
谢谢你的时间。