You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 10:27:37