VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 747|回复: 4

如何将SourceReader与“Moonlight-Elecard MPEG2 Demultiplexer”连接起来?

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-25 10:40:01 | 显示全部楼层 |阅读模式
如何将SourceReader与“Moonlight-Elecard MPEG2 Demultiplexer”连接起来?
我连接的时候啥提示都没有,一直不返回。
我要怎么才能连接成功?
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-5-10 10:45:01 | 显示全部楼层
连接是没有问题的,不知道你怎么连的?发代码看看。
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-7-3 23:00:01 | 显示全部楼层
//mpeg2dmx.ax
    WCHAR szMPegTS[]=L"@device:sw:{083863F1-70DE-11D0-BD40-00A0C911CE86}\\{731B8592-4001-46D4-B1A5-33EC792B4501}";   
    // construct source filter
        if (m_bInit)
        {
                CMediaType   mt;      
                mt.majortype = MEDIATYPE_Stream;
                mt.subtype   = MEDIASUBTYPE_MPEG2_TRANSPORT;
                mt.formattype =FORMAT_MPEGStreams;
                m_pSourceStream  = new CMemStream(m_pDataList);
                m_pSourceStream->bStopFlag=0;
                m_pSourceReader  = new CMemReader(m_pSourceStream, &mt, &hr);
                m_pSourceReader->AddRef();
                //  Add our source filter
                hr = m_pGB->AddFilter(m_pSourceReader, NULL);
                // find mpeg2 filter
        hr=GetFilterByMoniker(szMPegTS, (IBaseFilter   **)&m_pMpeg2tsFilter);
                //add mpeg2 filter
                hr=m_pMpeg2tsFilter->AddRef();
                hr = m_pGB->AddFilter(m_pMpeg2tsFilter, NULL);
                hr=m_pMpeg2VideoFilter->AddRef();
                hr = m_pGB->AddFilter(m_pMpeg2VideoFilter, NULL);       
                if (FAILED(hr))
                {
                        m_bInit = false;
                }        
                //就是这里连接失败
                hr=ConnectFilters(m_pGB,m_pSourceReader,m_pMpeg2tsFilter);

ConnectFilters函数是分别在两个filter中查找一个INPIN和一个OUTPIN并调用:hr = pGraph->Connect(pOut, pIn)进行连接,分别查找两个PIN都是成功了的。


HRESULT CFilterGraph::ConnectFilters(
    IGraphBuilder *pGraph,
    IBaseFilter *pSrc,
    IBaseFilter *pDest)
{
    if ((pGraph == NULL) || (pSrc == NULL) || (pDest == NULL))
    {
        return E_POINTER;
    }

    // Find an output pin on the first filter.
    IPin *pOut = 0;
    HRESULT hr = GetUnconnectedPin(pSrc, PINDIR_OUTPUT, &pOut);
    if (FAILED(hr))
    {
        return hr;
    }
    hr = ConnectFilters(pGraph, pOut, pDest);
    pOut->Release();
    return hr;
}

HRESULT CFilterGraph::ConnectFilters(
    IGraphBuilder *pGraph, // Filter Graph Manager.
    IPin *pOut,            // Output pin on the upstream filter.
    IBaseFilter *pDest)    // Downstream filter.
{
    if ((pGraph == NULL) || (pOut == NULL) || (pDest == NULL))
    {
        return E_POINTER;
    }
    // Find an input pin on the downstream filter.
    IPin *pIn = 0;
    HRESULT hr = GetUnconnectedPin(pDest, PINDIR_INPUT, &pIn);
    if (FAILED(hr))
    {
        return hr;
    }
    // Try to connect them.
    hr = pGraph->Connect(pOut, pIn);   //真正连接失败的地方是这里
    pIn->Release();
    return hr;
}
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-7-23 16:30:01 | 显示全部楼层
看你的代码似乎没什么问题,我猜测问题可能出在CMemReader中,因为如果如果是connect的问题,即使不能connect成功,也会返回错误,不会阻塞的。
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-8-20 11:00:01 | 显示全部楼层
还是没搞定,有人知道怎么连接吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表