GStreamer 1.24无法播放含KLV元数据的MPEG2-TS流:解析PES元数据失败
解决GStreamer 1.24.8播放带KLV元数据的MPEG-TS流失败问题
GStreamer 1.24.x版本的tsdemux对PES元数据解析逻辑做了严格更新,导致携带KLV元数据(PID 0x28)的MPEG-TS流播放时报错Failed to parse PES metadata access units,以下是针对性解决方法:
一、优先恢复视频播放
方法1:忽略KLV对应的PID
直接让tsdemux跳过解析PID为0x28的KLV流,避免触发错误:
# 直接指定tsdemux的管道 GST_DEBUG=3 ./gst-launch-1.0 filesrc location=reproducible.ts ! tsdemux ignore-pids=0x28 ! h265parse ! avdec_h265 ! videoconvert ! autovideosink # 使用decodebin的版本(传递参数给内部的tsdemux) GST_DEBUG=3 ./gst-launch-1.0 filesrc location=reproducible.ts ! decodebin tsdemux::ignore-pids=0x28 ! autovideosink
方法2:禁用tsdemux的元数据解析功能
关闭tsdemux的元数据解析开关,彻底绕过这个严格检查:
# 直接指定tsdemux的管道 GST_DEBUG=3 ./gst-launch-1.0 filesrc location=reproducible.ts ! tsdemux parse-metadata=false ! h265parse ! avdec_h265 ! videoconvert ! autovideosink # 使用decodebin的版本 GST_DEBUG=3 ./gst-launch-1.0 filesrc location=reproducible.ts ! decodebin tsdemux::parse-metadata=false ! autovideosink
二、后续获取KLV元数据的方案
在恢复视频播放的基础上,可以单独分流KLV数据到appsink进行处理:
GST_DEBUG=3 ./gst-launch-1.0 filesrc location=reproducible.ts ! tsdemux name=demux parse-metadata=false \ demux. ! queue ! h265parse ! avdec_h265 ! videoconvert ! autovideosink \ demux. ! queue ! appsink name=klv_sink
通过klv_sink的回调函数,即可获取KLV元数据内容。
内容的提问来源于stack exchange,提问作者Ben Butterworth
相关产品推荐
相关产品推荐

