首页 > 代码库 > pymedia初步体验

pymedia初步体验

学习python的时候突然想看看多媒体方面的开源库。

找到了pymedia。


下载后,编译:

python setup.py install <<< y


初步尝试了播放一个wav文件。

python aplayer.py /projects/media/test-org.wav 

很遗憾,播放失败,提示

  File "aplayer.py", line 72, in <module>
    aplayer( sys.argv[ 1 ], i, r, t )
  File "aplayer.py", line 47, in aplayer
    snd.play( data )

 Cannot play sound because of 0:


没办法,只好用SouceInsight建个工程,看看代码到底是怎么一回事。

与Play关联的有3个派生类,linux一般用alsa,估计是audio_alsa.h下的OSoundStream::Play

一看代码,感觉就有点不地道的感觉。

while(frames>0)
{
res = snd_pcm_writei(this->handle, buf, frames);

        ...

       frames -= res;

   }

危险点: res有可能比res大,buf位置没变化。

用printf确认,果然是这个原因。(到底是不是snd_pcm_writei问题还不是很清楚?这个设计的确很坑人)

简单修改如下:

if (res > 0) {
frames -= res;
if (frames < 0) frames = 0;
buf += res*this->framesize;
}


再编译,发现居然没clean功能,倒,搜寻了so位置,用如下方法再编译就能正常了。

rm -r -f build/*;python setup.py install <<< y


总体来说,这次体验让我对这个库的品质很是担心, 只能随便看看就删除了.