关于陆其明老师《DirectShow开发指南》第十八章如何将其变为网络采集mpeg4文件并且播放?谢谢
我是重庆邮电大学一个学生,最近导师要求做视频处理的东西。陆老师书中18章地方如何将变成mpeg4呢?majortype,subtype改变了只是能够继续接收 我觉得这个和winsockt编程无关,它无非就是建立了一种连接的机制,但是解码和播放是Directshow的问题。我有些同学说这个可能是没有解码器Decoder不过,我找了这样一个例子却可以播放这个文件:CEO.mp4 文件类型:MPEG-4 媒体代码如下:
#include <stdio.h>
#include <streams.h> void main(void)
{
IGraphBuilder *pGraph = NULL;
IMediaControl *pControl = NULL;
IMediaEvent *pEvent = NULL;
// Initialize the COM library.
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
printf("ERROR - Could not initialize COM library");
return;
} // Create the filter graph manager and query for interfaces.
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&pGraph);
if (FAILED(hr))
{
printf("ERROR - Could not create the Filter Graph Manager.");
return;
} hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent); // Build the graph. IMPORTANT: Change this string to a file on your system.
hr = pGraph->RenderFile(L"e:\\CEO.mp4", NULL);
if (SUCCEEDED(hr))
{
// Run the graph.
hr = pControl->Run();
if (SUCCEEDED(hr))
{
// Wait for completion.
long evCode;
pEvent->WaitForCompletion(INFINITE, &evCode); // Note: Do not use INFINITE in a real application, because it
// can block indefinitely.
}
}
pControl->Release();
pEvent->Release();
pGraph->Release();
CoUninitialize();
}
它确实能够播放我自己电脑中的这种格式的文件,filter graph如下:
说明有mpeg4的Decoder 现在我的问题就是怎么样才能变成mpeg4的实时播放的东西,请各位高手帮助下我啊!谢谢大家!
另:我认为我的问题是majortype & Subtype的设置 或者是mpeg4本身不能用来像mpeg1那样的网络实时传输播放!
谢谢 大家帮助我下 感谢大家了!
& [email protected]
再次感谢大家!祝大家愉快!
我是重庆邮电大学一个学生,最近导师要求做视频处理的东西。陆老师书中18章地方如何将变成mpeg4呢?majortype,subtype改变了只是能够继续接收 我觉得这个和winsockt编程无关,它无非就是建立了一种连接的机制,但是解码和播放是Directshow的问题。我有些同学说这个可能是没有解码器Decoder不过,我找了这样一个例子却可以播放这个文件:CEO.mp4 文件类型:MPEG-4 媒体代码如下:
#include <stdio.h>
#include <streams.h> void main(void)
{
IGraphBuilder *pGraph = NULL;
IMediaControl *pControl = NULL;
IMediaEvent *pEvent = NULL;
// Initialize the COM library.
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
printf("ERROR - Could not initialize COM library");
return;
} // Create the filter graph manager and query for interfaces.
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&pGraph);
if (FAILED(hr))
{
printf("ERROR - Could not create the Filter Graph Manager.");
return;
} hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent); // Build the graph. IMPORTANT: Change this string to a file on your system.
hr = pGraph->RenderFile(L"e:\\CEO.mp4", NULL);
if (SUCCEEDED(hr))
{
// Run the graph.
hr = pControl->Run();
if (SUCCEEDED(hr))
{
// Wait for completion.
long evCode;
pEvent->WaitForCompletion(INFINITE, &evCode); // Note: Do not use INFINITE in a real application, because it
// can block indefinitely.
}
}
pControl->Release();
pEvent->Release();
pGraph->Release();
CoUninitialize();
}
它确实能够播放我自己电脑中的这种格式的文件,filter graph如下:
说明有mpeg4的Decoder 现在我的问题就是怎么样才能变成mpeg4的实时播放的东西,请各位高手帮助下我啊!谢谢大家!
另:我认为我的问题是majortype & Subtype的设置 或者是mpeg4本身不能用来像mpeg1那样的网络实时传输播放!
谢谢 大家帮助我下 感谢大家了!
& [email protected]
再次感谢大家!祝大家愉快!
hr = pGraph->RenderFile(L"e:\\CEO.mp4", NULL);
使用里微软的智能连接使GRAPHBUIDER从SOURCEFILTER----到DECODER----到RENDER成功建立了回放链路你用GRAPHEDIT看一下你的回放链路里是不是缺少DECODER导致的无法回放,加进去就好了。自动的renderfile不是百试百灵哦~~因为是智能的所以可能会被优先级高的解码器取代导致程序稳定性差!建议手工建立回放链路。