在QT中播放声音 MPlayer+libphonon_mp.so和QProgress+Mplayer跨平台播放MP3方案

QT中播放声音

http://blog.chinaunix.net/uid-26696487-id-3312069.html

 

linux下编译phonon的过程

http://blog.csdn.net/songjinshi/article/details/6572220

Qtlinux下调用phonon出现的问题解决办法

http://blog.csdn.net/michaelsrc/article/details/6399333

 

移植mplayermini2440(成功)(其中包含编译Mplayer时遇到的几个错误解决方法)

http://zhanzhiwei2009.blog.163.com/blog/static/12612733220105150103550/

Qt Phonon介绍及安装() 

http://lizzy115.blog.163.com/blog/static/364919582010411335279/

 

QT调用mplayer(通过QProgress方式)

http://blog.csdn.net/neu_sunlei/article/details/5301181

Mplayer成为Linux系统下的万能播放器

http://linux.chinaunix.net/techdoc/desktop/2009/02/11/1061713.shtml

 

绕过phonon,直接操作mplayer的源码

http://www.qtcn.org/bbs/read-htm-tid-26732.html

 

RHEL6安装 MPlayer

http://blog.csdn.net/thealgorithmart/article/details/6975076

CentOS6.0安装MPlayer( 1)

http://www.myzhenai.com/archiver/tid-14389.html

 

QT phononwindows下的编译()

http://www.cnblogs.com/xmphoenix/archive/2011/02/26/1965685.html

 

mplayerARM9(s3c2410)上的移植()

http://www.armbbs.net/forum.php?mod=viewthread&tid=12374&highlight=mplayer

 

http://www.qtcn.org/bbs/read-htm-tid-24165.html

 

其他参考文档:

CentosQt Phonon播放器制作.pdf

基于ARMMplayer播放器的移植.doc

MPlayerlinux下安装.pdf

 

QT中播放声音

1.安装madplay。用system("/../..");

2.安装phonon,在命令行下输入sudoapt-get install libphonon-dev安装phonon就可以使用#include <phonon>文件了(不过在.pro必须包含QT += phonon这条语句)。

使用语句:

Phonon::MediaObject*music=Phonon::createPlayer(Phonon::MusicCategory,Phonon::MediaSource("/home/myprogram/qt/QTFaceRec-build-desktop/test.wav"));

music->play();
还可以播放视频:Phonon::MediaObject*movie=Phonon::createPlayer(Phonon::VideoCategory,Phonon::MediaSource("/home/XX.avi"));movie->play();

3.QSoundbells("mysounds/apple.wav");

bells.play();

此方法在ubuntu上操作不成功,且要用绝对路径,不过将音频文件加入资源文件当中。只能用wav格式。

 

Qt Phonon介绍及安装()  

目前在Qt 4.6中实现多媒体播放图形界面主要依赖于phonon框架,其实qt5.0开始新增一个Multimedia模块,帮助文档中对它的描述是:实现底层的多媒体播放功能,在一般情况下上层的接口phonon模块更适合实现这些功能。在官方博客上了解到Qt有放弃phonon的打算,将多媒体的功能放到正在进行的Mobility项目中实现。先不管那么多了吧,至少目前我们还只能选择phonon,那就先了解一下吧。

phonon最初是一个源于KDE的项目,为使用音频和视频的应用程序开发提供的一个框架。应用程序不用去管多媒体播放是通过什么实现的(如gstreamerxine),只需调用相应的接口就行,但这中间需要一个中转,被称为backendQt也是通过phonon来实现夸平台的多媒体播放。

多媒体文件的播放主要过程包括:文件读取、分流、解码、输出。

这些在不同的系统中实现方式不同,如windows下的DirectXLinux下的 gstreamerxineMac下的QuickTime。而Qt中的phonon作为夸平台的多媒体解决方案,就因该为用户屏蔽掉这些差异。而实际上它做得还不够好,因为用户还需要自己来安装相应的后端插件来完成播放任务。

应用程序与phonon库及后端的关系如下:(图片丢失)

如果想要运行使用Qt中的phonon写的程序,需要满足一下条件:Qt基本库、Qt phonon库、phonon_backend(后端插件)和多媒体播放后台。

下面以linuxFedora 12)系统、Qt 4.6mplayer为例,假设Qt基本库已经安装好,默认phonon是没有被安装的,介绍phonon和后端插件的安装。

Phonon库安装:

进入源代码的phonon目录,如"/usr/src/qt-everywhere-opensource-src-4.6.0/src/phonon",实际代码并不在里面,从phonon.pro文件可知源代码在“/src/3rdparty/phonon/phonon,但并不影响编译。在终端输入“make;make install”即可,如果安装时出错,也可手动将libinclude下相关文件拷贝到安装目录。

qmakemake一下就会在xxx/qt/lib下生成libphonon.lalibphonon.solibphonon.so.4libphonon.so.4.3libphonon.so.4.3.1

编译phonon后, phonon程序已经可以编译了。(此处如果要准备一直到ARM平台,则需要用ARM版本的QT进行再次编译生成ARM平台用的对应的上面几个库文件。)可以把Qt demo中的mediaplayermusicplayer拿来编译,都可以生产可执行文件,也可以执行。但是运行时会弹出phononbackend plugin could not be loaded。这就是缺少后端插件的情况,这时的程序除了显示出界面什么都不能干。这时候需要编译phonon backend后端插件

说明:帮助文档中介绍LinuxQt默认只支持gstreamer,其它的不做保证。但实际中由于mplayer安装比较方便,支持的文件格式全,使用的人也非常多,所以我以mplayer为例。而gstreamer的后端插件可以在系统的“/usr/lib64/kde4/plugins /phonon_backend”目录直接找到(如果已经从源上安装了的话)。

因为linux的解码播放后端默认是gstreamer,但QT并没有提供对应的后端插件。

所以得另外找个解决办法:利用mplayer做后端(此mplayer播放器一定需要在linux下安装,可通过在线yum下载,或者下载源码编译),然后再另外做一个后端插件。

可以从官方网站下载源码编译安装后端插件:

1)下载phonon-mplayer

       地址:http://websvn.kde.org/trunk/playground/multimedia/phonon-backends/mplayer/

http://websvn.kde.org/trunk/playground/multimedia/phonon-backends/mplayer/README?view=log

       使用svn下载: svn cosvn://anonsvn.kde.org/home/kde/trunk/playground/multimedia/phonon-backends/mplayer

2)返回phonon-mplayer目录,编译(qmakemake)生成phonon_backend/libphonon_mplayer.so动态链接库。

3)将libphonon_mplayer.so拷贝到$QTDIR/plugins/phonon_backend/

为了编译方便,基于mplayer的后端插件网上已经有人做好,但有些问题,附上我修改过的phonon-mplayer.tar.gz

下载链接:http://download.csdn.net/source/3253053

编译方法:

进入phonon-mplayer.tar.gz解压出来后的目录

1.进入/phonon-mplayer/libmplayer目录,

make distclean
qmake
make

//之后会在当前位置生成一个libmplayer.a

2.进入/phonon-mplayer/目录

make distclean
qmake
make

//之后会在当前位置生成一个libphonon_mp.so,这个就是我们要的插件

PS:由于这个后端插件里面有几个目录变量是直接改成我电脑里的绝对地址的,所以编译过程中如果有提示找不到XX文件,请将对应的变量改成你对应目录地址。

/phonon_mplayer/phonon_mp.pro的内容:

include(/home/michael/qtsdk-2009.05/qt/src/plugins/qpluginbase.pri)//这里的包含内容要改回你对应QT文件的地址。

这里如果QT环境已经配置好,可以通过qmake –project直接重新生成.pro文件,然后再qmake生成makefile文件,再清除原有编译文件,再执行make。但要注意是X11平台还是ARM平台的QT版本。

然后将libphonon_mp.so复制到QT目录下的/qt/plugins/phonon_backend(如果没有phonon_backend这个目录就新建一个,我就是自己新建一个的-_-!)

如果前面的mplayer前端已经安装好,这样程序就可以找到backend了。否则还需要安装Mplayer前端播放器。下面会具体讲解安装前端播放器。

以上就是如何编译后端插件的方法。如果要使得QT能调用mplayer,还得安装一个 Mplayer,也就是安装一个后端。经个人测试,mplayer直接用apt-getyum从源获取安装最稳定,用源码编译,即使成功也有可能会出现一些未知问题-_-.

这样在X11平台就可以顺利播放MP3等格式的音乐以及其他格式的视频文件。

但是如果需要移植到ARM平台,则还需要ARM版本的Mplayer前端播放器,这时一般就需要自己通过对应版本交叉编译器进行编译了,官方源码下载:http://www.mplayerhq.hu/MPlayer/releases/

该过程我遇到以下几个问题:

1、 广州天嵌TQ210开发板提供的制作好的文件系统中rootfs_linux_v1.1,在根目录sbin文件夹下,已经放置了一个Mplayer播放器程序,经过测试发现该版本为"MPlayerdev-CVS-060102-15:04-4.4.6 (C) 2000-2005 MPlayerTeam",应该是4.4.6交叉编译器编译的,手动操作通过对应目录下./mplayer/opt/bj.mp3播放音乐文件可以正常播放,但是与我自己4.3.3版本编译的libphonon_mp.so后端插件不兼容,导致我自己写的程序无法播放MP3文件。还出现以下不识别版本的错误:

MPlayer: "MPlayer dev-CVS-060102-15:04-4.4.6(C) 2000-2005 MPlayer Team"
parse MPlayer version: "dev"
Error: unknown MPlayer version
Error: couldn't parse MPlayer revision: "dev"

2、 有人说arm-linux-gcc交叉编译器最好是:arm-linux-gcc-4.3.2版本,我用网友编译好的4.3.2版本的Mplayer做前端放在ARM文件系统中测试时,确实可以手动调用mplayer进行播放MP3等文件,调用方法如到播放器文件对应目录下./mplayer/opt/bj.mp3,但实际遇到4.3.2交叉编译器编译的Mplayer版本与我自己4.3.3版本编译的libphonon_mp.so后端插件不兼容的情况,导致我自己写的程序无法播放MP3文件,实际播放过程中出现过播放2秒声音后就停止的情况。

3、 后来我偶然在广州华天正公司的Real210开发板的光盘文件中找到了4.4.1版本交叉编译器编译的Mplayer程序替换后,与我的4.3.3版本libphonon_mp.so后端插件配合起来,可以正常播放音乐。

大功告成!

 

示例测试 :

examples/phonon/qmusicplayer下的例子用mplayer做后端播放音乐会有问题,我使用demos/qmediaplayer

当然也可以用一个简单的例子,如下:

#include <QtGui>

#include <Phonon/MediaObject>
#include <Phonon/VideoPlayer>
#include <Phonon/BackendCapabilities>

int main(int argv, char **args)
{
    QApplication app(argv, args);
    Phonon::MediaObject *music =
         Phonon::createPlayer(Phonon::MusicCategory, Phonon::MediaSource("/home/dlw/Music/mxshf.mp3"));
     music->play();
     /* 视频播放
     Phonon::MediaObject *music =
 Phonon::createPlayer(Phonon::VideoCategory, Phonon::MediaSource("/media/DLW/movie/One.Night.in.Supermarket.avi"));  

    music->play();
     */
    return app.exec(); 

} 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/marxdenl/archive/2009/12/04/4939267.aspx

 

由于本人暂时未进行亲自手动编译MPlayer源码,这里先附上2个不同网友提供的编译步骤:

1.下载相关codes ( http://www.mplayerhq.hu/MPlayer/ )主要都在这里
Mplayer-1.0rc1.tar.bz2(主程序)(http://www.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc1.tar.bz2 )
Abyss-1.6.tar.bz2(皮肤
)(http://www2.mplayerhq.hu/MPlayer/skins/Abyss-1.6.tar.bz2)
all-20060611.tar.bz2(http://www.mplayerhq.hu/MPlayer/releases/codecs/all-20060611.tar.bz2)
windows-all-20060611.zip(建议不要在win下使用. rar,
. zip)
(http://www.mplayerhq.hu/MPlayer/releases/codecs/windows-all-20060611.zip )
  这是我的mplayer的一些组件,你可以去http://www.mplayerhq.hu/MPlayer/下载你自己喜欢的皮肤和字体
.
2.安装过程(请把你的终端打开
)
a.安装相应的解码

  进入主目录后,root身份安装 ,这样改变身份:在终端输入su或者su root ,然后输入密码就ok,有没有看到 $变成了 #
  接着

mkdir/usr/lib/codecs
mkdir/usr/lib/wincodecs
tar jxvfall-20060611.tar.bz2
mvall-20060611/* /usr/lib/codecs
unzipwindows-all-20060611.zip
mvwindows-all-20060611/* /usr/lib/wincodecs
b.安装
mplayer
tar jxvfMPlayer-1.0rc1.tar.bz2
cdMPlayer-1.0rc1
./configure--prefix=/usr/local/mplayer --enable-gui
--enable-freetype --with-codecsdir=/usr/lib/codecs/
--with-win32libdir=/usr/lib/wincodecs/ --language=zh_CN
  注意
:
--prefix=/usr/local/mplayer是安装路径

--enable-gui 安装图形化用户界面
--enable-freetype调节字体
--with-codecsdir=/usr/lib/codecs/
--with-win32libdir=/usr/lib/wincodecs指定解码位置

--language=zh_CN中文
  接着
make
make install
c.安装皮肤

tar jxvfAbyss-1.6.tar.bz2
mv Abyss/usr/local/mplayer/share/mplayer/skins/
cd/usr/local/mplayer/share/mplayer/skins/
mv Abyssdefault
  至此mplayer已经成为了万能播放器

  执行程序在/usr/local/mplayer/bin
  你可以在终端中输入gmplayer,也可以在桌面建立起动器来使用mplayer
  赶紧运行一下,看看有没有问题

  你一定会发现我们还没有装字体,运行mplayer后它也会提示没有字体
  你就从自己电脑中拷个字体到主目录下的.mplayer文件夹下,并把你的字体改名为subfont.ttf,问题就解决了,或者做个链接也行,只要你喜欢
  字体你可以上网下载,mplayer网站也有,你电脑里也有字体,在/usr/share/fonts/chinese(/usr
/share/fonts/chinese/TrueType/uming.ttf
就可以用)你就直接
cp
/usr/share/fonts/chinese/TrueType/uming.ttf $HOME/.mplayer

  每个用户都有自己的环境变量HOME,cd $HOME/.mplayer接着
mv uming.ttfsubfont.ttf结束!
http://linux.chinaunix.net/techdoc/desktop/2009/02/11/1061713.shtml


 
linux下编译phonon的过程

1.先把环境变量设置成QTE命令:exportPATH=/usr/local/Trolltech/QtEmbedded-4.6.3/bin/:$PATH

2.QTE下面./configure-phonon -phonon-backend

3.QTE的目录下的/opt/qte/qt-everywhere-opensource-src-4.6.3/src/phonon执行make完成后会在/opt/QTE/qt-everywhere-opensource-src-4.6.3/lib/下面生成7libphonon的库文件.

4.将生成的库文件拷贝到/usr/local/Trolltech/QtEmbedded-4.6.3/lib/

5.将解压后的phonon-mplayer文件拷贝到/opt/qte/qt-everywhere-opensource-src-4.6.3/src/plugins/phonon/

6.进入此目录执行 make生成libphonon_mp.so库文件,将此库文件拷贝到

/usr/local/Trolltech/QtEmbedded-4.6.3/plugins/phonon_backend/其中phonon_backend是自己创建的目录。

7.进入解压后的MPlayer-1.0rc2目录执行./configuremake make install完成后到

QTX11/qt-everywhere-opensource-src-4.6.3/demos/qmediaplayer/执行make运行生成的可执行文件。不出意外的话会打开。

8.phonon编译不过去envQTLIB QTINC QTDIR 修改成当前用的qtlib includedir把安装包中的/opt/qte/qt-every-opensource/src文件拷贝到安装目录下:/usr/local/Trolltech/QtEmbedded-4.6.3/C6410MPlayer-1.0rc2的过程./configure --host-cc=gcc --cc=arm-linux-gcc --target=arm-linux --enable-static--disable-win32dll --disable-dvdread --disable-dvdread-internal--disable-dvdnav --disable-libdvdcss-internal --enable-fbdev --disable-mencoder--disable-live --disable-mp3lib --enable-mad --enable-libavcodec_a--disable-live --disable-ivtv --with-extraincdir=/media/new_sd/tmp/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include/./configure --cc=arm-linux-gcc --target=arm-linux --enable-static--prefix=/opt/mplayer --disable-win32dll --disable-dvdread --enable-fbdev--disable-mencoder --disable-live --disable-mp3lib --enable-mad--enable-libavcodec_a --language=zh_CN --disable-armv5te --disable-armv6--with-extraincdir=/usr/local/arm/include --with-extralibdir=/usr/local/arm/lib

http://blog.csdn.net/songjinshi/article/details/6572220

 

///

除了上面通过phonon方式进行跨平台播放声音文件,还可以通过QProgress+MPlayer方式进行播放声音视频文件。

绕过phonon,直接操作mplayer的源码

http://www.qtcn.org/bbs/read-htm-tid-26732.html

想在嵌入式上实现一个多媒体播放器,觉得用Phonon开销太大了,但如果只用QProcess又无法获得触摸屏事件,不方便和用户互动,所以打算直接参考smplayer写,今天无意中看到了一个法国人写的源码,比smplayer小多了,看起来更方便,所以就传上来了,希望对大家有帮助

附件 qt_mplayer.tar.gz (3 K) 下载次数:134

下面为附件中main.cpp完整源码,该附件仅有这一个单文件,非常好参考。

#include <QApplication>
#include <QProcess>
#include <QVBoxLayout>
#include <QLayoutItem>
#include <QWidget>
#include <QPaintEvent>
#include <QPainter>
#include <QColor>
#include <QRect>
#include <QLinearGradient>
#include <QSizePolicy>
#include <QPushButton>
#include <QTextEdit>
#include <QSlider>
#include <QCloseEvent>
#include <QTimer>

#ifdef Q_OS_WIN32
const QString mplayerPath("win32/mplayer.exe");
#else
const QString mplayerPath("mplayer");
#endif
const QString movieFile("huantaihu.mp4");

class PlayerWidget: public QWidget
{
	Q_OBJECT

public:
	PlayerWidget(QWidget *parent =0)
		:QWidget(parent), isPlaying(false)
	{
		controller = new QPushButton("Play");
		
		renderTarget = new QWidget(this);
		renderTarget->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
		renderTarget->setAttribute(Qt::WA_PaintOnScreen);
		renderTarget->setMinimumSize(176, 144);
		
		timeLine = new QSlider(Qt::Horizontal);

		log = new QTextEdit;
		log->setReadOnly(true);

		QVBoxLayout *layout = new QVBoxLayout;
		layout->addWidget(controller);
		layout->addWidget(renderTarget);
		layout->addWidget(timeLine);
		layout->addWidget(log);
		setLayout(layout);

		mplayerProcess = new QProcess(this);

		poller = new QTimer(this);

		connect(controller, SIGNAL(clicked()), this, SLOT(switchPlayState()));
		connect(mplayerProcess, SIGNAL(readyReadStandardOutput()),
			this, SLOT(catchOutput()));
		connect(mplayerProcess, SIGNAL(finished(int, QProcess::ExitStatus)),
			this, SLOT(mplayerEnded(int, QProcess::ExitStatus)));
		connect(poller, SIGNAL(timeout()), this, SLOT(pollCurrentTime()));
		connect(timeLine, SIGNAL(sliderMoved(int)), this, SLOT(timeLineChanged(int)));
	}

protected:
	virtual void closeEvent(QCloseEvent *e)
	{
		stopMPlayer();
		e->accept();
	}

private:
	bool startMPlayer()
	{
		if(isPlaying)
			return true;

		QStringList args;
		
		// On demande ?utiliser mplayer comme backend
		args << "-slave";
		// Et on veut ne pas avoir trop de chose ?parser :)
		args << "-quiet";
#ifdef Q_WS_WIN
		// reinterpret_cast<qlonglong> obligatoire, winId() ne se laissant pas convertir gentiment ;)
		args << "-wid" << QString::number(reinterpret_cast<qlonglong>(renderTarget->winId()));
		args << "-vo" << "directx:noaccel";
#else
		// Sur linux, aucun driver n'a 閠?n閏essaire et pas de manip pour Wid :)
		args << "-wid" << QString::number(renderTarget->winId());

		log->append("Video output driver may not be necessary for your platform. \
					Check: http://www.mplayerhq.hu/DOCS/man/en/mplayer.1.html \
					at the VIDEO OUTPUT DRIVERS section.");
#endif
		
		args << movieFile;

		// On parse la stdout et stderr au m阭e endroit, donc on demande ?"fusionnner" les 2 flux
		mplayerProcess->setProcessChannelMode(QProcess::MergedChannels);
		mplayerProcess->start(mplayerPath, args);
		if(!mplayerProcess->waitForStarted(3000))
		{
			qDebug("allez, cherche le bug :o");
			return false;
		}

		// On r閏up鑢e les infos de base
		mplayerProcess->write("get_video_resolution\n");
		mplayerProcess->write("get_time_length\n");

		poller->start(1000);

		isPlaying = true;

		return true;
	}

	bool stopMPlayer()
	{
		if(!isPlaying)
			return true;

		mplayerProcess->write("quit\n");
		if(!mplayerProcess->waitForFinished(3000))
		{
			qDebug("ZOMG, 鏰 plante :(");
			return false;
		}

		return true;
	}

private slots:
	void catchOutput()
	{
		while(mplayerProcess->canReadLine())
		{
			QByteArray buffer(mplayerProcess->readLine());
			log->append(QString(buffer));
			
			// On v閞ifie si on a eu des r閜onses
			// r閜onse ?get_video_resolution : ANS_VIDEO_RESOLUTION='<width> x <height>'
			if(buffer.startsWith("ANS_VIDEO_RESOLUTION"))
			{
				buffer.remove(0, 21); // vire ANS_VIDEO_RESOLUTION=
				buffer.replace(QByteArray("'"), QByteArray(""));
				buffer.replace(QByteArray(" "), QByteArray(""));
				buffer.replace(QByteArray("\n"), QByteArray(""));
				buffer.replace(QByteArray("\r"), QByteArray(""));
				int sepIndex = buffer.indexOf('x');
				int resX = buffer.left(sepIndex).toInt();
				int resY = buffer.mid(sepIndex+1).toInt();
				renderTarget->setMinimumSize(resX, resY);
			}
			// r閜onse ?get_time_length : ANS_LENGTH=xx.yy
			else if(buffer.startsWith("ANS_LENGTH"))
			{
				buffer.remove(0, 11); // vire ANS_LENGTH=
				buffer.replace(QByteArray("'"), QByteArray(""));
				buffer.replace(QByteArray(" "), QByteArray(""));
				buffer.replace(QByteArray("\n"), QByteArray(""));
				buffer.replace(QByteArray("\r"), QByteArray(""));
				float maxTime = buffer.toFloat();
				timeLine->setMaximum(static_cast<int>(maxTime+1));
			}
			// r閜onse ?get_time_pos : ANS_TIME_POSITION=xx.y
			else if(buffer.startsWith("ANS_TIME_POSITION"))
			{
				buffer.remove(0, 18); // vire ANS_TIME_POSITION=
				buffer.replace(QByteArray("'"), QByteArray(""));
				buffer.replace(QByteArray(" "), QByteArray(""));
				buffer.replace(QByteArray("\n"), QByteArray(""));
				buffer.replace(QByteArray("\r"), QByteArray(""));
				float currTime = buffer.toFloat();
				timeLine->setValue(static_cast<int>(currTime+1));
			}
		}
	}

	void pollCurrentTime()
	{
		mplayerProcess->write("get_time_pos\n");
	}

	// Dirige la timeline
	void timeLineChanged(int pos)
	{
		mplayerProcess->write(QString("seek " + QString::number(pos) + " 2\n").toUtf8());
	}

	// Play/stop
	void switchPlayState()
	{
		if(!isPlaying)
		{
			if(!startMPlayer())
				return;

			log->clear();
			controller->setText("Stop");
			isPlaying = true;
		}
		else
		{
			if(!stopMPlayer())
				return;

			poller->stop();
			log->clear();
			controller->setText("Play");
			isPlaying = false;
		}
	}

	void mplayerEnded(int exitCode, QProcess::ExitStatus exitStatus)
	{
		isPlaying = false;
		controller->setText("Play");
		poller->stop();
	}

private:
	QPushButton *controller;
	QWidget *renderTarget;
	QProcess *mplayerProcess;
	bool isPlaying;
	QSlider *timeLine;
	QTimer *poller;
	QTextEdit *log;
};

int main(int argc, char **argv)
{
	QApplication app(argc, argv);

	PlayerWidget *pw = new PlayerWidget;
	pw->show();

	return app.exec();
}

#include "main.moc"

上面的示例程序能够正常播放声音和视频文件,但是在win7系统下播放视频时,对于显卡的配色方案会造成一定影响,而下面的一个示例程序lplayer.tar.gz尽管设计的目标平台为linux,但可以与上面的qt_mplayer.tar.gz进行结合代码修正,应该会达到一个完善跨平台PClinux的播放器效果。

此处跨平台时,在PC平台上需要调用一个mplayer-core.exe的插件文件。可以直接搜索下载。而在linux平台下只需要安装好对应版本的mplayer播放器前端即可,此处可以不需要用phonon_backend后端插件。

QT 4.6.0 Mplayer实现媒体播放器

http://www.qtcn.org/bbs/read-htm-tid-27940.html

QT 4.6.0  Mplayer实现媒体播放器,虽然有些重复了,但是绝对不是抄袭,有些东西是自己折腾出来的,比较实用!前提是你的系统必须安装有mplayer播放器。
 
这种软件的实现原理很简单,我们实质上只做了个外壳,调用了mplayer提供的一个接口,把它的数据输入到我们指定的widget上,这种做法不是跨平台的,程序在
  windows
下面无法运行。想实现在windows下面用的,可以去调用Active X控件,qt支持这种做法,因为windows里面做这种东西太简单,我们也就不以为奇了!
 
有些朋友会问都支持些什么格式之类的问题,答案就是mplayer可以做的事情,播放器就可以做,取决于你想把它做多复杂了!linux下面很多播放器都是用mplayer
 
做后台,加个漂亮的外壳,功能相当强大!
 
贴个图:
 
       window.open('http://www.qtcn.org/bbs/attachment/Mon_1106/44_82966_42bc76e710e184e.jpg?62');"  style="max-width:700px;max-height:700px;"  οnlοad="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'700')this.height='700';"  >

图片:big-1.jpg

图片:big-2.jpg

描述:QT 4.6.0  Mplayer 实现媒体播放器
 
附件:      lplayer.tar.gz (333 K) 下载次数:3160

 

关于qt下使用mplayer的问题!

http://www.qtcn.org/bbs/read-htm-tid-24239.html

最近在研究qt中播放音乐的问题。
最终锁定用mplayer
然后下载了一个安装。
直接调用安装之后的mplayer.exe参数跟一个MP3文件。没有问题。
之后发现安装文件夹下有个mplayer-core.exe
然后把mplayer卸载了。把这个mplayer-core.exe复制到代码目录下。利用这个文件还是可以播放。
我的问题是:
这个文件有12.9M大。难道发布程序的时候,和这个程序一起发布?
大家用mplayer编程序的时候是怎么使用mplayer的呢?

1 发表于: 2009-12-06

如果是Linux,不用考虑mplayer,因为几乎所有的系统都有这个东西。

2 发表于: 2009-12-06

我的是windows
没有这个啊~
我自己安装后提取mplayer-core.exe文件到代码目录下的。!

绕过phonon,直接操作mplayer的源码

http://www.qtcn.org/bbs/read-htm-tid-26732.html

想在嵌入式上实现一个多媒体播放器,觉得用Phonon开销太大了,但如果只用QProcess又无法获得触摸屏事件,不方便和用户互动,所以打算直接参考smplayer写,今天无意中看到了一个法国人写的源码,比smplayer小多了,看起来更方便,所以就传上来了,希望对大家有帮助

附件 qt_mplayer.tar.gz (3 K) 下载次数:134

 

 

一个完整的音乐播放器源代码

http://www.qtcn.org/bbs/read.php?tid=24998

图片:1.jpg 

图片:2.jpg


附件下载

QMusic.rar(1682 K)下载次数:6465  

才学QT3,诸多不足,希望大家指导.
做这个花了一天时间...

歌曲名中,不可以包含 "."  ,"("  , ")"等符号,否则系统会报错..

 

 

 

/

下面为自己实际操作时,一些截图。可参考上面的文字对照理解。

 

编译ARM版本的QT phonon动态库文件

 

生成库文件

 

yum install mplayer



 

换成下面版本则出现播放2秒就停止的情况

MPlayer: "MPlayer 1.0rc2-4.3.2(C) 2000-2007 MPlayer Team"

parse MPlayer version: "1.0rc2"

 

后来换成华天正的4.4.3交叉编译器编译的MPlayer版本即可以正常播放

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值