我有一个 .ts 视频,当我运行基本的 gstreamer 管道时,出现错误,无法对视频进行解复用。
命令:
gst-launch-1.0 filesrc location="/videos/my_video.ts" ! tsdemux ! meta/x-klv ! fakesink
我收到错误:
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
WARNING: from element /GstPipeline:pipeline0/GstTSDemux:tsdemux0: Delayed linking failed.
Additional debug info:
gst/parse/grammar.y(853): gst_parse_no_more_pads (): /GstPipeline:pipeline0/GstTSDemux:tsdemux0:
failed delayed linking some pad of GstTSDemux named tsdemux0 to some pad of GstFakeSink named fakesink0
ERROR: from element /GstPipeline:pipeline0/GstTSDemux:tsdemux0: Internal data stream error.
Additional debug info:
../gst/mpegtsdemux/mpegtsbase.c(1759): mpegts_base_loop (): /GstPipeline:pipeline0/GstTSDemux:tsdemux0:
streaming stopped, reason not-linked (-1)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...
当我通过 ffmpeg 运行相同的视频时:
ffmpeg -i /video/my_video.ts -map data-re -codec copy -f data
我出去了:
Duration: 00:29:56.49, start: 1920.682267, bitrate: 1873 kb/s
Program 1
Stream #0:0[0x21]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn
Stream #0:1[0x28]: Data: klv (KLVA / 0x41564C4B)
我还成功使用 ffmpeg 将 klv 数据提取到 .bin 文件并分析其中的 klv 数据。
尽管当 ffmpeg 命令运行时,它最初也给了我这个错误:
Last message repeated 1 times
[h264 @ 0x15d004590] decode_slice_header error
[h264 @ 0x15d004590] no frame!
[h264 @ 0x15d004590] non-existing PPS 0 referenced
在产生结果之前会打印很多次。 我的理解/理论是视频在开始时丢失了一些关键帧数据和/或开始时存在某种压缩错误,但这只是我的猜测。 无论问题是什么,ffmpeg 都能够处理,但 gstreamer 却不能。
我可以对视频或 gstreamer 中做些什么来处理可能出现的错误吗?我可以对视频本身进行任何其他测试来指出其他原因吗?
我在使用最新版本的 Gstreamer 时遇到了这个问题。我也有一个 MPEG2-TS 的 RTP 流,其中有 1 个视频流和 1 个 PID 为 0x28 的 KLV 流(奇怪的 KLV 版本?)。
降级到 1.22.12 可以解决这个问题。
对我来说问题是由于其他原因我需要在本地构建它,与最新版本相比,1.22.12 现在很难构建。