GStreamer升级至1.22后缺失meta/x-gst-fourcc-mebx解码器求助
GStreamer 1.22升级后处理iPhone MOV视频的meta/x-gst-fourcc-mebx插件缺失问题
问题背景
Linux环境下将GStreamer从1.18版本升级至1.22后,处理iPhone拍摄的YUV420p10LE格式MOV视频(确认未损坏)时,出现插件缺失错误,1.18版本无此问题。
错误信息
运行时错误输出:
[hevc @ 0x7f26101eba00] Skipping NAL unit 62 [hevc @ 0x7f26100fcd40] Skipping NAL unit 62 [hevc @ 0x7f2610113e00] Skipping NAL unit 62 missing-plugin, type=(string)decoder, detail=(GstCaps)meta/x-gst-fourcc-mebx, name=(string)"meta/x-gst-fourcc-mebx\ decoder";
GStreamer Discoverer提示:
Missing plugins (gstreamer|1.0|gst-discoverer-1.0|meta/x-gst-fourcc-mebx decoder|decoder-meta/x-gst-fourcc-mebx)
视频流信息
Stream #0:0(und): Video: hevc (Main 10) (hvc1 / 0x31637668), yuv420p10le(tv, bt2020nc/bt2020/arib-std-b67), 1920x1080, 8455 kb/s, 29.97 fps, 29.97 tbr, 600 tbn, 600 tbc (default) Metadata: rotate : 90 creation_time : 2022-02-12T07:53:40.000000Z handler_name : Core Media Video vendor_id : [0][0][0][0] encoder : HEVC Side data: DOVI configuration record: version: 1.0, profile: 8, level: 4, rpu flag: 1, el flag: 0, bl flag: 1, compatibility id: 4 displaymatrix: rotation of -90.00 degrees Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 181 kb/s (default) Metadata: creation_time : 2022-02-12T07:53:40.000000Z handler_name : Core Media Audio vendor_id : [0][0][0][0] Stream #0:2(und): Data: none (mebx / 0x7862656D), 0 kb/s (default) Metadata: creation_time : 2022-02-12T07:53:40.000000Z handler_name : Core Media Metadata Stream #0:3(und): Data: none (mebx / 0x7862656D), 0 kb/s (default) Metadata: creation_time : 2022-02-12T07:53:40.000000Z handler_name : Core Media Metadata Stream #0:4(und): Data: none (mebx / 0x7862656D), 34 kb/s (default) Metadata: creation_time : 2022-02-12T07:53:40.000000Z
处理方案
1. 忽略mebx元数据流(推荐)
视频中的mebx流是iPhone生成的Core Media元数据,不属于媒体播放必需的视频/音频流,GStreamer 1.22开始默认尝试解析所有流,而1.18版本会自动忽略这类非媒体流。可以通过手动构建管道跳过这些元数据流:
使用qtdemux手动分流管道示例:
gst-launch-1.0 filesrc location=your_video.mov ! qtdemux name=d \ d.video_0 ! h265parse ! avdec_h265 ! videoconvert ! autovideosink \ d.audio_0 ! aacparse ! avdec_aac ! audioconvert ! autoaudiosink
此管道仅连接视频和音频pad,完全跳过mebx元数据流。
使用uridecodebin时过滤pad:
如果使用uridecodebin,可以通过监听pad-added信号,只接受视频和音频类型的pad,忽略meta/x-gst-fourcc-mebx类型的pad。示例伪代码(C语言):
static void pad_added_handler(GstElement *src, GstPad *pad, gpointer data) { GstCaps *caps = gst_pad_get_current_caps(pad); const gchar *caps_str = gst_caps_to_string(caps); // 只处理视频和音频流 if (g_strrstr(caps_str, "video/") || g_strrstr(caps_str, "audio/")) { GstPad *sink_pad = gst_element_get_static_pad(data, "sink"); gst_pad_link(pad, sink_pad); gst_object_unref(sink_pad); } gst_caps_unref(caps); } // 在初始化时连接信号 g_signal_connect(uridecodebin, "pad-added", G_CALLBACK(pad_added_handler), pipeline_element);
2. 关于NAL unit 62警告的说明
Skipping NAL unit 62是HEVC的SEI(补充增强信息)单元,属于非必需的附加数据,跳过不影响视频正常播放,无需额外处理。
3. 无需寻找meta/x-gst-fourcc-mebx解码器
目前GStreamer官方社区没有针对meta/x-gst-fourcc-mebx的专用解码器插件,因为这类元数据不影响媒体播放,直接跳过即可。
内容的提问来源于stack exchange,提问作者ZZak
相关产品推荐
相关产品推荐

