首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux基础>软件应用>正文

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

http://www.oklinux.cn  2007-03-09  oklinux收集整理   会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn
1.介绍

    本文在 Fedora 5 Linux 下实现了一个基于 libmad 的 MP3 流媒体播放器。此流媒体播放器可以播放基于 HTTP 1.1 协议传输的 MP3 流媒体数据。

    基本原理是:从 HTTP 服务器获得 MP3 媒体信息,然后通过网络传输把 MP3 数据以数据流的形式接收到 MP3 流媒体播放器客户端,由客户端通过 libmad 解码 MP3 数据流,得到 PCM 音频数据,写入音频设备,播放音乐。本文的流媒体播放器只是实现了必要的简单功能,没有考虑太多情况。比如,没有考虑实时播放控制,这样的话就不能随意选取播放点进行播放。

    本文的 MP3 流媒体播放器创建两个线程,使用两个缓冲区保存 MP3 数据,可以一边下载数据,一边播放音乐。编译运行此 MP3 流媒体播放器需要安装 libmad (www.underbit.com/products/mad/) 以及 ALSA(Advanced Linux Sound Architecture) (http://www.alsa-project.org)相关的软件。ALSA包括4部分,分别是 sound driver, sound library , sound utilities 以及 tools。至少应该安装 sound driver, sound library 。编译程序时连接库的选项是:-lmad -lasound -lpthread。

    本文的 MP3 流媒体播放器使用双缓冲区,一个是数据接收缓冲区,另一个是数据解码缓冲区。主程序结构如下图所示,图中的蓝色线表示数据流向。


图 1:MP3 流媒体播放器主程序结构图
MP3 流媒体播放器主程序结构图

2.libmad简介

    MAD (libmad)是一个开源的高精度 MPEG 音频解码库,支持 MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3)。LIBMAD 提供 24-bit 的 PCM 输出,完全是定点计算,非常适合没有浮点支持的平台上使用。使用 libmad 提供的一系列 API,就可以非常简单地实现 MP3 数据解码工作。在 libmad 的源代码文件目录下的 mad.h 文件中,可以看到绝大部分该库的数据结构和 API 等。

    本文用到的 libmad 中的主要数据结构有:struct mad_stream, struct mad_synth, struct mad_frame。它们的定义如下:


清单 1:libmad 中的主要数据结构

 
struct mad_stream {
  unsigned char const *buffer;     /* input bitstream buffer */
  unsigned char const *bufend;    /* end of buffer */
  unsigned long skiplen;          /* bytes to skip before next frame */
  int sync;                     /* stream sync found */
  unsigned long freerate;          /* free bitrate (fixed) */
  unsigned char const *this_frame; /* start of current frame */
  unsigned char const *next_frame; /* start of next frame */
  struct mad_bitptr ptr;           /* current processing bit pointer */
  struct mad_bitptr anc_ptr;       /* ancillary bits pointer */
  unsigned int anc_bitlen;         /* number of ancillary bits */
  unsigned char (*main_data)[MAD_BUFFER_MDLEN];
/* Layer III main_data() */
  unsigned int md_len;           /* bytes in main_data */
  int options;                   /* decoding options (see below) */
  enum mad_error error;          /* error code (see above) */
};
      

 

 

共8页: 上一页 1 [2] [3] [4] [5] [6] [7] [8] 下一页

上一篇:制作在软盘上跑的Linux引导器详细过程   下一篇: Linux中文化之 REDHAT 7.0中GNOME的汉化详细过程

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·制作在软盘上跑的Linux引导器详细过程
·关于Linux下的抓图软件和使用方法介绍
·充分利用Linux操作系统安全防护工具
·如何用APT维护红帽企业版Linux
·Linux下用Mtrace来检查程序内存溢出
·介绍linux上两种rootkits检测工具
·pacman终极提速--metalink
·一步一步安装服务器监视软件MRTG
·Debian和Gentoo包管理机制比较及延伸
·集成了大量软件包的DSL Linux
·介绍一个Linux下画电路图的软件
·使用自由软件Rexx 的实现来编写脚本
·对远程数据同步工具Rsync的一些了解
·嵌入式Linux 中的应用中的GTK+
·在FreeBSD4.x中制作启动菜单
·在FREEBSD 5中使用MRTG画图
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Opera 10.10 Beta 1 引入 Opera Unite
·Thumbak: 自动备份优盘
·Ubun-student: 安装/删除学生用的软件
·VirtualBox 更新至 3.0.8
·BKO: 通过 HTTP 启动 Linux
·偷看最终版 GNOME Shell 1
·Plasma video wallpaper: KDE 4 视频壁
·KDocker 4.0 发布
·KOffice 2.1 beta 2 发布
·LXDE 增加新的 LXDM 组件
·Sun VirtualBox 3.0.6 发布
·Fedora 显卡驱动测试周:Intel,AMD/ATi
  阅读排行
· Oracle 10g for ubuntu 安装指南
· linux下查看进程/线程
·Tcpdump:Linux下基于命令行的抓包工具
·Linux系统下大词典Stardict详细介绍
· 下BT聊QQ !PS3安装Linux ubuntu 7.10
·Linux下tar bz gz等压缩包的压缩和解压
·Wine的安装配置
·Linux 下的五笔输入法 Fcitx安装过程
·平铺式窗口管理器——Awesome
·Squid日志分析软件Sarg的安装及使用技
·Linux 上的数据可视化工具
·LyX中文排版软件的安装及使用简介
·嵌入式Linux 中的应用中的GTK+
·让firefox下播放mms,rstp流媒体,打开其
·Linux系统的Rsync安装配置使用教程
网摘收藏: