最近想弄一个简单的播放器,所以下载了ffmpeg2.0.1的代码和库,下载SDL 1.3.0, 开发环境是VS2010。
编译ffplay的过程挺烦的,改了不少配置和代码,网上很多说明,搜一下就知道,这里就不赘述。
好不容易编译通过,试运行ffplay,呵呵,图像出来了,心里暗喜,但是过了一会儿,发现没有声音。
看输出信息,发现有以下错误:
SDL_OpenAudio (2 channels): XAudio2: XAudio2Create() failed .
SDL_OpenAudio (1 channels): XAudio2: XAudio2Create() failed .
No more channel combinations to try, audio open failed
跟踪SDL代码,发现XAudio2Create()返回的HRESULT是1,这个错误是什么意思?没查到。
后来根据以前COM开发的经验,依稀记得应该是初始化有问题。
查ffplay.c的代码,发现SDL_Init()是在主线程中执行的,而SDL_OpenAudio ()是在read_thread中执行的。
于是就试着在read_thread进入的地方加上CoInitialize(NULL)。
编译,运行,成功了。