无法向BIN添加元素,在“pad-added”的回调函数中

问题描述 投票:0回答:1

我想创建一个动态管道,需要根据读取文件“.ts”进行修改。

在阅读中,文件i可能只有一个视频流,或者可能是两个视频,或者它也可能有文本数据。

如果文件有两个视频,那么如果我为文本数据添加两个视频链接和一个应用程序链接,那么我无法播放视频。

然后,我尝试在回调函数中添加该元素,然后每当文本数据到来时,它都不起作用。

在这里我附上了代码。

void uuCMediaPlayer::DemuxLinking(GstElement *Demux, GstPad *DeMuxPad, gpointer data)
{
    uuCMediaPlayer* pObjPlayer = (uuCMediaPlayer *)data;
    int linkFlag = 0;

    char* pad_name = gst_pad_get_name(DeMuxPad);
    UU_PRINT("Player :: In dynamic ADDING PAD %s", pad_name);

    if(g_str_has_prefix(pad_name, "metadata"))
    {
        if(!gst_bin_add(GST_BIN(pObjPlayer->mpPlayerPipe), pObjPlayer->mpMetaSink))
        printf"Failed to Add Meta Sink !!");
        printf(" Player :: In dynamic ADDING Meta PAD %s", pad_name);
        GstPad *metasink = gst_element_get_static_pad(pObjPlayer->mpMetaQueue, "sink");
        if(GST_IS_PAD(DeMuxPad) && GST_IS_PAD(metasink))
        {
            if(gst_pad_link(DeMuxPad, metasink) != GST_PAD_LINK_OK)
            {
                UU_PRINT( "Player ::Failed to Link Demux with Meta Queue !!");
                pObjPlayer->mRunFlag = 0;
            }
            else
            {


                    gst_element_link_many(pObjPlayer->mpMetaQueue, pObjPlayer->mpMetaCapsFilter,
                        pObjPlayer->mpMetaKlvParse, pObjPlayer->mpMetaParseCapsFilter,
                        pObjPlayer->mpMetaSubParse, pObjPlayer->mpMetaSink, NULL);
                    //gst_bin_add_many(GST_BIN(pObjPlayer->mpPlayerPipe), pObjPlayer->mpMetaSink, NULL);
            }
        }
        else
        {
            UU_PRINT( "Player ::Failed to Link Demux with Meta Queue !!");
            pObjPlayer->mRunFlag = 0;
        }
    }
else if(g_str_has_prefix(pad_name, "video"))
{
    UU_PRINT("Player :: In dynamic ADDING VIDEO PAD %s", pad_name);
    if((!pObjPlayer->mDlLinkFlag) && (!linkFlag))
    {
        GstPad *dlsink = gst_element_get_static_pad(pObjPlayer->mpDlQueue, "sink");
        if(GST_IS_PAD(DeMuxPad) && GST_IS_PAD(dlsink))
        {
            if(gst_pad_link(DeMuxPad, dlsink) != GST_PAD_LINK_OK)
            {
                UU_PRINT( "Player :: Failed to Link Demux with DL Video Queue !!");
                pObjPlayer->mRunFlag = 0;
            }
            else
            {
                /** adding elements to bin */
                 gst_bin_add_many(GST_BIN(pObjPlayer->mpPlayerPipe), pObjPlayer->mpDLVideoDecoder,
                    pObjPlayer->mpDLVideoParse, pObjPlayer->mpDLVideoSink,
                    NULL);
                gst_element_link_many(pObjPlayer->mpMetaQueue, pObjPlayer->mpDLVideoDecoder,
                    pObjPlayer->mpDLVideoParse, pObjPlayer->mpDLVideoSink,
                    NULL);
            }
        }
        else
        {
            UU_PRINT( "Player :: Failed to Link Demux with DL Video Queue !!");
            pObjPlayer->mRunFlag = 0;
        }
    }
    else if((!pObjPlayer->mIrLinkFlag) && (!linkFlag))
    {
        GstPad *dlsink = gst_element_get_static_pad(pObjPlayer->mpIrQueue, "sink");
        if(GST_IS_PAD(DeMuxPad) && GST_IS_PAD(dlsink))
        {
            if(gst_pad_link(DeMuxPad, dlsink) != GST_PAD_LINK_OK)
            {
                UU_PRINT( "Player :: Failed to Link Demux with DL Video Queue !!");
                pObjPlayer->mRunFlag = 0;
            }
            else
            {
                pObjPlayer->mIrLinkFlag = 1;
                linkFlag = 1;
            }
        }
        else
        {
            UU_PRINT( "Player :: Failed to Link Demux with DL Video Queue !!");
            pObjPlayer->mRunFlag = 0;
        }
    }
    else
        UU_PRINT("Player :: Ignoring the Video Stream !!");
}

代替

pObjPlayer->mDlLinkFlag = 1;
                linkFlag = 1;

我将videodecoder和xvimagesink元素添加到管道箱。和,

我试图将tsdemux与视频解码器和xvimagesink链接起来。

但视频没有播放。如果我在回调函数之外添加那些,那么它工作正常。

udp gstreamer
1个回答
0
投票

我使用gst1-java-core java绑定时遇到了类似的问题。我不得不在我在pad回调中添加到管道的bin上调用play()。我不确定你的非java代码中的确切方法调用是什么。

也许https://groups.google.com/d/msg/gstreamer-java/Zvf-3ZAhAwg/fekxcsJDCAAJ讨论的其他内容将帮助您取得进展。

© www.soinside.com 2019 - 2024. All rights reserved.