使用带有gstreamer的mpegtsmux将id3标签注入到mpegts中

问题描述

因此,我尝试使用mpegtsdemux对.ts文件进行解复用,使用基本流进行一些计算,然后将所有内容重新复用为使用相同的mpegts容器,这对于视频和音频流非常有效,但是im容纳timed_id3数据包的数据流(#2)遇到一些困难。在这种情况下,我只是想通过它们而不受影响时通过它们,但是,多路分解器和多路复用器都无法识别该流或创建适当的填充,不用说,在管道从暂停到运行后,连接成功。 / p>

这是我的文件的详细信息,该文件是使用ffmpeg提取的:

    Stream #0:0[0x101]: Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F),48000
Hz,stereo,fltp,117 kb/s
    Stream #0:1[0x102]: Video: h264 (High) ([27][0][0][0] / 0x001B),yuv420p(tv,bt709,progressive),1280x720,Closed Captions,59.94 fps,59.94
tbr,90k tbn,96k tbc
    Stream #0:2[0x103]: Data: timed_id3 (ID3  / 0x20334449)

到目前为止,我仅设法生成了meta / x-klv上限,但这并不是我真正需要的。其他尝试均以not-negotiated错误或internal stream error结尾。

我还从多路复用器中得知request-pads,但是也失败了。

        std::stringstream ss;
        ss << "src_" << streamIdx_;
        gstSrc_ = gst_element_factory_make("appsrc",ss.str().c_str());
        gst_bin_add_many(GST_BIN(pipeline),gstSrc_,nullptr);
        GstPadTemplate* mux_src_pad_template = gst_element_class_get_pad_template(GST_ELEMENT_GET_CLASS(mux),"sink_%d");
        GstCaps* caps = gst_caps_new_simple("private/x-timed_id3",NULL);
        GstPad* pad = gst_element_request_pad(mux,mux_src_pad_template,nullptr,caps);
        
       gboolean success = gst_element_link_pads(gstSrc_,"src",mux,gst_pad_get_name(pad));
            g_object_set(gstSrc_,"format",GST_FORMAT_TIME,nullptr);        
       gst_caps_unref(caps);

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...