抖音怎么刷赞播放量?

mplayer Linux下qt编程 视频播放器,可以移植在arm板上运行 -Unix program 238万源代码下载-
&文件名称: mplayer
& & & & &&]
&&所属分类:
&&开发工具: QT
&&文件大小: 48 KB
&&上传时间:
&&下载次数: 4
&&提 供 者:
&详细说明:Linux下qt编程mplayer视频播放器,可以移植在arm板上运行-Linux qt mplayer arm
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&Makefile&&Makefile.Debug&&Makefile.Release&&main.cpp&&main.o&&moc_movieForm.cpp&&moc_movieForm.o&&movieForm.cpp&&movieForm.h&&movieForm.o&&mplayer&&mplayer.pro&&mplayer.pro.user
&近期下载过的用户:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - qt Mplayer 视频播放器 播放核心为mplayer功能有添加文件,清除列表,播放、快进、倒退等视频播放器该有功能
&[] - linux下QT视频播放器,主要利用mplayer视频解码器对视频解码始终提供品质优越的产品,做最好的嵌入式计算机系统制造商&&
发 布 时 间 :
作 者 : 匿名
在S3C2410嵌入式开发平台上移植了几款linux媒体播放器,感觉播放效果不是很理想, 320x240分辨率下的视频播放也不是很流畅,难道200M主频的速度就只能这样了?我开始有点失望了。上个月,当mplayer摘取了年度Linux world 博览会&新媒体&大奖的消息传来,激发了我再次移植mplayer 到2410的决心,尽管前几次移植的结果都不是很成功。 & 以前我刚开始在linux下做桌面开发时,就听说mplayer号称linux史上功能最强的媒体播放器,它在桌面上安装起来很方便,简单的configure,make一下,就装好了,和QT的GUI配合,界面还是蛮友好的。Mplayer对媒体格式的广泛支持,以及丰富的后期处理滤镜给我留下深刻印象,最新的版本更支持DIVX,H.264,MPEG4等最新的流媒体格式,可以实时在线播放视频流,这么优秀的播放软件把它移植到嵌入式设备上该多好啊!
公司里有一块2410的开发板,CPU是三星的S3C2410,arm9的内核,以前一直都用它来做开发,买的时候配的是10。4寸的sharp大屏,640X480的分辨率,这样就可以测试在640X480分辨率下的视频播放速度了。硬件平台的问题解决了,下一步下载最新的mplayer源代码包,毕竟最新的源代码包才有最新的功能,当然了BUG估计也是不少的。打开mplayer的官方网站
1. 开始编译 下载下来的源代码一般都叫MPlayer-current.tar.bz2的名字,好,开始解包,在命令行下敲以下的命令 bunzip2 MPlayer-current.tar.bz2 | tar xv & 查看解包出来的README和INSTALL文件,看看有没有安装时特别声明的东西,这是我的习惯,因为同一个软件的不同版本,安装的方法有时并不一样。然后输入./configure --help看看有没有多出或减少什么选项,还好,没什么变化,于是把以前配置mplayer的命令拿出来,复制,粘贴在命令行上: ./configure --cc=arm-linux-gcc --target=arm-armv4-linux --enable-static --prefix=/tmp /mplayer --disable-win32 --disable-dvdread --enable-fbdev --disable-mencoder --disable-live --disable-mp3lib --enable-mad --enable-libavcodec --language=zh_CN 配置完毕,开始跨平台编译: make 眼睛盯着编译器反馈的每一个信息,老是担心在哪出错,mplayer的源代码太庞大了, 又使用到不少第三方的库,谁能保证编译不出问题呢.果然,没编译几下,就停下来了,说什么codec-cfg无法运行,产生不了某某头文件。检查了一下,发现codec-cfg这个可执行文件是最先编译产生的一个文件,这个文件是存在的啊,怎么会执行不了呢?于是手动执行了一下,系统提示&cannot execute binary file&,突然想起来,codec-cfg是按跨平台方式编译的啊,产生的是arm的代码,当然不能在x86上执行了,那就先用不用跨平台编译的方式,先把mplayer编译成x86的代码,于是重新配置,简单的 ./configure, make,然后将生成的 codec-cfg改名为codec-cfg.x86。然后再按跨平台方式配置,编译,等编译器出现错误停止编译时,将codec-cfg.x86该名为codec-cfg,再make,OK,编译就可以继续进行了。 在编译期间,还出现了几处错误,都是头文件引用的问题,特别提醒大家的是,在libmpcodecs和libavcodec这两个目录下,有一个疏漏,就是这两个目录的源文件都以 #incude &config.h& 的方式引用头文件&config.h&,但是在这两个目录下并不存在该头文件&config.h&,这些源文件实际是期望引用mplayer安装包根目录下的&config.h&头文件, 因此我们需要在libmpcodecs和libavcodec这两个目录下手动建立一个名为config.h的链接并指向mplayer安装包根目录下的&config.h&头文件,建立方法 $& cd libmpcodecs $& ln &s ../config.h config.h $& cd ../ $& cd libavcodec $& ln &s ../config.h config.h 经过几次的编辑修改,终于成功完成对mplayer的编译链接,一看mplayer文件的大小,10M,z这也太太夸张了吧,我还没编译成debug的呢。到目前为止这算是成功的第一步了。
Tel:+86-571-67&&& Fax:+86-571-8&&&&E-mail:.cn杭州立宇泰电子有限公司/杭州锐嵌科技有限公司 copyright & 2008 &ARM QT移植详细步骤教程
<em style="color:#999;font-size:12 margin-left:10" id="authorposton14-11-25 11:06:44&nbsp
米尔SAM9X5和A5D3X上默认的Qt版本是4.5.3,当这个版本的Qt库不能满足实际开发需求时,可通过此方法制定Qt开发、运行环境。
移植的步骤如下:
1、下载新版qt;
2、编译tslib;
3、编译qt;
4、配置编译后的qt,以便在主机上用qmake编译适用目标板的qt应用;
5、拷贝lib文件到目标板。
一、下载qt和tslib
比如要安装4.8.5版本,则下载 qt-everywhere-opensource-src-4.8.5.tar.gz,
米尔百度云下载(建议!~):
官网下载地址:。
还要下载tslib,
米尔百度云盘下载,地址(建议!~):
官方下载地址:;
二、编译tslib
1、 建立工作目录
$ cd ~$ sudo make /usr/local/tslib
$ sudo make /usr/local/qt4.8.5-arm
$ mkdir qt-arm
$ cd qt-arm复制代码
2、编译安装tslib
将下载的tslib源码复制到工作目录,并解压:
$ cp tslib-1.4.tar.gz ./
$ tar xzvf&&tslib1.4.tar.gz
$ cd tslib复制代码
3、配置环境
先安装automake、libtool 两个工具:
$ sudo apt-get install automake libtool复制代码如果还没有交叉编译器的路径添加到PATH,要先把该路径添加到PATH中,本例使用的交叉编译器的路径为/opt/gcc-linaro-arm- inux-gnueabihf-4.7-30415_linux/bin(一定要指定自己目标板的交叉编译器路径),则执行以下命令:
$ export PATH=$PATH:/opt/gcc-linaro-arm-linux-gnueabihf-4.7-0415_linux/bin复制代码
配置tslib,安装路径可以通过 --prefix 参数设置,这里安装到/usr/local/tslib:
$ ./autogen.sh
$ ./configure CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ --prefix=/usr/local/tslib --host=arm-linux-gnueabihf ac_cv_func_malloc_0_nonnull=yes复制代码
编译安装:
$ make
$ sudo make install复制代码
完成后,tslib会按安装到/usr/local/tslib目录下。
进入下一步之前,先将/usr/local/tslib/etc/ts.conf文件第二行“#module_raw input”注释去掉,变为“module_raw input”,注意一定要顶格。
三、编译安装qt
$ cd ~/qt-arm
$ cp qt-everywhere-opensource-src-4.8.5.tar.bz2&&./
$ tar xjvf qt-everywhere-opensource-src-4.8.5.tar.bz2
$ cd qt-everywhere-opensource-src-4.8.5复制代码2、指定交叉编译器
打开解压目录下的mkspecs/qws/linux-arm-g++/qmake.conf:
$ vi mkspecs/qws/linux-arm-g++/qmake.conf复制代码
用vi打开qmake.conf 后,将arm-linux-全部替换arm-linux-gnueabihf-(注意:根据自己板子而定,并且一定要先将交叉编译器的路径加入PATH变量中),并加上-lts,然后保存退出,更改后如下:
# modifications to g++.conf
QMAKE_CC& && && && && & = arm-linux-gnueabihf-gcc -lts
QMAKE_CXX& && && && && &= arm-linux-gnueabihf-g++ -lts
QMAKE_LINK& && && && &&&= arm-linux-gnueabihf-g++ -lts
QMAKE_LINK_SHLIB& && &&&= arm-linux-gnueabihf-g++ -lts
# modifications to linux.conf
QMAKE_AR& && && && && & = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY& && && &&&= arm-linux-gnueabihf-objcopy
QMAKE_STRIP& && && && & = arm-linux-gnueabihf-strip&font face=&黑体&&&/font&复制代码
如下,先通过 --prefix 指定qt安装的路径,-I后面指定上一步tslib的include路径,-L后面指定上一步tslib的lib路径,
$ sudo mkdir /usr/local/qt4.8.5-arm
$ sudo ./configure --prefix=/usr/local/qt4.8.5-arm -opensource -release -shared -Declarative -importdir /opt/imports -fast -no-largefile -qt-sql-sqlite -qt3support -exceptions -xmlpatterns -no-glib -no-phonon -no-mmx -no-3dnow -no-sse -no-sse2 -svg -no-webkit -qt-zlib -qt-libtiff -qt-libpng -qt-libjpeg -make libs -make tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -iconv -no-dbus -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths 16,24,32 -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-kbd-qvfb -armfpa -no-mouse-qvfb -qt-mouse-linuxtp -qt-mouse-tslib -DQT_QLOCALE_USES_FCVT -DQT_NO_QWS_CURSOR -no-pch -I/usr/local/tslib/include -L/usr/local/tslib/lib -confirm-license复制代码
可以执行./configure --help查看参数的详细说明,根据需要来配置合适的参数
如果配置的时候提示:
& & The tslib functionality test failed!
& & You might need to modify the include and library search paths by editing
& & QMAKE_INCDIR and QMAKE_LIBDIR in
& & /home/gary/qt/qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-arm-g++.
说明找不到合适的交叉编译工具,请重新设置PATH环境变量。如果还是不能解决,再修改mkspecs/qws/linux-arm-g++/qmake.conf,将交叉编译工具改为绝对路径,如下:& &
# modifications to g++.conf
QMAKE_CC& && && && && & = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-30415_linux/bin/arm-linux-gnueabihf-gcc -lts
QMAKE_CXX& && && && && &= /opt/gcc-linaro-arm-linux-gnueabihf-4.7-30415_linux/bin/arm-linux-gnueabihf-g++ -lts
QMAKE_LINK& && && && &&&= /opt/gcc-linaro-arm-linux-gnueabihf-4.7-30415_linux/bin/arm-linux-gnueabihf-g++ -lts
QMAKE_LINK_SHLIB& && &&&= /opt/gcc-linaro-arm-linux-gnueabihf-4.7-30415_linux/bin/arm-linux-gnueabihf-g++ -lts
# modifications to linux.conf
QMAKE_AR& && && && && & = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-30415_linux/bin/arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY& && && &&&= /opt/gcc-linaro-arm-linux-gnueabihf-4.7-30415_linux/bin/arm-linux-gnueabihf-objcopy
QMAKE_STRIP& && && && & = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-30415_linux/bin/arm-linux-gnueabihf-strip&font face=&黑体&&&/font&复制代码
4、 编译安装&&
$ sudo make
$ sudo make install复制代码
完成后,qt4.8.5即会安装到主机/usr/local/qt4.8.5-arm目录下。
四、配置编译后的qt,以便在主机上用qmake编译嵌入式qt应用
1、设置环境变量
在主机(如Ubuntu)当前终端下执行以下命令:
$ export PATH=$PATH:/usr/local/qt4.8.5-arm/bin
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/qt4.8.5-arm/lib复制代码
或将以上命令添加到/etc/profile 文件中,这样系统登录时就自动设置好这些环境变量。
五、移植Qt到开发板
开发板上要使用的东西就2个,一个是编译后的tslib,一个是编译后qt目录下的lib目录。如下步骤将这两个目录拷贝到开发板上。
1、打包lib
我们Qt 安装完成之后,为解决符号链接的问题,可以利用先打包,然后直接解压到开发板的做法:& &
$ cd /usr/local/qt4.8.5-arm
$ tar -zcf lib.tar.gz lib
$ cd /usr/local
$tar -zcf tslib.tar.gz tslib复制代码
将打包好的压缩文件 lib.tar.gz 和 tslib.tar.gz 复制到开发板,然后解压:
mkdir -p /usr/local/qt4.8.5-arm
tar xzvf lib.tar.gz -C /usr/local/qt4.8.5-arm
tar xzvf tslib.tar.gz -C /usr/loacal复制代码
2、设置开发板上的环境变量
在目标板上新建一个名为setqtenv的文件,
vi setqtenv复制代码
并加入以下内容:
export LD_LIBRARY_PATH=/lib:$LD_LIBRARY_PATH
export QTDIR=/usr/local/qt4.8.5-arm
export T_ROOT=/usr/local/tslib
export PATH=$T_ROOT/bin:$PATH
export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib:$LD_LIBRARY_PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
export QWS_KEYBOARD=USB:/dev/input/event1
export QWS_MOUSE_PROTO=Tslib:/dev/ input/event0
export QT_QWS_FONTDIR=$QTDIR/lib/fonts复制代码
执行以下命令设置好qt环境变量的设置:
source setqtenv复制代码
OK了,新版本的qt就可以使用了!
站长推荐 /7
ADAS相比较无人驾驶有望在短期内率先商业化普及,是汽车领域非常重要的产品革新。专家将解答:
1、汽车智能化开发经验和思路
2、ADAS相关技术难点
3、汽车智能化的产业痛点是什么?
每天选一个需要解决的问题,大家一起来帮忙。
授人玫瑰,手有余香
本次讲解答的问题例举:
1、NB-IoT有哪些技术特点和难点?
2、NB-IoT技术对物联网市场将带来什么样的影响。
3、NB-IoT物理层有哪些组成部分?
4、NB-IoT技术如何实现低功耗?
Powered by下次自动登录
现在的位置:
& 综合 & 正文
在QT中调用mplayer
如果是想在QT之外打开一个mplayer窗口就很容易:
const QString mplayerPath("D:/tools/mplayer/mplayer.exe");QStringL args&&"<span style="COLOR: #.avi";QProcess* myProcess=new QPmyProcess-&start(mplayerPath,args);
如果是想在QT的窗口里用mplayer,就像smplayer那像,这可不是件容易的事。在网上只找到一上法文的例子: 用QProcess实现的。可用google英文翻译后阅读。在: 我在windows下实验成功。
也可以研究一下smplayer的源码。大体思想是(别人总结的,跟上面的例子一样):发现mplayer的参数-wid可以把输出流重定向的指定的窗体,通过winId()得到窗体的id即可,但是我不知道视频流或者说外部显示的数据是怎么在Qwidget上呈现的。
这是那个法国人的例子,我加了些comment,注意要把2.avi放到release文件夹下,执行可执行程序,而不是编译后点运行:
#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_WIN32const QString mplayerPath("D:/tools/mplayer/mplayer.exe");#elseconst QString mplayerPath("/usr/bin/mplayer");#endifconst QString movieFile("<span style="COLOR: #.avi");class PlayerWidget: public QWidget...{
Q_OBJECTprivate:
QPushButton *
QWidget *renderT
QProcess *mplayerP //main thing
QSlider *timeL
QTextEdit *
PlayerWidget(QWidget *parent =<span style="COLOR: #)
:QWidget(parent), isPlaying(false)
controller = new QPushButton("Play");
renderTarget = new QWidget(this);
renderTarget-&setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
renderTarget-&setAttribute(Qt::WA_OpaquePaintEvent );
renderTarget-&setMinimumSize(<span style="COLOR: #0, <span style="COLOR: #0);
timeLine = new QSlider(Qt::Horizontal);
log = new QTextE
log-&setReadOnly(true);
QVBoxLayout *layout = new QVBoxL
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())); //switchPlayState在后面
connect(mplayerProcess, SIGNAL(readyReadStandardOutput()),
this, SLOT(catchOutput()));
//catchOutput在后面
connect(mplayerProcess, SIGNAL(finished(int, QProcess::ExitStatus)),
this, SLOT(mplayerEnded(int, QProcess::ExitStatus))); //mplayerEnded在后面
connect(poller, SIGNAL(timeout()), this, SLOT(pollCurrentTime())); //pollCurrentTime在后面
connect(timeLine, SIGNAL(sliderMoved(int)), this, SLOT(timeLineChanged(int))); //timeLineChanged在后面
}protected:
virtual void closeEvent(QCloseEvent *e)
stopMPlayer();
e-&accept();
bool startMPlayer()
if(isPlaying)
return true;
QStringL //运行mplayer需要的参数
// On demande ? utiliser mplayer comme backend
// are asked to use mplayer as backend
args && "-slave";
// Et on veut ne pas avoir trop de chose ? parser :)
//And we want to not having too many things to parser:)
args && "-quiet";#ifdef Q_WS_WIN
// reinterpret_cast&qlonglong& obligatoire, winId() ne se laissant pas )
//reinterpret_cast &qlonglong& mandatory winId () not all)
args && "-wid" && QString::number(reinterpret_cast&qlonglong&(renderTarget-&winId()));
args && "-vo" && "directx:noaccel";#else
// Sur linux, aucun driver n'a ?t? n?cessaire et pas de manip pour Wid :)
//On linux, no driver has been necessary and no manip for 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 && movieF
// On parse la stdout et stderr au m?me endroit, donc on demande ? "fusionnner" les 2 flux
//parse the stdout and stderr in the same place, so we are asking "fusionnner"
mplayerProcess-&setProcessChannelMode(QProcess::MergedChannels);
mplayerProcess-&start(mplayerPath, args); //开始运行这个进程
if(!mplayerProcess-&waitForStarted(<span style="COLOR: #0))
qDebug("allez, cherche le bug :o");
return false;
// On r?cup?re les infos de base
//retrieve basic information
mplayerProcess-&write("get_video_resolution ");
mplayerProcess-&write("get_time_length ");
poller-&start(<span style="COLOR: #00);
isPlaying = true;
return true;
bool stopMPlayer()
if(!isPlaying)
return true;
mplayerProcess-&write("quit ");
if(!mplayerProcess-&waitForFinished(<span style="COLOR: #0))
qDebug("ZOMG, ?a plante :(");
return false;
return true;
}private slots:
//响应readyReadStandardOutput消息
void catchOutput()
while(mplayerProcess-&canReadLine())
QByteArray buffer(mplayerProcess-&readLine());
log-&append(QString(buffer));
// On v?rifie si on a eu des r?ponses
//It checks if we had answers
// r?ponse ? get_video_resolution : ANS_VIDEO_RESOLUTION='&width& x &height&'
//response to get_video_resolution: ANS_VIDEO_RESOLUTION
if(buffer.startsWith("ANS_VIDEO_RESOLUTION"))
buffer.remove(<span style="COLOR: #, <span style="COLOR: #); // vire ANS_VIDEO_RESOLUTION=
buffer.replace(QByteArray("'"), QByteArray(""));
buffer.replace(QByteArray(" "), QByteArray(""));
buffer.replace(QByteArray(" "), QByteArray(""));
buffer.replace(QByteArray(" "), QByteArray(""));
int sepIndex = buffer.indexOf('x');
int resX = buffer.left(sepIndex).toInt();
int resY = buffer.mid(sepIndex+<span style="COLOR: #).toInt();
renderTarget-&setMinimumSize(resX, resY);
// r?ponse ? get_time_length : ANS_LENGTH=xx.yy
//response to get_time_length: ANS_LENGTH =
else if(buffer.startsWith("ANS_LENGTH"))
buffer.remove(<span style="COLOR: #, <span style="COLOR: #); // vire ANS_LENGTH=
buffer.replace(QByteArray("'"), QByteArray(""));
buffer.replace(QByteArray(" "), QByteArray(""));
buffer.replace(QByteArray(" "), QByteArray(""));
buffer.replace(QByteArray(" "), QByteArray(""));
float maxTime = buffer.toFloat();
timeLine-&setMaximum(static_cast&int&(maxTime+<span style="COLOR: #));
// r?ponse ? get_time_pos : ANS_TIME_POSITION=xx.y
//response to get_time_pos: ANS_TIME_POSITION = 2.4
else if(buffer.startsWith("ANS_TIME_POSITION"))
...<span styl
&&&&推荐文章:
【上篇】【下篇】本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 抖音怎么刷赞 的文章

 

随机推荐