您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 基于Qt4的网络视频播放器简介
基于Qt4的网络视频播放器简介一、l软件功能简介及用法该播放器可以在Windows、Linux和s3c2440开发板上播放各种格式的多媒体文件,以及流媒体网络视频文件。不管在哪个平台下运行,源代码均不需要修改,只需在相应系统环境下重新编译即可。如果要在x86(Windows和Linux)上运行,需要把工程目录下的widget_x86.ui复制一份,名为widget.ui,如果要在开发板上运行,则应把工程目录下的widget_s3c2440.ui同样复制一份,名字也为widget.ui,因为该工程默认是使用widget.ui文件进行编译的。如果拷贝到其它机器上编译,可能会出现编译出错的情况,此时需要修改Qt工程Projects的“Builddirectory”的路径,再Rebuild即可。播放器在Windows下运行画面如下图:该播放器的用法与大多数视频播放器一样。具备播放,暂停,停止,上一首,下一首,播放进度显示和调节,音量调节,播放速度设置等基本功能。【速度设置】按钮用来设置播放的速度,正常速度值为0.0。【时间跳转】按钮用来跳转置指定的时间进度。另外,播放器右侧还有两个播放列表,分别是本地播放列表和网络播放列表,用来播放本地文件和流媒体http服务器上的文件。【打开】按钮用来添加本地文件,【删除】按钮用来删除本地播放列表的一项。网络播放列表项不可删除。在播放的同时,会实时显示多媒体文件的总播放时间和当前播放的进度时间,播放百分比(%),以及当前电脑的时间。同时播放器窗口标题会显示正在播放的文件名。二、播放器的实现1.单机播放的实现:我控制mplayer播放视频是通过mplayer所谓的slave模式实现的。如在终端下输入:mplayer'/home/linux/01.mp3'-quiet–slave,体验下效果。现在来探讨一下slave模式:所谓的slave模式,就是mplayer在运行过程中能够接收用户的输入命令行,具体支持哪些命令行,能够通过mplayer-inputcmdlist这条命令来得到,在Mplayer源码的slave.txt中也有对这些命令有详细的讲解。Slave模式下工作的Mplayer可以和系统的标准输入、输出进行信息交互。Qt给我们提供了很方便的实现方法。通过定义一个QProcess对象调用已编译好的Mplayer。QProcess*process=newQProcess();process-setProcessChannelMode(QProcess::MergedChannels);Process-start(“mplayer–acmadxxxxx”);在命令中添加-slave和-quiet就可以通过命令设置Mplayer实现相应的功能。在mplayer源码中的,slave.txt中对这些命令有详细的讲解。Process-start(“mplayer–slave–quiet–acmadxxxxx”);下面介绍一下几个基本按钮功能的实现。1)暂停功能通过如下代码可以设置Mplayer暂停。process-write(“pause”);执行这段代码的时候如果是播放状态就会暂停,暂停状态时就会继续播放。2)获取播放文件的总时间和当前播放进度执行下面代码时,Mplayer将时间在标准输出显示。process-write(get_time_pos);process-write(get_time_length);通过如下代码即可读出我们需要的信息:connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(dataRecieve()));process有可读取的信息时,发出信号,在槽函数dataRecieve()中读取信息。voidMPlayer::back_message_slots(){while(process-canReadLine()){QByteArrayb=p-readLine();//b即为读取的信息我们可以根据需要取我们要的信息如//文件总时间为:ANS_LENGTH=247.00//当前时间为:ANS_TIME_POSITION=23.00……}}3)快进功能seekvalue[type]Seektosomeplaceinthemovie.0isarelativeseekof+/-valueseconds(default).1isaseektovalue%inthemovie.2isaseektoanabsolutepositionofvalueseconds.下面代码即可实现快进功能:process-write(“seek**1”);4)音量调节volumevalue[abs]Increase/decreasevolumeorsetittovalueif[abs]isnonzero.下面代码即可实现快进功能:Process-write(“volume-1”);//音量减小Process-write(“volume+1”);//音量增加5)静音功能mute[value]Togglesoundoutputmutingorsetitto[value]when[value]=0(1==on,0==off).下面代码即可实现快进功能:process-write(mute0);//开启静音process-write(mute1);//关闭静音6)定位视频窗口通过上面的代码基本功能实现了,可是播放视频的时候发现又弹出一个窗口。并没有出现在我们的窗口里。如下代码即可时间窗口的定位。QStringcommon=mplayer-slave-quiet-acmad-zoommovie/+file_name+-wid+QString::number((int)ui-label_PlayArea-winId());process-start(common);红色部分实现窗口的定位。label_PlayArea是一个QLabel对象。通过winId可以获得一个数字,-wid既将视频输出定位到label_PlayArea标签中。注意:-wid参数只在X11、directX和OpenGL中适用。2.网络功能的实现播放器播放网络视频源是通过http服务实现的。所以需要在PC机上配置好http服务器。如果在Linux下配置http服务器,默认会把目录/var/作为网络输出的根目录,所以网络视频应该放在该目录下。并将权限设置为777,以免出现权限问题。然后在终端下输入:mplayer就可以看到播放画面了。也就是说要想实现网络播放,只需在传给mplayer的参数中带上网络URL即可,mplayer会自己去网络上寻找流媒体文件并点播。当然,前提是保证当前主机或开发板和http服务器的主机ip地址为同一个网段,能够ping通。播放器的网络播放列表可以与服务器端的视频文件列表实时同步。这里是通过一个Linux下用C语言编写的程序server.c实现的。该程序唯一功能就是每隔一定时间,就把服务器存放多媒体文件的目录下所有多媒体文件名写到一个list.txt的文件里。而播放器每隔一定时间就把list.txt文件下载下来,把其中的内容(即很多个文件名)更新到网络播放列表里。这样就实现了网络播放列表的同步更新。不同人的主机ip地址以及http配置可能会不同,则需要修改源文件widget.h中的这两个宏:#defineLIST_TXTlist.txt//服务器存放多媒体文件名的文件#defineHTTP_URL的URL前面一部分把它们修改为自己对应的文件名及ip地址和网络路径即可。3.在开发板上播放时环境的搭建如果在s3c2440开发板上运行,需要为开发板搭建好一系列软硬件环境。我使用的Linux虚拟机为RedHatEnterpriseLinux5.0。在编译之前选择为Qt编译到ARM的交叉工具链。编译完成后。启动开发板,开发板启动的内核要具有声卡驱动,LCD驱动,触摸屏驱动,并且根文件系统要移植好Qt支持ARM的库才能正常运行播放器。然后把在虚拟机里编译好的可执行程序拷到开发板,如果是通过nfs挂接就复制到开发板在主机上的根目录里,我这里是复制到/opt/s3c2440/root_nfs/home/下。然后在连接开发板的串口终端命令行下输入:cd/home,./player_lry-qws就可以看到运行效果了。然后通过触摸屏点击相关按钮就可以播放单机或网络视频源了。三、版本2.5比版本2.0新增的功能1.可以实现双击或者Enter全屏,Esc键或双击又退出全屏。2.全屏时鼠标移动至屏幕底部边缘自动弹出控制菜单,鼠标离开菜单自动隐藏。3.实现空格键暂停/播放。4.改善了拖动播放进度条的抖动问题。5.播放进度条、音量控制条实现了单击即可设置进度和音量的功能。6.运行时可以自动记住上一次打开的路径。
本文标题:基于Qt4的网络视频播放器简介
链接地址:https://www.777doc.com/doc-2571848 .html