更改文件名时,录制开始会过期3秒钟。 [英] When changing a file name, Recording Start is overdue for 3 seconds.

查看:53
本文介绍了更改文件名时,录制开始会过期3秒钟。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在图形中使用两个ASFWriter过滤器。一个正在制作wmv文件,
Anather用于实时流式传输。

Using Two ASFWriter Filters in a graph.One is making wmv file, Anather is for live streaming.

进行流式传输,
更改文件名时,录制开始会过期3秒钟。
这样,新WMV的标题丢失了。
很麻烦。

Carrying out streaming, When changing a file name, Recording Start is overdue for 3 seconds. so,The head of a New WMV is missing. It's troubled.

相机------ InfTee过滤器--- --- AsfWriter过滤器→WMV文件

CAMERA ------ InfTee Filter --- --- AsfWriter Filter → WMV FIle

                        X

麦克风--- InfTee过滤器2 ---- -AsfWriter Filter2→直播

Microphone --- InfTee Filter2 --- --- AsfWriter Filter2 → Live Streaming

void RecStart()
{
        ...

    ConnectFilters(pInfTee,"Infinite Pin Tee Filter(1)",L"Output1",pASFWriter,"ASFWriter",L"Video Input 01"));
    ConnectFilters(pInfTee,"Infinite Pin Tee Filter(2)",L"Output2",pASFWriter2,"ASFWriter",L"Video Input 01"));
    ConnectFilters(pSrcAudio,"Audio Source",L"Capture",pInfTee2,"Infinite Pin Tee Filter",L"Input"));
    ConnectFilters(pInfTee2,"Infinite Pin Tee Filter(1)A",L"Output1",pASFWriter,"ASFWriter",L"Audio Input 01"));
    ConnectFilters(pInfTee2,"Infinite Pin Tee Filter(2)A",L"Output2",pASFWriter2,"ASFWriter",L"Audio Input 01"));


    pASFWriter2->QueryInterface(IID_IConfigAsfWriter,(void**)&pConfig);

    pConfig->QueryInterface(IID_IServiceProvider,(void**)&pProvider);

    pProvider->QueryService(IID_IWMWriterAdvanced2, IID_IWMWriterAdvanced2, (void**)&mpWriter2);

    mpWriter2->SetLiveSource(TRUE);

    mpWriter2->RemoveSink(0);

    WMCreateWriterNetworkSink(&mpNetSink);

    DWORD dwPort = (DWORD)streamingPortNo;
    mpNetSink->Open(&dwPort);

    mpNetSink->GetHostURL(url, &url_len);

    hr =mpWriter2->AddSink(mpNetSink);


    pGraph->QueryInterface(IID_IMediaEventEx,(void **)&pMediaIvent);

    pMediaIvent->SetNotifyWindow((OAHWND)this->m_hWnd,WM_GRAPHNOTIFY,0);

    pGraph->QueryInterface(IID_IMediaControl,(void **)&pMediaControl);

    pMediaControl->Run();
}


void OnTimer()
{

    pMediaControl->Stop();

    CComQIPtr<IFileSinkFilter,&IID_IFileSinkFilter> pIFS = pASFWriter;
    pIFS->SetFileName(NewFilename,NULL);

    pMediaControl->Run();
}

---------------------------------------------------------------------------
→ I think ... In order to wait for starting of streaming, 
it is missing for 3 seconds in head of New WMV File.
Are there any measures? 
---------------------------------------------------------------------------


推荐答案

重新启动图形时,由于初始化开销,您不可避免地会丢失一部分数据。而且,不停止图形就无法切换文件。解决方案是使用多个图形并在重新初始化写入文件的部分时保持捕获。

When you restart the graph, you inevitably miss a fragment of data due to initialization overhead. And, it is impossible to switch files without stopping the graph. The solution is to use multiple graphs and keep capturing while the part with file writing is being reinitialized.

请参见 DirectShow桥解决此问题的典型解决方案。

See DirectShow Bridges for a typical solution addressing this problem.

这篇关于更改文件名时,录制开始会过期3秒钟。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆