Chinaunix首页 | 论坛 | 博客
  • 博客访问: 24575
  • 博文数量: 13
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-24 15:55
文章分类
文章存档

2008年(13)

我的朋友
最近访客

分类:

2008-06-14 19:58:41

最近有个项目,大致的需求是能够实现一个简单的音频播放器,能够播放HTTP流媒体。
以前对播放器软件的实现都是理论上的认识,这次能够通过实际需求来真刀真枪的实现一回播放器,心理确实有点兴奋。
由于采用的是Linux系统,所以就从目前最流行的GStreamer多媒体框架入手了。
在看了一大堆复杂的概念后,感觉GStreamer用在一个资源受限的嵌入式设备上使用GStreamer,实现是有点儿大炮打蚊子,况且GStreamer灵活的框架和大量的插件在这里都用不上,而且GStreamer交叉编译后的体积实在太大了。
总之,看了一段时间GStreamer的方案是弃用了。但通过对于GStreamer的研究,使我对实现一个播放软件需要的基本组件有了一定的了解。
大致总结如下:
简单的说,播放软件的流程大致可以分为,读取媒体文件->解码->输出至音频设备。
读取媒体文件是输入模块,由于需要支持流媒体播放,所以实现个简单的http client的是很必要的了,具体的实现可以参考下mpeg321中对于普通http流媒体的支持及StreamRipper中对于IP Radio这种流媒体的支持是如何实现的。在上述两个软件包,这两部分的代码都是很独立的,参考的价值很大。
至于解码,是个很麻烦的部分,由于需要同时mp3与wma两种格式,所以解码部分需要分为两个模块实现。
和以前一样,google了一下,现在使用的比较多的mp3解码库是libmad,使用libmad可以很轻松的将mp3的媒体流转换为wav格式。
如果需要播放wma的话,那么就需要使用ffmpeg了,ffmpeg中已经提供了可以将wma转为wav格式的函数库。
输入和解码部分搞定后,剩下的工作就是如何输出到音频了。
Linux下有个叫libao的库,使用这个库可以直接访问Linux的声卡驱动程序,通过将wav文件输出至声卡,来完成播放媒体文件的最后步骤。
当然在Linux下也可以使用IOCTL来访问声卡驱动,但是似乎有些麻烦。
技术路线基本选定了,基本上可以等着实际需求来了后实践了。
 
阅读(709) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:关于Linux无线网络

给主人留下些什么吧!~~