MediaCapture主要就是进行相关音视频数据采集功能封装,提供音视频操作相关方法,包括对采集数据的分辨率、帧速率、采样率,与采集数据处理相关方法:音视频比特率等。
#include <dshow.h>
#include <string>
#include "..\RTMPLiveStreamFilter\RTMPConstant.h"
//视频捕获
class MediaCapture
{
public:
MediaCapture(void);
~MediaCapture(void);
public:
// 驱动
//设置视频驱动
void setVideoDevice(std::wstring deviceName);
//获取视频驱动程序
std::wstring getVideoDevice();
//设置音频驱动
void setAudioDevice(std::wstring deviceName);
//获取音频驱动
std::wstring getAudioDevice();
// 输出文件
//设置文件名
void setFileName(std::wstring fileName);
//获取文件名
std::wstring getFileName();
// 视频显示
//设置视频显示窗口
void setDisplayWindow(HWND wnd);
//设置画面刷新帧率
void setFPS(int fps);
//不知道啥功能
void setMinGOPlength(int ikeyint_min);
//使用设置显示分辨率
void setUseCustomResolution(bool bValue);
//设置显示分辨路
void setCustomResolution(int iWidth, int iHeight);
// capture parameters
//捕获参数
//设置和获取显示宽度
void setWidth(int width);
int getWidth();
//设置和获取显示高度
void setHeight(int height);
int getHeight();
//设置和获取帧数
void setFramerate(int rate);
int getFramerate();
//设置和获取采样率
void setSamplingFrequency(SamplingFrequency frequency);
SamplingFrequency getSamplingFrequency();
// codec parameters
//编解码器参数
//设置和获取比特率
void setVideoBitrate(int bitrate);
int getVideoBitrate();
//设置和获取比特率模式
void setVideoBitrateMode(VideoBitrateMode mode);
VideoBitrateMode getVideoBitrateMode();
//设置视频处理文件(这里处理为h264文件)
void setVideoProfile(H264Profile profile);
H264Profile getVideoProfile();
//设置和获取视频质量
void setVideoQuality(int q);
int getVideoQuality();
//设置和获取音频比特率
void setAudioBitrate(AudioBitrate bitrate);
AudioBitrate getAudioBitrate();
// operations
//操作
//启动
bool start();
//暂停
void pause();
//复原
void resume();
//停止
void stop();
//获取出错信息
const std::wstring getLastError();
private:
//清理
void cleanup();
//设置裁剪窗口
void setClippingWindow();
//获取视频参数
VideoFormat getVideoFormat(GUID subtype);
private:
std::wstring mVideoDevice; //视频驱动
std::wstring mAudioDevice; //音频驱动
std::wstring mFileName; //文件名
HWND mDisplayWindow; //显示窗口句柄
int mFps; //显示帧数fps
bool mUseCustomResolution; //是否使用自定义分辨率
int mCustomWidth; //自定义分辨率宽度
int mCustomHeight; //自定义分辨率高度
int mkeyint_min; //作用未知,等后面调用
int mWidth; //宽度
int mHeight; //高度
int mFramerate; //帧速率
SamplingFrequency mSamplingFrequency; //采样率
int mVideoBitrate; //视频比特率
VideoBitrateMode mVideoBitrateMode; //视频比特率模式(应该还有别的模式)
AudioBitrate mAudioBitrate; //音频比特率
H264Profile mH264Profile; //h264处理文件
int mVideoQuality; //视频质量
std::wstring mLastError; //错误信息
VideoFormat mSelectedVideoFormat; //选中视频格式
// dshow stuff
//dshow相关东西
DWORD mGraphReg;
CComPtr<IGraphBuilder> mGraphBuilder;
CComPtr<IMediaControl> mMediaCtrl;
CComPtr<IMediaEvent> mMediaEvent;
CComPtr<IBaseFilter> mVideoSource;
CComPtr<IBaseFilter> mAudioSource;
CComPtr<IBaseFilter> mVideoRenderer;
CComPtr<IBaseFilter> mAudioRenderer;
CComPtr<IBaseFilter> mMediaStreamingFilter;
CComPtr<IBaseFilter> mTeeFilter;
private:
void setLastError(WCHAR* text);
};