同步解复用 MPEG-TS 流中的视频和 KLV 数据

问题描述 投票:0回答:1

我需要同步、逐帧地从 MPEG-TS 流中解复用视频帧和 KLV 数据。 以下命令用于解复用 KLV 数据并输出包含 KLV 数据的文本文件。

gst-launch-1.0 filesrc location="some_file.ts" ! tsdemux name=demux \
demux. ! queue ! meta/x-klv ! filesink location="some_file-KLV.txt"

以下命令用于解复用视频并输出视频文件。

gst-launch-1.0 filesrc location="some_file.ts" ! tsdemux name=demux \
demux. ! queue ! decodebin ! videorate ! videoscale ! x264enc ! mp4mux ! filesink location="some_file-video.mp4" 

结合以上两者:

gst-launch-1.0 filesrc location="some_file.ts" ! tsdemux name=demux \
demux. ! queue ! decodebin ! videorate ! videoscale ! x264enc ! mp4mux ! filesink location="some_file-video.mp4" 
demux. ! queue ! meta/x-klv ! filesink location="some_file.txt"

该命令不起作用。它只是在终端上出现以下消息后卡住了;

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...

并且,文本和视频文件的大小为 0 字节。

可以在以下位置找到示例 .ts 文件(该文件尚未由我上传和创建,它是 github 上某些代码的数据的一部分(https://gist.github.com/All4Gis/509fbe06ce53a0885744d16595811e6f) ):https://drive.google.com/drive/folders/1AIbCGTqjk8NgA4R818pGSvU1UCcm-lib?usp=sharing

感谢您的帮助!干杯。 :)

编辑:

我意识到可能会有一些混乱。上面链接中的文件仅用于创建 .ts 文件。

我正在使用的 .ts 文件可直接在以下任一链接中获取:

https://drive.google.com/drive/folders/1t-u8rnEE2MftWQkS1q3UB-J3ogXBr3p9?usp=sharing

https://easyupload.io/xufeny

gstreamer gstreamer-1.0 mpeg2-ts klvdata stanag
1个回答
0
投票

看来如果我们使用 Gstreamer 的

multiqueue
元素,而不是
queue
,则会创建文件。

我根据我发布问题的另一个网站上的评论者的建议尝试了以下操作:

gst-launch-1.0 filesrc location="MISB.ts" ! tsdemux name=demux \
demux. ! multiqueue name=mq ! decodebin ! videorate ! videoscale ! x264enc tune=zerolatency ! mp4mux ! filesink location="some_file-video.mp4" \
demux. ! mq. mq. ! meta/x-klv ! filesink location="some_file-KLV.txt"

但是,KLV 数据和帧仍然不同步。我需要每一帧对应的KLV数据。

感谢和问候。

© www.soinside.com 2019 - 2024. All rights reserved.