基于libmad 的简单MP3流媒体播放器的实现

来源: 作者: 2007-10-24 出处:pcdog.com

access  apache  linux  错误代码  数据结构  
上一页 1 2 3 4 5 6 7 

  empty_sem 信号量的计数表示接收缓冲是否为空,其中如果是 1,表示为空;如果为 0 表示不为空。decode_sem 信号量的计数表示音乐播放线程是否正在对数据解码缓冲区的数据进行解码,如果是 1 表示正在进行解码,如果是 0 表示没有解码;copy_sem 信号量的计数表示是否可以从数据接收缓冲区拷贝数据到数据解码缓冲区,如果是 1 表示可以,如果是 0 表示不能。

两个线程的同步操作或者说是 PV 操作流程如下图所示:


图 3:PV 操作流程示意图
基于libmad 的简单MP3流媒体播放器的实现(图三)

7.程序运行实例


图 4:程序运行实例
基于libmad 的简单MP3流媒体播放器的实现(图四)

8.小结

   在实现基于 libmad 的 MP3 流媒体播放器中,我们用到了 libmad 的 API、网络 socket 编程技术、在音频设备上播放 PCM 数据技术、POSIX 信号量以及 POSIX 线程。数据接收线程和音乐播放线程通过信号量和共享数据通信,相比单缓冲操作,通过双缓冲数据操作有效地提高了程序执行效率。同时,通过简单的信号量操作,线程不必使用轮询的方法来处理数据,也进一步减少了对 CPU 资源的浪费。

    本文的意义在于给出了一个简单、明了的 MP3 流媒体播放器的实现。但是不足之处在于没有实现流媒体播放的控制协议,不能动态实现播放拖放操作。

原文链接:http://www.ibm.com/developerworks/cn/linux/l-cn-libmadmp3player/index.html


更多内容请看PCdog.com--流媒体文件格式播放技巧  网吧流媒体服务器专题
上一页 1 2 3 4 5 6 7 
上一篇:离线Flash Adobe发布新媒体播放器
下一篇:Ubuntu Linux下播放Real多媒体的方法