当前位置:文档之家› C#.NET2005实现一个流媒体播放器

C#.NET2005实现一个流媒体播放器

C#.NET2005实现一个流媒体播放器
C#.NET2005实现一个流媒体播放器

C#.NET2005实现一个流媒体播放器

2007-04-05 16:38

用C#.NET2005实现一个流媒体播放器,感觉还是不错的,就是调用了Windows 中的一个动态连接库——Quarz.dll。我写的是一个DirectShow多媒体播放器。支持目前为止的大部分格式。代码共享一下:

using System;

using System.Collections.Generic;

using https://www.doczj.com/doc/9617693927.html,ponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using QuartzTypeLib;//这个就是Quarz.dll转换后的Dll文件

namespace myMedia

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

// private https://www.doczj.com/doc/9617693927.html,ponentModel.IContainer components;

private const int WM_APP = 0x8000;

private const int WM_GRAPHNOTIEY = WM_APP + 1;

private const int EC_COMPLETE = 0x01;

private const int WS_CHILD = 0x40000000;

private const int WS_CLIPCHILDREN = 0x2000000;

private FilgraphManager m_objFilterGraph = null;

private IBasicAudio m_objBasicAudio = null;

private IVideoWindow m_objVideoWindow = null;

private IMediaEvent m_objMediaEvent = null;

private IMediaEventEx m_objMediaEventEx = null;

private IMediaPosition m_objMediaPosition = null;

private IMediaControl m_objMediaControl = null;

enum MadiaStatus { None, Stopped, Paused, Running };

private MadiaStatus m_CurrentStatus = MadiaStatus.None;

private void CleanUp()

{

if (m_objMediaControl != null)

{

m_objMediaControl.Stop();

}

m_CurrentStatus = MadiaStatus.Stopped;

if (m_objMediaEventEx != null)

m_objMediaEventEx.SetNotifyWindow(0, 0, 0);

if (m_objVideoWindow != null)

{

m_objVideoWindow.Visible = 0;

m_objVideoWindow.Owner = 0;

}

if (m_objMediaControl != null) m_objMediaControl = null; if (m_objMediaPosition != null) m_objMediaPosition = null;

if (m_objMediaEventEx != null) m_objMediaEventEx = null; if (m_objMediaEvent != null) m_objMediaEvent = null; if (m_objBasicAudio != null) m_objBasicAudio = null; if (m_objFilterGraph != null) m_objFilterGraph = null; }

private void Open_Dialog(object sender, System.EventArgs e) {

OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Media

Files|*.mpg;*.avi;*.wma;*.mov;*.mav;*.mp2;*.mp3;*.rm;*.rmvb|All

Files|*.*";

if (DialogResult.OK == openFileDialog.ShowDialog())

{

CleanUp();

m_objFilterGraph = new FilgraphManager();

m_objFilterGraph.RenderFile(openFileDialog.FileNa me);

try

{

m_objBasicAudio = m_objFilterGraph as IBasicAudio;

m_objVideoWindow = m_objFilterGraph as IVideoWindow;

m_objVideoWindow.Owner = (int)panel1.Handle; m_objVideoWindow.WindowStyle = WS_CHILD |

WS_CLIPCHILDREN;

m_objVideoWindow.SetWindowPosition(panel1.Cli entRectangle.Left, panel1.ClientRectangle.Top,

panel1.ClientRectangle.Width, panel1.ClientRectangle.Height);

}

catch (Exception ex)

{

MessageBox.Show("该文件没有图象信息!");

m_objVideoWindow = null;

}

m_objMediaEvent = m_objFilterGraph as IMediaEvent; m_objMediaEventEx = m_objFilterGraph as IMediaEventEx;

m_objMediaPosition = m_objFilterGraph as IMediaPosition;

m_objMediaControl = m_objFilterGraph as IMediaControl;

this.Text = "DirectShow - [" +

openFileDialog.FileName + "]";

m_objMediaControl.Run();

m_CurrentStatus = MadiaStatus.Running;

}

}

private void UpdateToolBar()//用了一个toolStrip

{

switch (m_CurrentStatus)

{

case MadiaStatus.None:

toolStripButton1.Enabled = true;

toolStripButton2.Enabled = false;

toolStripButton3.Enabled = false;

toolStripButton4.Enabled = false;

toolStripButton5.Enabled = true;

break;

case MadiaStatus.Paused:

toolStripButton1.Enabled = false;

toolStripButton2.Enabled = true;

toolStripButton3.Enabled = false;

toolStripButton4.Enabled = true;

toolStripButton5.Enabled = true;

break;

case MadiaStatus.Running:

toolStripButton1.Enabled = false;

toolStripButton2.Enabled = false;

toolStripButton3.Enabled = true;

toolStripButton4.Enabled = true;

toolStripButton5.Enabled = true;

break;

case MadiaStatus.Stopped:

toolStripButton1.Enabled = true;

toolStripButton2.Enabled = false;

toolStripButton3.Enabled = false;

toolStripButton4.Enabled = false;

toolStripButton5.Enabled = true;

break;

}

}

private void ExitWin(object sender, System.EventArgs e) {

this.Close();

}

private void toolStripButton1_Click(object sender, EventArgs e)

{

Open_Dialog(sender, e);

UpdateToolBar();

}

private void toolStripButton2_Click(object sender, EventArgs e)

{

m_objMediaControl.Run();

m_CurrentStatus = MadiaStatus.Running;

UpdateToolBar();

}

private void toolStripButton3_Click(object sender, EventArgs e)

{

m_objMediaControl.Pause();

m_CurrentStatus = MadiaStatus.Paused;

UpdateToolBar();

}

private void toolStripButton4_Click(object sender, EventArgs e)

{

m_objMediaPosition.CurrentPosition = 0;

m_CurrentStatus = MadiaStatus.Stopped;

CleanUp();

UpdateToolBar();

}

private void toolStripButton5_Click(object sender, EventArgs e)

{

ExitWin(sender, e);

}

private void Form1_SizeChanged(object sender, EventArgs e) {

panel1.Size = Form1.ActiveForm.Size;

if (m_objVideoWindow != null)

{

m_objVideoWindow.SetWindowPosition(panel1.ClientR ectangle.Left, panel1.ClientRectangle.Top,

panel1.ClientRectangle.Width, panel1.ClientRectangle.Height);

}

}

private void Form1_Load(object sender, EventArgs e)

{

this.Text = "我的制作——流媒体播放器";

UpdateToolBar();

}

}

蓝牙车载音频流播放器的设计与实现

蓝牙车载音频流播放器的设计与实现 现在的车载信息娱乐系统中标准配置有带CD 播放功能的收音机、液晶屏,其他可选配置有GPS 和蓝牙免提装置等设备。随着蓝牙技术在音视频传输中的应用,一种可以增强用户娱乐体验的蓝牙音频流播放功能正逐步在车载信息娱 乐系统中得到应用。蓝牙音频流播放功能是指将蓝牙MP3 或蓝牙手机上的音 乐通过蓝牙以流媒体的方式传输到远端设备上进行解码后通过远端设备的功放 系统播放,同时远端设备还带有远程控制功能,使得用户可以在远端设备上操 作音乐,使其暂停、播放、快进快退或进行上下首切换。笔者设计实现了一款 蓝牙车载音频流播放器,该播放器和收音机及液晶屏之间通过CAN 总线进行 连接,控制操作在收音机上实现,液晶屏显示音乐的tagID3、播放时间、音轨、总音轨等信息,控制命令和播放信息都是通过CAN 总线进行传输。从用户的 使用角度来说,该蓝牙音频流播放器是和收音机、液晶屏组成一套系统的。1 系统结构系统结构如图1 所示。音频流播放器、液晶屏和收音机组成一个车载娱乐系统的CAN 网络,控制命令及状态信息均通过CAN 总线传输,其中收 音机带有功放,直接驱动汽车喇叭,并统一管理包括FM、CD 和音频流播放器的音频输出在内的音源。音频流播放器和蓝牙手机通过蓝牙进行交互,采用 A2DP(Advanced Audio Distribution Profile)完成音乐音频流数据及相关格式信息的传输,通过AVRCP(Audio/Video Remote Control Profile)完成对音乐的远程播放控制及播放信息及状态的读取。在A2DP 中引入了2 个终端名:SRC(Source) 和SNK(Sink)。在这里,数字音频流的数据发送端蓝牙手机称为SRC,数字音 频流的接收端蓝牙音频流播放器称为SNK。 2 硬件设计蓝牙音频流播放器的硬件设计中,包括CAN 通讯、蓝牙子系统和音频系统 3 个部分,其中蓝牙子系统和音频系统部分采用CSR 的蓝牙单芯片

音乐播放器程序源代码及注释

音乐播放器程序源代码及注释: #include #define uchar unsigned char #define uint unsigned int sbit duan=P2^6; sbit key1=P3^2;//按key1可切换花样 sbit key2=P3^3;//按key2可切换歌曲 sbit fm=P2^4;//蜂鸣器连续的IO口 sbit P30=P3^0;//矩阵键盘的一列 uchar code huayang1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, 0xfd,0xfb,0xf7,0xef,0xdf,0xbf};//花样1 uchar code huayang2[]={0x7f,0xfe,0xbf,0xfd,0xdf,0xfb,0xef,0xf7, 0xef,0xfb,0xdf,0xfd,0xbf,0xfe};//花样2 uchar code huayang3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x0, 0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; char code huayang4[]={ 0x55,0xaa,0xcc,0x33,0x99,0x66,0x0f,0xf0}; uchar count1;//花样标志 uchar count2;//歌曲标志 uchar timeh,timel,i; //编程规则:字节高位是简谱,低位是持续时间, //代表多少个十六分音符 //1-7代表中央C调,8-E代表高八度,0代表停顿

视频播放器通用代码

ASP视频播放器通用代码 1.avi格式 2.mpg格式

公交车辆车载播放器设备安装维护概论修订稿

公交车辆车载播放器设备安装维护概论 集团文件发布号:(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-

公交车辆车载播放器设备安装维护概论 V1.0 文件归属: 文件编号: 文件生效日期: 文件适用范围: 文件解释权: 文件存档: 文件修订: 签发人: 签发日期:

更改说明(版本更改为的说明如下)

公交车辆车载播放器设备安装维护概论 第一章:车载播放器与民用电器产品的区别 1、车载播放器设备为什么比家庭播放器电器产品相比损坏率高? 1)、家庭使用的交直流播放器电器产品故障率相对稳定,原因是除了产品本身质量的好坏之外,其主要原因是闭合回路电流、电压基本相对稳定,是相对静止的物体,使用高电压低电流工作,它的电压变换是:交流220伏-直流-交流-直流(稳定的工作电压)。 2)、车载播放器电器产品故障率相对高的原因是,除了产品本身质量的好坏之外,它是相对静止的运动物体,硬件损坏率偏高引起闭合回路电流、电压、有时不能保证,引发设备无规则的故障,这是由车体车况的特点与工程技术电源安装所决定。 3)、维护与检修设备要从正确的工艺流程上开始,不能只检查设备的好坏,更重要的检查设备与连接车体电源线,地线,插头等固定件闭合电路回路是否畅通。 第二章:柴油发动机公交车辆与汽油发动机公交车辆 2、柴油公交车辆与汽油公交车辆的区别是什么? 1)、柴油发动机相对于汽油发动机它在许多地方与汽油发动机是完全不同的,汽油发动机离开电就无法工作,柴油发动机很多地方是不需要电的,发动机不需要高压点火,而这对于汽油发动机是绝对不可能的;柴油发动机先将柴油泵入主泵,在主泵后端还有一个用来加压的分泵,分泵与发动机的曲轴通过正时系统相连接,并从喷油嘴中喷射到汽

vlc做流媒体播放器(里面有好多知识点哦亲)

vlc的应用之一:在命令行下的使用 2008-11-28 13:45:34 标签:command休闲line职场vlc 原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。https://www.doczj.com/doc/9617693927.html,/539865/115910 如果编译得到没有界面的vlc,双击运行后就没法手动选打文件或网络了。在这介绍几个vlc的命令行命令。 1. vlc帮助 vlc --help or vlc --help --advanced 2. vlc的debug log vlc -vv --extraintf=logger 运行的log将会保存在vlc-log.txt中。 3. vlc打开文件 vlc -vv --extraintf=logger d:/01.avi 4. 作为服务器通过rtp往客户端发送ts流 vlc -vvv --extraintf=logger d:/01.avi :sout=#duplicate{dst=rtp{dst=localhost,m ux=ts,port=1234}} 5. 作为客户端接收rtp流 vlc -vv --extraintf=logger rtp://@:1234

vlc的应用之二:vlc的ActiveX及cab 2008-11-28 15:38:01 标签:vlc休闲cab职场ActiveX 原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。https://www.doczj.com/doc/9617693927.html,/539865/115943 2009-05-14补充:8. Activex的卸载;9. 让vlc自动安装Activex ;10. 关于vlc的Activex的说明。 vlc自带了ActiveX控件--axvlc.dll,在编译完vlc之后的activex文件夹下。ActiveX是个好东西,axvlc.dll可以随意放到任何位置,成功注册之后可以方便的应用在程序和网页之中。可以参考activex文件夹下的test.html和README.TXT。ActiveX控件的接口有第一版和第二版,第一版简单,功能少,已经不再维护建议用第二版本,功能多一点。(参考的[1]) vlc-0.8.6i和vlc-0.9.4的ActiveX注册方法略有不同。 做ActiveX的网页测试之前需要把Internet选项-->安全-->本地Intranet 的安全级别调到最低。Jeremiah的网页测试环境是IE7,其他浏览器未进行测试。 1. vlc-0.8.6i的ActiveX注册 在E:下新建文件夹vlc-0.8.6iActiveX,拷贝vlc-0.8.6i目录下的plugins,libvlc.dll,activex/axvlc.dll到vlc-0.8.6iActiveX/dlls目录下,拷贝activex/test.html到vlc-0.8.6iActiveX下。新建文本文件install.bat 内容如下: regsvr32 dlls\axvlc.dll 双击install.bat后会提示“dlls\axvlc.dll中的DllRegisterServer成功”。然后用打开test.html,文本框输入MRL就可以播放了。

音乐播放器代码大全

音乐播放器代码大全 autostart="true"中true或1表示自动播放,false或0表示手动播放 loop="true" 中的true或1表示重复播放,false或0表示只播放一次width= height= 中的数字分别表示播放器的宽度和高度=0表示隐藏播放器 EnableContextMenu="0" 禁右键 ShowStatusBar="1" (带显示文件播放信息) 1隐藏播放器(不循环) 代码: 2.隐藏播放器(循环播放) 代码: 3.黑色皮肤播放器 代码: 4.淡蓝色播放器 代码:

5.迷幻播放器 代码:

6.带菜单的播放器 代码: 7.深黄色带菜单播放器 代码: 8.灰色播放器 代码:

java视频播放器几种

package com.bird.jmf; import java.awt.*; import java.awt.event.*; import java.io.*; import https://www.doczj.com/doc/9617693927.html,.*; import javax.swing.*; import javax.media.*; // 视频播放程序 public class VideoPlayDemo extends JFrame { private Player player; // 播放器对象 private Component visualMedia; // 视频显示组件 private Component mediaControl; // 视频播放控制组件 private Container container; // 主容器 private File mediaFile; //媒体文件 private URL fileURL; //媒体文件URL地址 public VideoPlayDemo() { // 构造函数 super("视频播放程序"); //调用父类构造函数 container = getContentPane(); //得到窗口容器 JToolBar toobar = new JToolBar(); //实例化工具栏 JButton openFile = new JButton("打开媒体文件"); //实例化按钮 toobar.add(openFile); //增加按钮到工具栏 JButton openURL = new JButton("打开网络地址"); toobar.add(openURL); container.add(toobar, BorderLayout.NORTH); //设置工具栏 openFile.addActionListener(new ActionListener() { //打开文件按钮事件处理 public void actionPerformed(ActionEvent event) { JFileChooser fileChooser = new JFileChooser(); //实例化文件选择器 fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);//设置文件打开模式为仅打开文件 int result = fileChooser.showOpenDialog(VideoPlayDemo.this);//显示对话框 if (result == JFileChooser.APPROVE_OPTION) { //得到用户行为 mediaFile = fileChooser.getSelectedFile(); //得到选择的文件 }

HTML网页编辑代码大全详细使用方法

html网页编辑代码大全详细使用方法 添加音乐 注册会员登录首页开通窝窝QQ-交流群站内娱乐颜色代码搜索帖子《声色具全》Summer°啦啦之乖乖宝贝啦啦&毛毛《简粉粉色》莫晓晓《简约蓝色》莫晓晓rose.《简约灰色》莫晓晓圣诞女孩【星期⒏音乐论坛】用心聆听,这里有你想要的声音。?【资源共享】?【论坛HTML帖子常用代码】-发现代码贴好看,不懂的,有兴趣的可以研究下。 网页搜索站内搜索搜索 返回列表回复发帖 发新话题发布投票发布悬赏发布辩论发布活动发布视频发布商品沵旳"唯1。发短消息 加为好友 沵旳"唯1。(只能a1自己。)当前离线 那些所谓d2情〃 UID21618帖子866精华42积分9318威望976金钱3587贡献1450阅读权限150性别女来自寂’在线时间248小时注册时间2009-11-29最后登录2010-3-1 ?星期⒏管理版主? UID21618帖子866精华42积分9318威望976金钱3587贡献1450阅读权限150性别女来自寂’在线时间248小时注册时间2009-11-29最后登录2010-3-1 【楼主】 打印字体大小:tT发表于2010-1-2114:53|只看该作者踩窝 窝送礼物问候Ta【论坛HTML帖子常用代码】-发现代码贴好看,不懂的,有兴趣的可以研究下。 关于“html图片移动...”的内容 本站搜索更多关于“html图片移动代码”的内容 本帖最后由沵旳"唯1。于2010-1-2114:54编辑 一、文字标记 基本代码如下:

安卓音乐播放器开发,含源代码

基于an droid平台的音乐播放器开发 实验报告 学生姓名:_______ 温从林 _________________ 学号: ___________________________________ 班级:计自1201 _____________ 第一章引言 1.1项目背景 当今社会的生活节奏越来越快,人们对手机的要求也越来越高,由于手机市场发展迅速,使得手机操作系统也出现了不同各类,现在的市场上主要有三个手机操作系统,Win dowsmobile,symbia n,以及谷歌的An droid操作系统,其中占有开放源代码优势的An droid系统有最大的发展前景。那么能否在手机上拥有自己编写的个性音乐播放器呢?能的,谷歌An droid系统就能做到。本文的音乐播放器就是基于谷歌An droid手机平台的播放器。 An droid :是谷歌于2007年公布的开放式源代码手机系统,它的开放性就优于其它封闭式的手机系统,因此,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写。这使得越来越多的人关注这个操作系统。本次作品音乐播放器就是基于An droid平台的。 1.2编写目的 现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,本设计实现的主要功能是播放Mp3 Wav多种格式的音乐文件,并且能够控制播放,暂停,停止,播放列等基本播放控制功能,界面简明,操作简单。

本项目是一款基于An droid手机平台的音乐播放器,使An droid手机拥有个性的 多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。使人们的生活更加多样化。也使设计者更加熟练An droid的技术和其它在市场上的特点。 1.3开发环境 Eclipse、An droid SDK 320 第二章系统需求分析 2.1功能需求(用例图分析) 根据项目的目标,我们可获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们分成四部分来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求。以下分别描述: 2.1.1播放器的用例图 假设安装了音乐播放器的用户是系统的主要设计对象,其拥有以下操作, 启动软件、播放音乐、暂停播放、停止播放、退出软件,其用例图如下 图2.1 播放器基本用例图 2.1.2用例分析

流媒体常识工具格式转换播放软件使用介绍

流媒体常识工具格式转换播放软件使用介绍流媒体常识工具格式转换播放软件使用介绍目录: 1. 流媒体常识工具格式转换播放软件使用介绍 2.常见视频格式之间如何转换 3.将MTV转成mp3 4. 将MP3转刻成CDA光盘 5.将MIDI转为WAVE 6.制作RM音乐 7.如何分割asf文件 8.视频编码/解码器问答 9.修复下载后的电影 10.分割合并MP3歌曲 11.从视频文件中提取声音 12.光盘刻录 13.巧用摄像头制作VCD 14.视频同步字幕制作 15.视频编辑常见问题 16.流媒体编辑魔术师AsF Tools 17.最简单的VCD制作 流媒体常识工具格式转换播放软件使用介绍 Q.为什么有的电影没有图像,只有声音?

在观看电影的时候,可能会遇到只有声音,没有图像的现象,这时你需要看看自己是否安装了DIVX插件(看 MPEG4的工具),没有安装一定会出现上述现象,而如果你安装了或者观看的不是MPEG4的电影,那从锌赡?是网速的问题,可能是你的网速慢或者是在线观看的人太多了,服务器过载的缘故,都会引起上述现象本站上网工具包提供DIVX插件的下载 Q.rm文件如何解决国语和粤语的双声道问题? 一些文件如rm asf有的时候国语和奥语是混合在一些的,而realplaywindows mediaplay一般都是不能分开声道的其实你可以采用如下简单的方法解决:双击任务栏上的喇叭图标,然后将Wave Output向右播到头即可解决但这并不是100%全能解决的,一些电影文件是无法解决这个问题的,只能认命了目前realfox软件也可以解决双声道问题,但它采用的方法也是和前面所说的一样,因此也不是100%能解决问题了 Q.ram文件是什么,如果才能找到真实的下载地址? ram一般都很小(几十个字节),它是一个导航文件下载后用记事本打开,然后你就会看到真实的下载地址了 Q:encoder不能设置用户权限访问 A:因为real没有在encoder设置用户访问权限!! Q:跑RealServer的服务器组播时的CPU,内存需求情况? A:RealServer中的组播是将一个现场直播流同时传递给多个客户端,而 无需为每一客户的连结发送一个单独的数据流,客户端只需连结到这个 数据流,而不是连结到RealServer服务器,从而降低带宽的使用为了 利用组播技术所带来的优越,在RealServer与Realplayer客户端之间的 所有设备必须是支持组播技术的,包括之间的路由器交换机和其他 的网络设备! 使用组播能够减少带宽的使用,用一般满足100个600k 连接的机器配置就行了! A:音轨的问题可以这样解决,下载smart ripper ,这个工具可以把DVD的光盘的vob文件和它的音轨合成一个新的 VOB文件,这样子视频和音轨就能在同一个文件里,随便你用FlaskMPEG 或者其他工具转化了 A:flash在smil语言中插入的时候用realplay播放是没有声音用realplay plus播放没有问题为什么?给real公司发过信也没有明确的回答!!! Q:*.dat转化为*.rm格式的软件?

空间播放器代码大全:网页中插入各种格式视频播放代码大全

空间播放器代码大全:网页中插入各种格式视频播放代码大全 疯狂代码 https://www.doczj.com/doc/9617693927.html,/ ?:http:/https://www.doczj.com/doc/9617693927.html,/HtmlJiaoCheng/Article19101.html 1.avi格式 代码片断如下: 2.mpg格式 代码片断如下:

流媒体MP3播放器教程

基于libmad 的简单MP3流媒体播放器的实现.介绍 本文在Fedora 5 Linux 下实现了一个基于libmad 的mp3 流媒体播放器。此流媒体播放器可以播放基于HTTP 1.1 协议传输的MP3 流媒体数据。 基本原理是:从HTTP 服务器获得MP3 媒体信息,然后通过网络传输把MP3 数据以数据流的形式接收到MP3 流媒体播放器客户端,由客户端通过libmad 解码MP3 数据流,得到PCM 音频数据,写入音频设备,播放音乐。本文的流媒体播放器只是实现了必要的简单功能,没有考虑太多情况。比如,没有考虑实时播放控制,这样的话就不能随意选取播放点进行播放。 本文的MP3 流媒体播放器创建两个线程,使用两个缓冲区保存MP3 数据,可以一边下载数据,一边播放音乐。编译运行此MP3 流媒体播放器需要安装libmad (https://www.doczj.com/doc/9617693927.html,/prodUCts/mad/) 以及ALSA(Advanced Linux Sound Architecture) (https://www.doczj.com/doc/9617693927.html,)相关的软件。ALSA包括4部分,分别是sound driver, sound library , sound utilities 以及tools。至少应该安装sound driver, sound library 。编译程序时连接库的选项是:-lmad -lasound -lpthread。 本文的MP3 流媒体播放器使用双缓冲区,一个是数据接收缓冲区,另一个是数据解码缓冲区。主程序结构如下图所示,图中的蓝色线表示数据流向。

图1: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 */

音乐播放器代码

以下为一款音乐播放器代码,长度(width="960")及高度(height="620")可调,自由切换百度随心听,贝瓦电台,豆瓣电台,音悦TV等多款音乐台。 代码一: 代码二:


以下为已嵌入音乐播放器代码的网页代码,复制以下代码创建index.html文件上传空间即可播放音乐,友情链接可自己修改。 音乐网_电视直播网