问题标签 [transport-stream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 使用 Python 检查 MPEG 传输流的第一个字节是否是同步字节
我正在尝试使用 Python 查看传输流,并读取第一个字节。完成后,我将检查该字节是否为 0x47 以确定传输流是否有效。
这是我尝试过的代码:
因此,如果第一个字节是 0x47 或不是,它应该显示。
我在这里遇到的问题是此代码的输出显示:
正如@szatmary 在这里指出的那样:使用 Python 从 MPEG 传输流中提取第一个 188 字节数据包,但看不到同步字节,字母 G 实际上是 0x47(十六进制)的 ASCII 表示。
我怎样才能有效地对本质上相同但以两种不同方式表示的值进行比较?
python - 如何在 Python 中使用 subprocess.run 运行这个包含引号的 tsduck shell 命令
这是 tsduck 手册中所写的命令:
这是我的版本:
如果我尝试将命令中的带引号部分保留为完整字符串,并且双引号中的空格围绕我的单引号,则会返回此错误:
完全没有引号,它会错误地说输入太多,就像它直接进入没有引号的终端一样
蟒蛇 3.8.5,ubuntu 20.04
ffmpeg - 我可以在 MPEG TS 容器中有一个 rawvideo 流吗
我通过网络 (UDP) 收到一个 MPEG TS 容器。它包含两个流:一个具有 yuv420p 像素格式的 mpeg2video 视频流和一个使用专有 KLV 格式编码的数据流。
我的接收器程序必须使用 Python。所以,我不能直接使用 FFMPEG 库(如AVFormat
, AVCodec
)。
现在我的问题如下:
我需要接收视频帧并将它们保存为 RGB 图像作为原始numpy
数组。我还需要为每一帧解析相应的 KLV 数据。视频帧和 KLV 数据单元之间存在一对一的关系。
我想我ffprobe
用来输出数据包,包括来自传入容器的有效负载数据,然后解析输出ffprobe
以获取图像和元数据:
这给了我一个输出(在test_video.packets.data.json
文件中),如:
我可以从数据包中提取 KLV 数据并解析它。然而,视频数据包中的数据以 yuv420p 像素格式编码为 mpeg2video 视频。
我的问题:
- 如何从该 mpeg2 编码的有效负载中获取原始像素值?
- 是否可以使用 ffmpeg 接收原始容器并将其(使用两个流)复制到新容器中,但使用原始视频而不是 mpeg2 视频?如果是,如何?命令应该是什么?我试过例如:
ffmpeg -i udp://127.0.0.1:12345 -map 0:0 -codec rawvideo -pix_fmt rgb24 -map 0:1 -codec copy -f mpegts udp://127.0.0.1:11112
,但它再次给了我视频数据包有效载荷中的 mpeg2 编码视频数据
javascript - 如何在 HTML 播放器上流式传输实时 TS(传输流)文件?
我想在 HTML 播放器上流式传输传输流文件。有没有办法实现它?
我尝试了以下这些方法来播放 TS 文件-
a)把它放在一个视频标签中:我只是写了一个视频标签,但它给我显示了一个空白屏幕。
b)我用 iframe 标签试过:
我写了一个简单的标签:它实际上下载了文件,但屏幕变成空白。
c) 我使用 HLS 播放器显示 ts 文件 HLS (hls.js) 验证了文件。但是它给了我“manifestLoadError”。
谁能帮我解决这个 HLS 错误?或者建议我另一种方式来显示这个 TS 文件?
video - 根据流中的位置将 PTS 分配给数据包
我有一个带有视频和元数据流的 TS。视频已正确设置 PTS 值,而元数据没有(ffprobe 为每个提供 N/A)。但是,元数据包在流中的位置正确。
有没有一种方法可以根据元数据包在流中的位置为它们分配 PTS。确切的精度并不重要,只要 PTS 介于最后一个视频帧和下一个视频帧之间。作为最后的手段,我将不得不编写一些 C 代码来做到这一点,但我想看看 ffmpeg 前端是否可以做到这一点。
我需要这样做是因为我需要相对于另一个流偏移一个流,而“-itsoffset”似乎不起作用,我认为这是由于缺少 PTS。
ffmpeg - 无法写入时间戳未知的数据包 av_interleaved_write_frame():参数无效
我正在尝试将带有此输出的 .ts 文件转换为 mkv:
为此,我使用以下命令:
但是转换失败并出现以下错误:
我应该怎么做才能解决这个问题?我已经尝试-fflags +genpts
在开始时添加,但无论如何它都失败了。
编辑:我确实通过使用 MKVToolNix 来解决它。
ffmpeg - 将 MPEG 传输流 (.ts) 关键帧导出到 C/C++ 中的图像?Libavcodec / FFMPEG?
我有一些由 188 字节 TS 数据包组成的缓冲区。当我将它们写入文件时,我可以在视频播放器中成功查看这些 .ts 文件。MPEG-2/H.264 是传输流的格式。
现在,我想将这些传输流缓冲区(或 .ts 文件)中的关键帧导出为 .jpeg 或我的 C/C++ 项目中的其他一些常见图像格式。
这是使用 ffmpeg 从命令行执行的一项微不足道的任务,我只是将 .ts 文件和一些参数提供给它。
但是,出于该项目的目的,我想在我当前的 C/C++ 目录中将关键帧转换/导出为图像代码端,因为这些生成的图像的原始字节将被放入另一种格式。
网上的人似乎推荐使用libavcodec。ffmpeg 源代码中有一个 mpegets 文件,看起来它可能有一些后端来做我想做的事情。
但是,使用该库完成此任务所需的步骤并不明显。
我知道我可以从 C++ 调用 ffmpeg 并使用标准输入,但这不是该项目的首选解决方案。
如果有人能给我一些指导(甚至更好的一些示例代码)来完成这项任务,将不胜感激!
python - 在 Python 中快速读取 MPEG 传输流(二进制文件)PID 值
我有一个大的 MPEG (.ts) 二进制文件,通常是 188 字节的倍数,我使用 python3,当我每次读取 188 字节并解析以获得所需的值时,我发现它真的很慢。我必须遍历每个 188 字节的数据包以获取 PID(二进制数据)的值。
- 同时,当我使用任何 MPEG 离线专业分析仪时,他们会在 45 秒内获得所有 PID 值及其总计数的列表,持续时间为 5 分钟的 TS 文件,而我的程序需要 10 分钟以上才能得到相同的结果。
- 我不明白他们能多快找到,即使它们可能是用 c 或 c++ 编写的。
- 我尝试了 python 多处理,但它没有多大帮助。这意味着我解析和处理 188 字节数据的方法不正确并导致巨大的延迟。
javascript - 在 javascript 中转换“无尽”传输流
我正在尝试编写 Stalker IPTV Web 客户端。我编写了可以检索通道流的后端函数。这是标准的传输流,但它基本上永远不会结束。正常流是零散的,您应该请求下一个流或重用当前流。但是这些流在无休止地发送数据。它们肯定是可读的,因为 VLC 和来自 videojs/mux.js 的示例(https://github.com/videojs/mux.js/) 正在阅读它们。但是当 vlc 顺利播放并且没有任何问题时,mux.js 的示例加载大约 40 分钟(可能直到它填充浏览器中 js 请求的所有可用缓存)然后播放这个下载的片段。我对在浏览器中对流进行转码真的很陌生,但是我需要像 mux.js 示例一样工作的东西,但它会缓存 10 秒,然后处理它,发送到播放器,当这个片段正在播放时,它只是下载下一个或只是任何适用于这些“无尽”流的实现
如果您知道此问题的任何好的来源或解决方案,请分享。谢谢!
ffmpeg - 使用 FFMPEG 对数据流进行下采样/过滤
我们有一个.ts
输入文件,其中包含(以及其他流)视频流和符合 MISB 0604 的 KLV 数据流。这些流的输出ffprobe
是:
我们希望将视频的每 N 帧提取为.tiff
. 我们还需要将这些帧中的每一个与来自 MISB 0604 兼容数据流的相应 KLV 数据包相关联。
以下选择过滤器并按相应比率调整原始 FPS 的命令确实会导致将预期帧保存为 TIFF(在这种情况下,原始视频有 1187 帧,我希望从选择过滤器中获得 12 帧)。
但是,我似乎无法让任何过滤器处理数据流。例如 usingfilter:d
不会引发错误,但似乎也没有实际过滤。我的问题是是否ffmpeg
可以用来保存与上面对视频流执行的下采样操作相对应的“下采样”数据流?