回复即可得分,分不够,可加分,希望别灌水。DirectShow 如何将捕获的视频网络传输,如何得到每一帧(Sample),如何发送,如何接收

薛123 2015-01-20 04:31:39

现在能够实现Sender Filter,也能连接。
就是不知道怎么获得每一帧(Sample),如何发送?
初学DirectShow,希望得到指点一二。
由于前几个帖子都没人回答,不得不发到灌水乐园了,望勿怪。
...全文
285 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Evankaka 2015-01-21
  • 打赏
  • 举报
回复
BOOL CCaptureClass::MyCapture(CString MyFileName)
{
	HRESULT hr;  
    AM_MEDIA_TYPE mediaType;  
    hr = pGrabber->GetConnectedMediaType(&mediaType);  
    if (FAILED(hr))  return hr;  
    VIDEOINFOHEADER *pVih;  
    if (mediaType.formattype == FORMAT_VideoInfo &&   
        (mediaType.cbFormat >= sizeof(VIDEOINFOHEADER)) &&  
        mediaType.pbFormat != NULL)  
    {  
        pVih = (VIDEOINFOHEADER *)mediaType.pbFormat;  
    }  
    else       
        return VFW_E_INVALIDMEDIATYPE;  
	if (SUCCEEDED(pGrabber->SetBufferSamples(TRUE)) )  // 设置为缓冲形式)   
    {  
        long cbBuffer = 0;  
        hr = pGrabber->GetCurrentBuffer(&cbBuffer, NULL);  
        BYTE *pBuffer = new BYTE[cbBuffer];  
        if (!pBuffer) return -1;  
        // 获取一帧媒体的数据   
        hr = pGrabber->GetCurrentBuffer(&cbBuffer, (long *)pBuffer);  
        if (FAILED(hr))  return hr;  
		
		
		HANDLE hf = CreateFile(MyFileName, GENERIC_WRITE, FILE_SHARE_READ,    
            NULL, CREATE_ALWAYS, NULL, NULL );  
		
        if( hf == INVALID_HANDLE_VALUE ){  
            MessageBox(NULL, _T("Create bmp file failure!"), _T(""), MB_OK|MB_ICONINFORMATION);  
            return 0;  
        }  
		///
		BITMAPFILEHEADER bfh;  
        memset( &bfh, 0, sizeof( bfh ) );  
        bfh.bfType = 'MB';  
        bfh.bfSize = sizeof( bfh ) + cbBuffer + sizeof( BITMAPINFOHEADER );  
        bfh.bfOffBits = sizeof( BITMAPINFOHEADER ) + sizeof( BITMAPFILEHEADER );  
		
        DWORD Written = 0;  
        WriteFile( hf, &bfh, sizeof( bfh ), &Written, NULL );  
		
        // Write the bitmap format   
        //文件头   
        BITMAPINFOHEADER bih;  
        memset( &bih, 0, sizeof( bih ) );  
        bih.biSize = sizeof( bih );  
        bih.biWidth = pVih->bmiHeader.biWidth;  
        bih.biHeight = pVih->bmiHeader.biHeight;  
        bih.biPlanes = 1;  
        bih.biBitCount = 24;  
		
        Written = 0;  
        WriteFile( hf, &bih, sizeof( bih ), &Written, NULL );  
		
        // Write the bitmap bits   
        //   
        Written = 0;  
        WriteFile( hf, pBuffer, cbBuffer, &Written, NULL );       
        CloseHandle( hf );  
        delete pBuffer;  
     //   MessageBox(NULL, _T("保存图像成功!"), _T("保存图像提示"), MB_OK|MB_ICONINFORMATION); 
	}
	pGrabber->SetOneShot(FALSE);  
    pGrabber->SetBufferSamples(FALSE);  
    FreeMediaType(mediaType);  
	return 0;  
}
Evankaka 2015-01-21
  • 打赏
  • 举报
回复
BOOL CCaptureClass::MyCapture(CString MyFileName)
{
	HRESULT hr;  
    AM_MEDIA_TYPE mediaType;  
    hr = pGrabber->GetConnectedMediaType(&mediaType);  
    if (FAILED(hr))  return hr;  
    VIDEOINFOHEADER *pVih;  
    if (mediaType.formattype == FORMAT_VideoInfo &&   
        (mediaType.cbFormat >= sizeof(VIDEOINFOHEADER)) &&  
        mediaType.pbFormat != NULL)  
    {  
        pVih = (VIDEOINFOHEADER *)mediaType.pbFormat;  
    }  
    else       
        return VFW_E_INVALIDMEDIATYPE;  
	if (SUCCEEDED(pGrabber->SetBufferSamples(TRUE)) )  // 设置为缓冲形式)   
    {  
        long cbBuffer = 0;  
        hr = pGrabber->GetCurrentBuffer(&cbBuffer, NULL);  
        BYTE *pBuffer = new BYTE[cbBuffer];  
        if (!pBuffer) return -1;  
        // 获取一帧媒体的数据   
        hr = pGrabber->GetCurrentBuffer(&cbBuffer, (long *)pBuffer);  
        if (FAILED(hr))  return hr;  
		
		
		HANDLE hf = CreateFile(MyFileName, GENERIC_WRITE, FILE_SHARE_READ,    
            NULL, CREATE_ALWAYS, NULL, NULL );  
		
        if( hf == INVALID_HANDLE_VALUE ){  
            MessageBox(NULL, _T("Create bmp file failure!"), _T(""), MB_OK|MB_ICONINFORMATION);  
            return 0;  
        }  
		///
		BITMAPFILEHEADER bfh;  
        memset( &bfh, 0, sizeof( bfh ) );  
        bfh.bfType = 'MB';  
        bfh.bfSize = sizeof( bfh ) + cbBuffer + sizeof( BITMAPINFOHEADER );  
        bfh.bfOffBits = sizeof( BITMAPINFOHEADER ) + sizeof( BITMAPFILEHEADER );  
		
        DWORD Written = 0;  
        WriteFile( hf, &bfh, sizeof( bfh ), &Written, NULL );  
		
        // Write the bitmap format   
        //文件头   
        BITMAPINFOHEADER bih;  
        memset( &bih, 0, sizeof( bih ) );  
        bih.biSize = sizeof( bih );  
        bih.biWidth = pVih->bmiHeader.biWidth;  
        bih.biHeight = pVih->bmiHeader.biHeight;  
        bih.biPlanes = 1;  
        bih.biBitCount = 24;  
		
        Written = 0;  
        WriteFile( hf, &bih, sizeof( bih ), &Written, NULL );  
		
        // Write the bitmap bits   
        //   
        Written = 0;  
        WriteFile( hf, pBuffer, cbBuffer, &Written, NULL );       
        CloseHandle( hf );  
        delete pBuffer;  
     //   MessageBox(NULL, _T("保存图像成功!"), _T("保存图像提示"), MB_OK|MB_ICONINFORMATION); 
	}
	pGrabber->SetOneShot(FALSE);  
    pGrabber->SetBufferSamples(FALSE);  
    FreeMediaType(mediaType);  
	return 0;  
}
这是我用来保存图像数据 的。你可以参考下。上面的pBuffer就是你想要的。可以直接发了。当然,你可以自己想办法压缩下
薛123 2015-01-21
  • 打赏
  • 举报
回复
引用 5 楼 starytx 的回复:
用socket发送接收
我知道用socket UDP协议发送接收,但是不知道怎么得到每一帧Sample
薛123 2015-01-21
  • 打赏
  • 举报
回复
引用 2 楼 lwb314 的回复:
发错区了吧
不发水区没人回啊
starytx 2015-01-20
  • 打赏
  • 举报
回复
用socket发送接收
  • 打赏
  • 举报
回复


你这要求我满足不了啊。
exception92 2015-01-20
  • 打赏
  • 举报
回复
这是水区。。。。。
  • 打赏
  • 举报
回复
发错区了吧
薛123 2015-01-20
  • 打赏
  • 举报
回复
//在对话框初始化时枚举视频捕捉设备,设计过滤图表。 ICaptureGraphBuilder2 * pBuilder = NULL; pGraph = NULL; pCompress = NULL; //第一步:创建 ICaptureGraphBuilder2接口 CoCreateInstance(CLSID_CaptureGraphBuilder2,0,CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2,(void**)&pBuilder); //第二步:创建IGraphBuilder接口 CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph); HRESULT hr = AddToRot(pGraph, &dwRegister); //第三步:调用ICaptureBuilder的SetFilterGraph方法将FilterGraph加入到Builder中 pBuilder->SetFiltergraph(pGraph); //查询各个接口,得到媒体控制接口,该接口控制整个Graph状态的 pGraph->QueryInterface(IID_IMediaControl,(void**)&pMediaControl);

1,451

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计/Flash/Silverlight 开发 图象工具使用
社区管理员
  • 图象工具使用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧