内容发布更新时间 : 2024/12/27 16:14:22星期一 下面是文章的全部内容请认真阅读。
VLC music player
流媒体客户端软件层次结构流媒体网络协议
流视频协议是为了在客户端机和服务器之间进行通信而设计的标准化协议。根据它们的功能,网络上传输的流视频相关的协议分为三类。
网络层协议:网络层协议提供了基本的网络服务支持。IP就是网络上流音频使用的网络协议。
传输协议:传输协议为流服务提供端对端的网络传输功能。TCP、UDP、RTP和RTCP就是网络上流音频流使用的传输协议。
话路控制协议:话路控制协议定义消息和程序。RTSP就是一种话路控制协议。 客户端与服务器之间的通信主要是由位于在应用层的RTSP协议和位于传输层的RTP协议来实现的,RTSP是一个多媒体流传输控制协议,通过此协议,可以为服务器和客户端建立会话控制连接,为多媒体流提供远程控制功能,比如播放、暂停、跳跃、停止等,具有可扩展性、解析简单、安全、传输独立等特点。由于流媒体数据的实时性要求,应该选择传输效率较高数据可靠性较低的UDP协议。实时传输协议RTP是针对Internet上多媒体数据流的一个传输协议。RTP被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。图1表示了流媒体客户端和服务器之间信息交互和客户端内部的层次结构。
远程控 VLC开源库 流媒体RTSP响应 p/服VLC(VideoLAN Client)是开源项目VideoLAN下的跨平台的媒体播放器和流务 命媒体服务 器RTP数据传输层 令音频数据 器,可运行于Linux、Mac OS X、Windows等多种操作系统平台,支持MPEG-1、
解码后的 解码前的一帧数据 MPEG-2、行MPEG-4、Divx、WMV、mp3、ogg、Vorbis、AC3、AAC等多种音视频格式。一帧数据 VLC不仅可用作媒体播放器播放音视频文件、DVD、视频光碟或网络视频流,而解码层 解码器 制命令 流媒体客户端底层设计与实现 RTSP会话控制层Ap RTSP请求 服务器且可用作流媒体服务器,将视频源数据按照H.26x、MPEG-x等标准进行压缩编码,媒体同步 并可封装为RTP、HTTP等多种协议格式,以单播或组播的方式在基于IPv4或IPv6的网络上进行流式视频传输。VLC作为客户端可以播放本地文件,http://,rtsp://等数据流,可以使用X1l、Xvideo、SDL或者DiractX作为视频输出,使用OSS、ALSA和ESD作为音频输出。VLC扫描步骤:1).探测cpu型号与功能;2).消息接口初始化;3).命令行选项解析组件;4).创建播放列表;5).仓库初始化;6).加载所有内置和动态组件;7).打开接口;8).安装信号处理器:SIGHUP,SIGINT和SIGQUIT(捕获一个,忽略后来的并退出);9).派生音频输出线程;10).派生视频输出线程;11).主循环:事件管理,图2表示了这些步骤的执行过程。
根据需求,应将开源的VLC进行裁减、交叉编译并移植到目标开发板上。VLC功能非常强大,包含了各类模块与插件以支持多种音视频格式,并提供了可直接操作友好的图形化用户界面。对于功能单一的嵌入式音频客户端而言,应在移植VLC时去除冗余代码,并在configure时对功能模块进行裁减,主要配置选项有:用“--host=mips-linux”指定目标平台类型,用“CC=mips-linux-gcc”指定交叉编译工具,用--prefix=/root/mipsbuild指定编译链接后目标文件的存放路径,用“--disable-module”选项忽略gtk、X11、lua、screen、x264、skins2、
taglib、hd1000v、bonjour、twolame、freetype、postpro、mod、upnp、svg、等不需要的功能模块。(VLC的依赖库太多,多的我都不知道哪个有用。)
为使VLC支持对多种音视频编码格式的音视频数据的流化、接收和处理等支持,应指定“--enable-live555 --with-live555-tree=PATH”选项,其中PATH指向已配置编译了LIVE555模块的内核源码树。
利用NFS将PC机VLC安装目录下的lib文件夹中的libvlc.so.5 、libvlccore.so.4以及VLC文件夹复制到开发板的/usr/lib下。LibVLC是VLC的核心部分。它是一个提供接口的库,比如给VLC提供这些功能接口:音频和视频输出,插件管理,线程系统。VLC是一个纯粹围绕着LibVLC写的程序。它是非常小,但是功能很齐全的媒体播放器,归功于LibVLC的动态组件支持。
一般地,可执行程序的运行依赖一些动态库(或共享库)。动态库的特点是运行时加载,如果将宿主机上能正常运行的应用程序移植到目标机上,并不能保证该程序也能正常运行,主要原因就在于新的环境是否能提供相应的动态库。提供的动态库是否在默认路径下。一般的动态库可在/lib和/usr/lib目录下找到。如libc.so(标准C库)、libm.so(数学函数库),而特殊的动态库必须由用户根据应用程序的需要,将其从宿主机中复制到上述目录下。或是建立专门的目录来保存这些库文件,如/usr/myfile/lib。如果采用后一种方法,则必须将库文件所在目录的路径添加到环境变量LD_LIBRARY_PATH中,以确保应用程序能找到它们。否则,程序运行时就会提示找不到库文件,并出错返回。
除了库文件,程序的正常运行可能还需要一些其它条件,如字体定义文件、字库支持文件和图像文件等。缺少字库和图像文件使应用程序界面不能正常显示。这些问题在宿主机上根本不用担心,但是在进行移植的时候却是至关重要的。所以将应用程序移植后,还得将相关的文件也一并移植,并建立相应的环境变量,以确保程序运行时能加载这些文件。
Mplayer 移植 Mplayer是Linux下的一个多媒体网络播放器,它的主要作用是对接收的网 络电台的IP地址进行解析和对接收到的各种形式的流媒体数据进行解码。执行4—10步 VLC_Init 它支 持MP3、ogg和wma等多种格式的播放,是一个功能十分强大的开源应用软件。 其一直步骤如下: 退出main函数返回值小于0 1.编译libmad-0.15.lb库,可使MplayerVLC_IDestroy 支持定点的MP3解码库 Yes 结束VLC程序 #tar -zxvf libmad-0.15. Ib.tar.gz #cd libmad-0.15.1b NO #./configure -enable-fpm=ann —host=arm-linux --disable-shared —
disable-debugging 一 VLC_AddIntf 执行11步 prefix=/opt/mplayer/install/libmad CC=\#make #make install VLC_CleanUp 2.编译live555库,可使Mplayer支持http、rtsp、mms等网络协议)。 #tar -zxvf live555-latest.tar.gz 退出main函数#cd live 结束VLC程序 #cp config.armlinux config.arm 安装信号句柄 VLC_Create 执行1,2#chmod 777 config.arm #vi config,arm
将:CROSS-COMPILE?: arm-elf-
修改为:CROSS_COMPILE?= arm-linux- #./genMakefiles arm #make
#cp -r ??/live /opt/mplayer/install/ 3 ?编译 mplayer
#tar -zxvf MPlayer-1.0rc2.tar.gz #cd MPlayer-L0rc2
#./configure _-host-cc=gcc ~cc=ann-linux-gcc ~taiget=arm-linux —enable-static
—prefix=/opt/install/mplayer -disable-win32waveout -disable-dvdread -enable-fbdev
—disable-mencoder —enable-live --enable-network —disable-inet6 —disable-mp31ib —enable-mad
—enable-faad-fixed —disable-ivtv #vi config.mak 将:
EXTRAINC = -I/home/lB/install/libmad/include 修改为: EXTRA_INC=
-I/opt/mplayer/install/libmad/include -I/opt/mplayer/install /live/liveMedia/include
-I/opt/mplayer/install/live/groupsock/include
-I/opt/mplayer/install/live/UsageEnvironnient/include
-I/opt/mplayer/install/live/BasicUsageEnvironment/include 将:
EXTRAXX_INC = -I/home/1 B/install/libmad/include 修改为: EXTRAXXINC =
-I/opt/mplayer/install/libmad/include -I/opt/mplayer/install/live/liveMedia/include -I/opt/mplayer/install/live/groupsock/include
-I/opt/mplayer/install/live/UsageEnvironment/include -I/opt/mplayer/install
/live/BasicUsageEnvironment/include 将
EXTRA-LIB = -Imad -Idl -Im
EXTRA—LIB = -L/home/1 B/install/libmad/lib -Imad -Idl -Im 修改为: