DirectShow使用点滴
来源:互联网 发布:知乎阿波罗登月骗局 编辑:程序博客网 时间:2024/05/16 08:33
1,时间戳
// Set the graph clock.
IMediaFilter *pMediaFilter = 0;
hr=m_pBuilder->QueryInterface(IID_IMediaFilter, (void**)&pMediaFilter);
pMediaFilter->SetSyncSource(NULL);
通过如上设置,可以使文件尽快解码完成。
IMediaSample * pSample;
REFERENCE_TIME startTime,stopTime;
hr=pSample->GetTime(&startTime,&stopTime);
获取该帧数据的相对时间戳,以100ns为单位。即使文件不以实际速度播放,获取的时间戳也是按实际帧率递增的。
2,在dshowutil.cpp中提供了一些常用的函数,如GetOutPin,GetInPin,FindAudioRenderer,FindVideoRenderer等。
在dshow中可调用pBuilder->connect(pout,pin),连接两个filter,如果这两个pin之间不能直接连接,dshow会自动插入必要的filter。但是智能连接不能在同一个输出pin上连接两次,如一个文件同时含有音视频,此时通过splitter filter需要连接两个filter分别处理音视频,智能连接不能对source filter的同一个输出pin调用两次connect。
在dshow中通过pBuilder->AddFilter(…),加入filter。在调用renderfile智能连接时,会对加入的filter优先连接。另外在enumfilter进行枚举时,只要加入进来的filter都能找到,不必一定要进行connect。
3,获取音视频的基本信息,如宽度、高度,音频采样率、通道等信息。
通过IMediaSample.GetMediaType或者IPin. ConnectionMediaType得到一个AM_MEDIA_TYPE结构体。从该结构体中元素pbFormat可以得到VIDEOINFOHEADER或者WAVEFORMATEX信息。从中可以访问音视频的一些基本信息。
4,可以通过m_pSeeking->SetPositions设置文件播放的开始时间和结束时间,如果结束时间大于文件长度,播放到文件尾结束。如果开始时间大于文件长度,播放不会进行。调用上述函数后,从media sample中获取到的时间(hr=pSample->GetTime(&startTime,&stopTime);) 是相对于文件开始播放位置的,而不是文件头。
5,自定义guid用下面的方式
DEFINE_GUID(MEDIATYPE_HikVideo,
0x0d117d31, 0xef56, 0x4fbe, 0x89, 0x10, 0x28, 0x53, 0x81, 0x60, 0xe0, 0x4e);
另外需要在之前包含#include "initguid.h"。该头文件不能在多个文件中包含。
6,尽量用CComPtr<IPin> 这种方式代替IPin* ,可以减少内存泄露,不需要应用程序调用release释放内存。
- DirectShow使用点滴
- DirectShow开发点滴
- 使用DirectShow驱动摄像头
- 使用DirectShow驱动摄像头
- DirectShow使用大全
- 使用DirectShow驱动摄像头
- 使用DirectShow驱动摄像头
- DirectShow使用大全(zz)
- 使用DirectShow驱动摄像头
- Directshow 中使用 IGraphBuilder
- 使用DirectShow驱动摄像头
- 使用DirectShow驱动摄像头
- directshow使用strbase出错
- 使用DirectShow驱动摄像头
- 使用DirectShow驱动摄像头
- 使用DirectShow采集图像
- DirectShow配置使用
- 使用DirectShow驱动摄像头
- Web界面设计学习笔记(1):虚线框的使用
- (摘录)英语学习方法
- Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
- 论数据的无限压缩的可能性!
- 【下载】关于Samsung2440原厂WINCE500/600 BSP下载
- DirectShow使用点滴
- WinCE应用程序自动加载
- 数值常量标识符
- POJ 1932 XYZZY
- 著名团队建设专家吕志超《铁军无敌——阳光心态与巅峰团队建设特训》课程火热报名中
- SQL语句进行left join的时候发生Cannot resolve collation conflict for equal to operation.错误 SQL语句进行left join的时候发生Cannot resolve collation
- 常用宏定义
- Java连接Access数据库_网络安全.doc
- sql优化