我正在搜索文档,但尚未成功找到示例代码.我需要从我的流服务器播放视频.有什么办法吗?或者可能是react-js不支持Android上的视频.
android video-streaming http-live-streaming m3u8 react-native
我想解析HLS master m3u8文件并从中获取带宽,分辨率和文件名.目前我正在使用String解析来搜索某些模式的字符串,并使用子字符串来获取值.
示例文件:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=476416,RESOLUTION=416x234
Stream1/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=763319,RESOLUTION=480x270
Stream2/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1050224,RESOLUTION=640x360
Stream3/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1910937,RESOLUTION=640x360
Stream4/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3775816,RESOLUTION=1280x720
Stream5/index.m3u8
Run Code Online (Sandbox Code Playgroud)
但是我发现我们可以使用这个问题中提到的正则表达式来解析它: 在Android中匹配正则表达式模式的问题
我没有任何正则表达的想法,所以有人请指导我使用正则表达式解析它.
或者有人可以帮我编写regexp来解析下面的字符串中的BANDWIDTH和RESOLUTION值
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=476416,RESOLUTION=416x234
Run Code Online (Sandbox Code Playgroud) 我有mp4文件(Big Buck Bunny):
持续时间:00:09:56.50
比特率:2048 kb/s
大小:1280x720
fps:29.97
我在2秒后设置了常量关键帧.
我想为HLS准备这个视频.
我使用它来生成m3u8播放列表并生成ts块:
ffmpeg -i input.mp4 -hls_time 2 out.m3u8
Run Code Online (Sandbox Code Playgroud)
但不幸的是,我不明白它是如何工作的.
我认为这个命令生成298个2秒的块,但它只生成152个不同长度的块(3 - 9秒).
但最奇怪的是它创建了m3u8文件,只有5个文件链接.
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:9
#EXT-X-MEDIA-SEQUENCE:148
#EXTINF:8.341667,
out148.ts
#EXTINF:7.841167,
out149.ts
#EXTINF:0.967633,
out150.ts
#EXTINF:8.341667,
out151.ts
#EXTINF:7.140467,
out152.ts
#EXT-X-ENDLIST
Run Code Online (Sandbox Code Playgroud)
我认为m3u8文件必须包含视频的所有部分.有人可以解释我如何每2秒钟创建298个块并正确填充m3u8文件吗?
我正在检查#EXT-X-DISCONTINUITY-SEQUENCE
HLS的m3u8文件中的标记。(https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.3.3)有人可以解释它的工作方式吗?
例如,假设如下制作了m3u8文件以进行实时流式传输,两秒钟后segment1.060.ts,file.000.ts也将从列表和#EXT-X-DISCONTINUITY标记中消失。毕竟file.001.ts将成为列表中的第一个媒体段。
在这种状态下,什么样的序列号应该是#EXT-X-MEDIA-SEQUENCE
,#EXT-X-DISCONTINUITY-SEQUENCE
?
#EXT-X-DISCONTINUITY
应该再次放在file.001.ts行的前面?
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-MEDIA-SEQUENCE:60
#EXT-X-DISCONTINUITY-SEQUENCE:0
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:2
#EXTINF:0.933600,
segment1.060.ts
#EXT-X-DISCONTINUITY
#EXTINF:0.966911,
file.000.ts
#EXTINF:1.000489,
file.001.ts
Run Code Online (Sandbox Code Playgroud) 我有一个要求,我需要从Android中的HLS流中提取元数据.我找到了两个库FFMPEG和VITAMIO.考虑到HLS流媒体在Android上的零碎支持,在阅读了大量更令人困惑的文章之后,我已经完成了上述两个库的进一步研究.我还没有找到一个单独的应用程序,其中提取元数据(定时元数据)已经在Android上完成.
如果在Android上甚至可能,我很困惑.如果是这样,我应该使用哪种方法......帮助我......
HTTP Live Streaming 会话中 I 帧的推荐位置是什么?
我知道,如果我要使用 #EXT-XI-FRAMES-ONLY 标签,那么每个段在段的最开始都恰好包含 1 个 I-Frame。
但是如果我不使用这个标签呢?
如果我严格根据时间长度创建段会怎样?
如果一个片段不是以 I-Frame 开头,玩家是否通常认为他们应该根据前一个片段的最后一个 I-Frame 计算图像?如果是这样,那我为什么还要创建#EXT-XI-FRAMES-ONLY 播放列表?
我想做一个直播。而且,我想使用 HLS。
我知道 HLS 直播流只是一个带有“.m3u8”扩展名的主播放列表文件,其中列出了所有要播放的文件。
但是,对于实时流,由于并非所有文件都可以随时使用,因此它们会在进来时添加。
我现在想使用 S3 来托管这些文件和播放列表文件。
现在,我想更新 S3 中的播放列表文件。但它实际上将替换现有的播放列表文件,而不是仅仅更新它(根据这个答案)。
所以,我假设在文件替换期间不会有死区时间。如果有死区时间,我该如何克服它?这是这样做的方法还是有其他更好的方法来做到这一点。
我正在使用 NodeJS 服务器,仅供参考。
*没有文件时的死区时间。
我目前正在构建一个用于下载 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
我无法访问m3u8文件,但访问css,txt,jpg,js,...(在wwwroot中)没有问题。IIs Mime类型和web.confing和WebHostBuillder.UseWebRoot设置完成了,但问题没有解决。