微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用带有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 举报,一经查实,本站将立刻删除。