我在做一个video播放器,发现声音和图像不同步。具体情况:1、创建IGraphBuilder实例m_Gb;
2、Render视频文件。
3、创建IMediaControl实例m_Mc。
4、创建IMediaEventEx实例m_Me。
5、创建IMediaSeeking实例m_Ms。
6、创建IMediaPosition实例m_Mp。
7、创建IVideoWindow实例m_Vw。
8、创建IBasicVideo实例m_Bv.
9、创建IBasicAudio实例m_Ba。
10、链接视频窗口及消息。
m_Vw->put_Owner(OAHWND)hWnd);
m_Vw->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN))) )
m_Vw->put_MessageDrain((OAHWND)hWnd)))
m_Me->SetNotifyWindow((OAHWND)hWnd,WM_GRAPHNOTIFY,0)))
11、设置视频大小。
m_m_Vw->SetWindowPosition(x,y,nWidth,nHeight)
12、开始播放视频
m_Mc->Run();
按照以上的做法,我发现视频先快进一段,没有声音。然后视频卡住,开始播声音,等到了与视频同步的点,视频和声音就能同步上了。
后来我把m_Mc->Run();拿掉,上面的code运行的现象:视频先快进一段,没有声音,然后视频就停住了。 我没有Run,为什么会先播放一段没有声音的一段?那位xdjm对这个问题有解,请赐教,先谢谢~~~~
2、Render视频文件。
3、创建IMediaControl实例m_Mc。
4、创建IMediaEventEx实例m_Me。
5、创建IMediaSeeking实例m_Ms。
6、创建IMediaPosition实例m_Mp。
7、创建IVideoWindow实例m_Vw。
8、创建IBasicVideo实例m_Bv.
9、创建IBasicAudio实例m_Ba。
10、链接视频窗口及消息。
m_Vw->put_Owner(OAHWND)hWnd);
m_Vw->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN))) )
m_Vw->put_MessageDrain((OAHWND)hWnd)))
m_Me->SetNotifyWindow((OAHWND)hWnd,WM_GRAPHNOTIFY,0)))
11、设置视频大小。
m_m_Vw->SetWindowPosition(x,y,nWidth,nHeight)
12、开始播放视频
m_Mc->Run();
按照以上的做法,我发现视频先快进一段,没有声音。然后视频卡住,开始播声音,等到了与视频同步的点,视频和声音就能同步上了。
后来我把m_Mc->Run();拿掉,上面的code运行的现象:视频先快进一段,没有声音,然后视频就停住了。 我没有Run,为什么会先播放一段没有声音的一段?那位xdjm对这个问题有解,请赐教,先谢谢~~~~
如果播放的是文件,可以用GraphEdit播放验证一下,
如果是网络码流,确认时间戳是否正确。
谢谢您的回复。播放的是WMV文件,而且用GraphEdit播放是ok的。
就是自己写的code有问题。
主要是没有run的时候,文件就会被播放。不知道这个是什么原因?
上面写的第二步就是用RenderFile来Render wmv文件的。
呵呵,谢谢你。
是的,RenderFile只是构建filter来分离和解析视频流和音频流。
谢谢回复~
代码比较多,不好上传啊。dshow部分的基本流程在上面。只不过加了些界面和定时器什么的。
不知道有没有什么操作会造成这个现象。
总的感觉是audio部分ok,就是video的部分不正常。