之前在一家公司做过一个采集卡的SDK,要求支持基于Directshow架构的视频采集设备(采集卡、USB摄像头)和音频采集设备(麦克风或AV音频输入),能同时采集图像和声音,并把视频和音频编码之后录制成AVI或MP4文件;采集过程中可以预览图像,并且支持在任意时间段录制(即可以在不同的时间点开始录,但需要录完一个才能录下一个);录制的视音频必须同步。
我再补充一些条件,从视频要求编码成H264;音频编码成MP3或AAC。当录制成AVI时,音频用MP3编码;当录制成MP4时,音频用AAC编码。录制成什么格式由用户指定。
需求看上去很简单,但是怎么实现呢?我比较熟悉Directshow技术,所以开始就想到用Filter来实现各种子功能,比如视频编码器可以用FFDShow Video Encoder Filter、音频编码用AAC Encode和MP3 Encode Filter(这两个Filter有现成的),而录制AVI,MP4也有相应的Muxer。所以,初步构想的实现流程可以用下面的Directshow链路图表示:
图1:采集音视频,编码,然后封装成指定容器格式
注意:上面的链路图应该分两种情况,两种情况下的音频编码和录制封装格式是不同的,所以Audio Encoder和Muxer在不同情况下用不同的Filter。<