QT调用mplayer(转) - scutLiu的专栏 - CSDN博客
qmediaplayer原理
一、qmediaplayer的基本原理qmediaplayer 是一个基于Qt多媒体框架的音视瓶播放器组件,它可以在Qt应用程序中方便地实现音视瓶播放的功能。
qmediaplayer的基本原理是通过调用底层音视瓶解码器和渲染器来实现音视瓶播放的过程。
它可以支持多种音视瓶格式的解码和播放,包括但不限于MP3、WAV、OGG、AVI、MP4等常见格式。
二、qmediaplayer的工作流程qmediaplayer的工作流程可以分为以下几个步骤:1. 创建qmediaplayer对象:首先需要在Qt应用程序中创建一个qmediaplayer对象,用于控制音视瓶的播放、暂停、停止等操作。
2. 设置音视瓶源:通过qmediaplayer对象的setMedia()函数可以设置音视瓶文件的路径或URL,qmediaplayer会自动根据文件格式选择合适的解码器进行解码操作。
3. 解码音视瓶数据:一旦设置了音视瓶源,qmediaplayer会自动调用合适的音视瓶解码器对音视瓶数据进行解码,将其转换为可以被渲染器处理的原始数据。
4. 渲染音视瓶数据:解码过后的音视瓶数据将会传递给qmediaplayer内部的渲染器进行实际的播放操作,渲染器会根据音视瓶数据的编码格式和播放环境进行相应的处理和输出。
三、qmediaplayer的优势和适用场景相比于直接调用底层音视瓶解码器和渲染器来实现音视瓶播放功能,使用qmediaplayer有以下几个优势:1. 封装了底层细节:qmediaplayer封装了底层音视瓶解码和渲染的细节,开发者无需关心底层音视瓶处理的具体实现。
2. 跨评台性:qmediaplayer基于Qt框架开发,具有良好的跨评台性,可以在Windows、macOS、Linux等多种操作系统上运行。
3. 简化开发流程:使用qmediaplayer可以简化音视瓶播放功能的开发流程,提高开发效率。
qmediaplayer适用于需要在Qt应用程序中集成音视瓶播放功能的场景,比如多媒体播放器、教育培训软件、多媒体广告展示等场景。
qmediaplayer类介绍与基本使用
qmediaplayer类介绍与基本使用QMediaPlayer是Qt框架中的一个多媒体播放器类,可以用于播放音频和视频文件。
它提供了简单易用的API,允许开发者在应用程序中集成多媒体播放功能,实现播放、暂停、停止、调整音量等操作。
QMediaPlayer类提供了以下几种播放模式:1. SingleShot:播放一次,播放结束自动停止。
2. Loop:循环播放,一直重复播放。
3. CurrentItemOnce:播放当前项目一次,播放结束自动停止。
4. CurrentItemInLoop:循环播放当前项目,一直重复播放。
5. Random:随机播放列表中的项目。
使用QMediaPlayer类可以很方便地实现一些常见的播放操作。
下面是一个基本使用QMediaPlayer的例子:```cpp// 创建QMediaPlayer对象QMediaPlayer* player = new QMediaPlayer(;//设置音频文件路径QString audioPath = "path/to/audiofile";player->setMedia(QUrl::fromLocalFile(audioPath));//播放音频player->play(;//停止音频player->stop(;//暂停音频player->pause(;//设置音量player->setVolume(50);//获取当前音量int volume = player->volume(;```在上面的例子中,首先创建了一个QMediaPlayer对象`player`。
然后通过`setMedia(`方法设置了音频文件的路径。
可以通过`QUrl::fromLocalFile(`方法将本地文件路径转换为QUrl对象。
然后调用`play(`方法开始播放音频,`stop(`方法停止音频,`pause(`方法暂停音频。
Qt调用跨平台库讲解学习
Q t调用跨平台库您还未登录!|登录|注册|帮助CSDN首页资讯论坛博客下载搜索更多CTO俱乐部学生大本营培训充电移动开发软件研发云计算程序员TUP我一路走来---宁来虎一样的敌人,别来猪一样的战友!条新通知登录注册欢迎退出我的博客配置写文章文章管理博客首页全站当前博客空间博客好友相册留言用户操作[留言] [发消息] [加为好友]tingsking18ID:tingsking18此用户是CSDN博客专家如何成为专家 ?共1425196次访问,排名28,好友274人,关注者235人。
tingsking18的文章原创 126 篇翻译 0 篇转载 48 篇评论 238 篇订阅我的博客[编辑]tingsking18的公告鸽写的不是代码,是寂寞~![编辑]文章分类asp、C#C/C++C++ BuilderC++库DelphiJAVAJavaScriptlinux&unixMeegopythonQTVCWCFwindows编程面向对象和UML数据库杂乱情感正则表达式中间件[编辑]我的好友C++ GUI Programming with Qt 4 FocusOnACEKevins的天空lijiji_1515OS X书籍(RSS)OS X资源(RSS)pimshellpsdkzhaoyihui888张硕(CathyEagle)暗金装备杨德龙的专栏(RSS)王中王的Blog王立卫编程手札马说存档2010年08月(1)2010年06月(4)2010年05月(1)2010年04月(10)2010年03月(3)2010年02月(1)2010年01月(8)2009年12月(17)2009年11月(18) 2009年10月(2) 2009年09月(6) 2009年08月(8) 2009年07月(8) 2009年06月(2) 2009年05月(8) 2009年04月(5) 2009年03月(14) 2007年08月(1) 2007年04月(1) 2007年03月(3) 2007年02月(3) 2007年01月(2) 2006年11月(1) 2006年10月(1) 2006年09月(1) 2006年08月(2) 2006年07月(2) 2006年06月(1) 2006年05月(4) 2006年04月(5)2006年03月(11)2006年02月(20)公告:第三届中国云计算大会 7.5折票价抢购中! [意见反馈][官方博客] QT源码解析(五)QLibrary跨平台调用动态库的实现收藏此文于2010-01-04被推荐到CSDN首页如何被推荐?版权声明请尊重原创作品。
Qt之启动外部程序(使用参数很全面,还使用了setProcessChannelMode)
Qt之启动外部程序(使⽤参数很全⾯,还使⽤了setProcessChannelMode)简述QProcess可以⽤来启动外部程序,并与它们交互。
要启动⼀个进程,通过调⽤start()来进⾏,参数包含程序的名称和命令⾏参数,参数作为⼀个QStringList的单个字符串。
另外,也可以使⽤setProgram()和setArguments()来运⾏,然后调⽤start()或open()。
接⼝start() 启动外部程序readAllStandardError() 从标准错误中获取所有数据readAllStandardOutput() 从标准输出中获取所有数据write() 继承于QIODeviceclose() 继承于QIODevice除此之外,QProcess还包含静态成员函数:execute() 启动⼀个进程,然后等待该进程结束。
startDetached() 启动⼀个进程,然后使其和当前进程脱离进程的⽗⼦关系。
⽰例cmd启动cmdQProcess process(this);process.startDetached("cmd.exe");12cmd带参数使⽤cmd来删除本地⽂件QProcess process(this);process.start("cmd.exe");process.write ("del E:\\a.txt\n\r");process.write ("exit\n\r");process.waitForFinished();process.close();cmd获取返回值使⽤cmd来查看⽹络状况QStringList arguments;arguments << "/c" << "ping ";QProcess process(this);process.start("cmd.exe", arguments);process.waitForStarted();process.waitForFinished();QString strResult = QString::fromLocal8Bit(process.readAllStandardOutput());QMessageBox msgBox(this);msgBox.setText(strResult);msgBox.exec();putty远程登录QString program = "E:/Putty.exe";QStringList arguments;arguments<< "-pw" << "wang" << QString("%1@%2").arg("root").arg("172.18.5.73");QProcess *process = new QProcess(this);process->setProcessChannelMode(QProcess::SeparateChannels);process->setReadChannel(QProcess::StandardOutput);process->start(program, arguments, QIODevice::ReadWrite);WinSCP远程⽂件传输QString program = QCoreApplication::applicationDirPath() + "/WinSCP/WinSCP.exe";QStringList arguments;arguments << QString("%1:%2@%3:%4").arg("root").arg("wang").arg("172.18.5.73").arg(22);QProcess *process = new QProcess(this);process->setProcessChannelMode(QProcess::SeparateChannels);process->setReadChannel(QProcess::StandardOutput);process->start(program, arguments, QIODevice::ReadWrite);管道⼀个进程的标准输出流到⽬标进程的标准输⼊。
qmediaplayer类介绍与基本使用
qmediaplayer类介绍与基本使用QMediaPlayer类是Qt框架中的一个多媒体播放器类,提供了播放音频和视频文件的功能。
本文将介绍QMediaPlayer类的基本使用方法。
QMediaPlayer类是Qt Multimedia模块中的一个核心类,用于播放音频和视频文件。
它提供了丰富的功能和接口,可以方便地控制媒体文件的播放、暂停、停止、音量调节等操作。
在使用QMediaPlayer类之前,需要先在Qt项目的.pro文件中添加对Multimedia模块的引用,例如:QT += multimedia然后在源代码中引入QMediaPlayer头文件:#include <QMediaPlayer>创建QMediaPlayer对象的方式有两种:使用默认构造函数或使用带参数的构造函数。
默认构造函数创建的QMediaPlayer对象可以在后续使用中调用setMedia()方法设置要播放的媒体文件,而带参数的构造函数则可以在创建对象时直接指定要播放的媒体文件。
下面是使用默认构造函数创建QMediaPlayer对象的示例代码:QMediaPlayer *player = new QMediaPlayer;使用带参数的构造函数创建QMediaPlayer对象的示例代码如下:QMediaPlayer *player = new QMediaPlayer(QUrl::fromLocalFile("path/to/media/file"));在创建QMediaPlayer对象后,可以使用setMedia()方法设置要播放的媒体文件。
setMedia()方法接受一个QMediaContent对象作为参数,可以通过QUrl、QIODevice或QString类型的参数来指定媒体文件的路径。
下面是使用setMedia()方法设置媒体文件的示例代码:player->setMedia(QUrl::fromLocalFile("path/to/media/file"));QMediaPlayer类提供了一系列控制媒体文件播放的方法,例如播放、暂停、停止等。
mplayer最全的命令
mplayer最全的命令前段时间做过qt内嵌mplayer的⼀个⼩程序,感觉mplayer还⾏不过不⽀持打开图⽚感觉有点⽆⼒。
话不多说上代码:QString path="d:/1.mkv";QWidget *vw=new QWidget(this);vw->resize(400,300);QString common = "E:/testmplayer/debug/mplayer/MPlayer.exe -slave -quiet -vo direct3d -wid " + QString::number(reinterpret_cast<qlonglong>(vw->winId())) + " "+ (path); process=new QProcess();process->start(common);这样⼀个⼩的播放器就做好了,通过命令⽅式启动 myplayer.exe 其中 -slave就是⽤后台命令控制的意思process->write("xxx\n"); //xxx为操作指令必须要有\n在mplayer官⽹上,可以看到下⾯的命令:-------------------The -slave option switches on slave mode, in which MPlayer works as a backendfor other programs. Instead of intercepting keyboard events, MPlayer will readcommands separated by a newline (\n) from stdin.To try slave mode out by hand, runmplayer -slave-quiet <movie>and type slave commands into the console window.You can also use a fifo file (named pipe):mkfifo </tmp/fifofile>mplayer -slave -input file=</tmp/fifofile> <movie>Most slave mode commands are equivalent to command line options, though notnecessarily under the same name. Detailed descriptions can be found in theman page.All commands can be prefixed with one of "pausing ", "pausing_keep ", or"pausing_toggle ". "pausing " tells MPlayer to pause as soon as possibleafter processing the command. "pausing_keep " tells MPlayer to do so only ifit was already in paused mode. "pausing_toggle " tells MPlayer to do soonly if it was not already in paused mode. Please note that "as soon aspossible" can be before the command is fully executed.As a temporary hack, there is also the _experimental_ "pausing_keep_force "prefix, with which MPlayer will not exit the pause loop at all.Like this you can avoid the "frame stepping" effect of "pausing_keep "but most commands will either not work at all or behave in unexpected ways.For "set_mouse_pos" and "key_down_event", "pausing_keep_force" is the defaultsince other values do not make much sense for them.Various tips and tricks (please help expand it!):- Try using something likepausing_keep_force pt_step 1get_property pauseto switch to the next file. It avoids audio playback starting to playthe old file for a short time before switching to the new one.- To ensure the user can't control MPlayer "behind your back" usesomething like -input nodefault-bindings -noconfig allAvailable commands ('mplayer -input cmdlist' will print a list):af_add <filter_arguments_list> (comma separated list of audio filters with parameters)(experimental) Load the given list of audio filters.af_clr(experimental) Unload all loaded audio filters.af_cmdline <filter_name> <filter_arguments>(experimental) Send new command-line options to a filter with the given name.af_del <filter_name_list> (comma separated list of audio filter's names)(experimental) Unload the first occurrence of the filters, if loaded.af_switch <filter_arguments_list> (comma separated list of audio filters with parameters)(experimental) Remove all the audio filters and replace them with the given list.alt_src_step <value> (ASX playlist only)When more than one source is available it selects the next/previous one.audio_delay <value> [abs]Set/adjust the audio delay.If [abs] is not given or is zero, adjust the delay by <value> seconds.If [abs] is nonzero, set the delay to <value> seconds.[brightness|contrast|gamma|hue|saturation] <value> [abs]Set/adjust video parameters.If [abs] is not given or is zero, modifies parameter by <value>.If [abs] is non-zero, parameter is set to <value>.<value> is in the range [-100, 100].capturing [value]Toggle/set capturing the primary stream like -dumpstream.Requires the -capture parameter to be given.change_rectangle <val1> <val2>Change the position of the rectangle filter rectangle.<val1>Must be one of the following:0 = width1 = height2 = x position3 = y position<val2>If <val1> is 0 or 1:Integer amount to add/subtract from the width/height.Positive values add to width/height and negative valuessubtract from it.If <val1> is 2 or 3:Relative integer amount by which to move the upper leftrectangle corner. Positive values move the rectangleright/down and negative values move the rectangle left/up.dvb_set_channel <channel_number> <card_number>Set DVB channel.dvdnav <button_name>Press the given dvdnav button.updownleftrightmenuselectprevmouseedl_loadfile <filename>Load new EDL file.edl_markWrite the current position into the EDL file.frame_drop [value]Toggle/set frame dropping mode.get_audio_bitratePrint out the audio bitrate of the current file.get_audio_codecPrint out the audio codec name of the current file.get_audio_samplesPrint out the audio frequency and number of channels of the current file. get_file_namePrint out the name of the current file.get_meta_albumPrint out the 'Album' metadata of the current file.get_meta_artistPrint out the 'Artist' metadata of the current file.get_meta_commentPrint out the 'Comment' metadata of the current file.get_meta_genrePrint out the 'Genre' metadata of the current file.get_meta_titlePrint out the 'Title' metadata of the current file.get_meta_trackPrint out the 'Track Number' metadata of the current file.get_meta_yearPrint out the 'Year' metadata of the current file.get_percent_posPrint out the current position in the file, as integer percentage [0-100).get_property <property>Print out the current value of a property.get_sub_visibilityPrint out subtitle visibility (1 == on, 0 == off).get_time_lengthPrint out the length of the current file in seconds.get_time_posPrint out the current position in the file in seconds, as float.get_vo_fullscreenPrint out fullscreen status (1 == fullscreened, 0 == windowed).get_video_bitratePrint out the video bitrate of the current file.get_video_codecPrint out the video codec name of the current file.get_video_resolutionPrint out the video resolution of the current file.screenshot <value>Take a screenshot. Requires the screenshot filter to be loaded.0 Take a single screenshot.1 Start/stop taking screenshot of each frame.key_down_event <value>Inject <value> key code event into MPlayer.loadfile <file|url> <append>Load the given file/URL, stopping playback of the current file/URL.If <append> is nonzero playback continues and the file/URL isappended to the current playlist instead.loadlist <file> <append>Load the given playlist file, stopping playback of the current file.If <append> is nonzero playback continues and the playlist file isappended to the current playlist instead.loop <value> [abs]Adjust/set how many times the movie should be looped. -1 means no loop, and 0 forever.menu <command>Execute an OSD menu command.up Move cursor up.down Move cursor down.ok Accept selection.cancel Cancel selection.hide Hide the OSD menu.set_menu <menu_name>Display the menu named <menu_name>.mute [value]Toggle sound output muting or set it to [value] when [value] >= 0(1 == on, 0 == off).osd [level]Toggle OSD mode or set it to [level] when [level] >= 0.osd_show_progressionShow the progression bar, the elapsed time and the total duration of the movie on the OSD.osd_show_property_text <string> [duration] [level]Show an expanded property string on the OSD, see -playing-msg for adescription of the available expansions. If [duration] is >= 0 the textis shown for [duration] ms. [level] sets the minimum OSD level neededfor the message to be visible (default: 0 - always show).osd_show_text <string> [duration] [level]Show <string> on the OSD.panscan <-1.0 - 1.0> | <0.0 - 1.0> <abs>Increase or decrease the pan-and-scan range by <value>, 1.0 is the maximum. Negative values decrease the pan-and-scan range.If <abs> is != 0, then the pan-and scan range is interpreted as anabsolute range.pausePause/unpause the playback.frame_stepPlay one frame, then pause again.pt_step <value> [force]Go to the next/previous entry in the playtree. The sign of <value> tellsthe direction. If no entry is available in the given direction it will donothing unless [force] is non-zero.pt_up_step <value> [force]Similar to pt_step but jumps to the next/previous entry in the parent list.Useful to break out of the inner loop in the playtree.quit [value]Quit MPlayer. The optional integer [value] is used as the return codefor the mplayer process (default: 0).radio_set_channel <channel>Switch to <channel>. The 'channels' radio parameter needs to be set.radio_set_freq <frequency in MHz>Set the radio tuner frequency.radio_step_channel <-1|1>Step forwards (1) or backwards (-1) in channel list. Works only when the'channels' radio parameter was set.radio_step_freq <value>Tune frequency by the <value> (positive - up, negative - down).seek <value> [type]Seek to some place in the movie.0 is a relative seek of +/- <value> seconds (default).1 is a seek to <value> % in the movie.2 is a seek to an absolute position of <value> seconds.seek_chapter <value> [type]Seek to the start of a chapter.0 is a relative seek of +/- <value> chapters (default).1 is a seek to chapter <value>.switch_angle <value>Switch to the angle with the ID [value]. Cycle through theavailable angles if [value] is omitted or negative.set_mouse_pos <x> <y>Tells MPlayer the coordinates of the mouse in the window.This command doesn't move the mouse!set_property <property> <value>Set a property.speed_incr <value>Add <value> to the current playback speed.speed_mult <value>Multiply the current speed by <value>.speed_set <value>Set the speed to <value>.step_property <property> [value] [direction]Change a property by value, or increase by a default if value isnot given or zero. The direction is reversed if direction is lessthan zero.stopStop playback.sub_alignment [value]Toggle/set subtitle alignment.0 top alignment1 center alignment2 bottom alignmentsub_delay <value> [abs]Adjust the subtitle delay by +/- <value> seconds or set it to <value>seconds when [abs] is nonzero.sub_load <subtitle_file>Loads subtitles from <subtitle_file>.sub_logLogs the current or last displayed subtitle together with filenameand time information to ~/.mplayer/subtitle_log. Intended purposeis to allow convenient marking of bogus subtitles which need to befixed while watching the movie.sub_pos <value> [abs]Adjust/set subtitle position.sub_remove [value]If the [value] argument is present and non-negative, removes the subtitlefile with index [value]. If the argument is omitted or negative, removesall subtitle files.sub_select [value]Display subtitle with index [value]. Turn subtitle display off if[value] is -1 or greater than the highest available subtitle index.Cycle through the available subtitles if [value] is omitted or lessthan -1 (forward or backward respectively).Supported subtitle sources are -sub options on the commandline, VOBsubs, DVD subtitles, and Ogg and Matroska text streams.This command is mainly for cycling all subtitles, if you want to seta specific subtitle, use sub_file, sub_vob, or sub_demux.sub_source [source]Display first subtitle from [source]. Here [source] is an integer:SUB_SOURCE_SUBS (0) for file subsSUB_SOURCE_VOBSUB (1) for VOBsub filesSUB_SOURCE_DEMUX (2) for subtitle embedded in the media file or DVD subs. If [source] is -1, will turn off subtitle display.If [value] is omitted or less than -1, will cycle between the first subtitleof each currently available source (forward or backward respectively).sub_file [value]Display subtitle specifid by [value] for file subs. The [value] iscorresponding to ID_FILE_SUB_ID values reported by '-identify'.If [value] is -1, will turn off subtitle display.If [value] is omitted or less than -1, will cycle all file subs(forward or backward respectively).sub_vob [value]Display subtitle specifid by [value] for vobsubs. The [value] iscorresponding to ID_VOBSUB_ID values reported by '-identify'.If [value] is -1, will turn off subtitle display.If [value] is omitted or less than -1, will cycle all vobsubs(forward or backward respectively).sub_demux [value]Display subtitle specifid by [value] for subtitles from DVD or embeddedin media file. The [value] is corresponding to ID_SUBTITLE_ID valuesreported by '-identify'. If [value] is -1, will turn off subtitle display.If [value] is omitted or less than -1, will cycle all DVD subs or embedded subs(forward or backward respectively).sub_scale <value> [abs]Adjust the subtitle size by +/- <value> or set it to <value> when [abs]is nonzero.vobsub_langThis is a stub linked to sub_select for backwards compatibility.sub_step <value>Step forward in the subtitle list by <value> steps or backwards if <value>is negative.sub_visibility [value]Toggle/set subtitle visibility.forced_subs_only [value]Toggle/set forced subtitles only.switch_audio [value] (currently MPEG*, AVI, Matroska and streams handled by libavformat) Switch to the audio track with the ID [value]. Cycle through theavailable tracks if [value] is omitted or negative.switch_angle [value] (DVDs only)Switch to the DVD angle with the ID [value]. Cycle through theavailable angles if [value] is omitted or negative.switch_ratio [value]Change aspect ratio at runtime. [value] is the new aspect ratio expressedas a float (e.g. 1.77778 for 16/9).There might be problems with some video filters.switch_title [value] (DVDNAV only)Switch to the DVD title with the ID [value]. Cycle through theavailable titles if [value] is omitted or negative.switch_vsync [value]Toggle vsync (1 == on, 0 == off). If [value] is not provided,vsync status is inverted.teletext_add_digit <value>Enter/leave teletext page number editing mode and append given digit topreviously entered one.0..9 - Append apropriate digit. (Enables editing mode if called from normalmode, and switches to normal mode when third digit is entered.)- - Delete last digit from page number. (Backspace emulation, works onlyin page number editing mode.)teletext_go_link <1-6>Follow given link on current teletext page.tv_start_scanStart automatic TV channel scanning.tv_step_channel <channel>Select next/previous TV channel.tv_step_normChange TV norm.tv_step_chanlistChange channel list.tv_set_channel <channel>Set the current TV channel.tv_last_channelSet the current TV channel to the last one.tv_set_freq <frequency in MHz>Set the TV tuner frequency.tv_step_freq <frequency offset in MHz>Set the TV tuner frequency relative to current value.tv_set_norm <norm>Set the TV tuner norm (PAL, SECAM, NTSC, ...).tv_set_brightness <-100 - 100> [abs]Set TV tuner brightness or adjust it if [abs] is set to 0.tv_set_contrast <-100 -100> [abs]Set TV tuner contrast or adjust it if [abs] is set to 0.tv_set_hue <-100 - 100> [abs]Set TV tuner hue or adjust it if [abs] is set to 0.tv_set_saturation <-100 - 100> [abs]Set TV tuner saturation or adjust it if [abs] is set to 0.use_masterSwitch volume control between master and PCM.vo_border [value]Toggle/set borderless display.vo_fullscreen [value]Toggle/set fullscreen mode.vo_ontop [value]Toggle/set stay-on-top.vo_rootwin [value]Toggle/set playback on the root window.volume <value> [abs]Increase/decrease volume or set it to <value> if [abs] is nonzero.overlay_add <file> <id> <x> <y> <color>Add an overlay bitmap. <file> must be a PGM file without comments.<id> is an arbitrary integer used to identify the overlay.overlay_remove <id>Remove all overlays identified by <id>.The following commands are really only useful for OSD menu console mode:helpDisplays help text, currently empty.exitExits from OSD menu console. Unlike 'quit', does not quit MPlayer.hideHides the OSD menu console. Clicking a menu command unhides it. Otherkeybindings act as usual.run <value>Run <value> as shell command. In OSD menu console mode stdout and stdinare through the video output driver.Available properties:name type min max get set step comment================================================================= osdlevel int 0 3 X X X as -osdlevelspeed float 0.01 100 X X X as -speedloop int -1 X X X as -looppause flag 0 1 X 1 if paused, use with pausing_keep_force filename string X file playing wo pathpath string X file playingdemuxer string X demuxer usedstream_pos pos 0 X X position in streamstream_start pos 0 X start pos in streamstream_end pos 0 X end pos in streamstream_length pos 0 X (end - start)stream_time_pos time 0 X present position in stream (in seconds) chapter int 0 X X X select chapterchapters int X number of chaptersangle int 0 X X X select anglelength time X length of file in secondspercent_pos int 0 100 X X X position in percenttime_pos time 0 X X X position in secondsmetadata str list X list of metadata key/valuemetadata/* string X metadata valuesvolume float 0 100 X X X change volumebalance float -1 1 X X X change audio balancemute flag 0 1 X X Xaudio_delay float -100 100 X X Xaudio_format int Xaudio_codec string Xaudio_bitrate int Xsamplerate int Xchannels int Xswitch_audio int -2 255 X X X select audio streamswitch_angle int -2 255 X X X select DVD angleswitch_title int -2 255 X X X select DVD titlecapturing flag 0 1 X X X dump primary stream if enabledfullscreen flag 0 1 X X Xdeinterlace flag 0 1 X X Xontop flag 0 1 X X Xrootwin flag 0 1 X X Xborder flag 0 1 X X Xframedropping int 0 2 X X X 1 = soft, 2 = hardgamma int -100 100 X X Xbrightness int -100 100 X X Xcontrast int -100 100 X X Xsaturation int -100 100 X X Xhue int -100 100 X X Xpanscan float 0 1 X X Xvsync flag 0 1 X X Xvideo_format int Xvideo_codec string Xvideo_bitrate int Xwidth int X "display" widthheight int X "display" heightfps float Xaspect float Xswitch_video int -2 255 X X X select video streamswitch_program int -1 65535 X X X (see TAB default keybind)sub int -1 X X X select subtitle streamsub_source int -1 2 X X X select subtitle sourcesub_file int -1 X X X select file subtitlessub_vob int -1 X X X select vobsubssub_demux int -1 X X X select subs from demuxsub_delay float X X Xsub_pos int 0 100 X X X subtitle positionsub_alignment int 0 2 X X X subtitle alignmentsub_visibility flag 0 1 X X X show/hide subtitlessub_forced_only flag 0 1 X X Xsub_scale float 0 100 X X X subtitles font sizetv_brightness int -100 100 X X Xtv_contrast int -100 100 X X Xtv_saturation int -100 100 X X Xtv_hue int -100 100 X X Xteletext_page int 0 799 X X Xteletext_subpage int 0 64 X X Xteletext_mode flag 0 1 X X X 0 - off, 1 - onteletext_format int 0 3 X X X 0 - opaque,1 - transparent,2 - opaque inverted,3 - transp. inv.teletext_half_page int 0 2 X X X 0 - off, 1 - top half,2- bottom half常⽤的命令我⽤红⾊标出来了,⽤ -slave 使其与键盘分离,我们可以建⼀个进程,如:QProcess *process;如果我们想让他快进,可以⽤:process->write("seek +5\n"); 命令,记住,当与键盘分离后,mplayer接受的命令都是以\n结尾的命令,⽽且如果命令后还要加参数,命令和参数之间⾄少要有⼀个空格,不然起不到process->("volume +5\n"); 加声⾳process->("volume -5\n"); 减声⾳process->write("seek -5\n"); 快退等等的命令,⽤法格式都是⼀样的,对照着官⽹⼿册,就可以设计了。
QT调用DLL方法(三种方法)
QT调⽤DLL⽅法(三种⽅法)Qt调⽤DLL⽅法⼀:使⽤Win32 API在显式链接下,应⽤程序必须进⾏函数调⽤以在运⾏时显式加载 DLL。
为显式链接到 DLL,应⽤程序必须:调⽤ LoadLibrary(或相似的函数)以加载 DLL 和获取模块句柄。
调⽤ GetProcAddress,以获取指向应⽤程序要调⽤的每个导出函数的函数指针。
由于应⽤程序是通过指针调⽤ DLL 的函数,编译器不⽣成外部引⽤,故⽆需与导⼊库链接。
使⽤完 DLL 后调⽤ FreeLibrary。
例如:typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);HINSTANCE hDLL; // Handle to DLLLPFNDLLFUNC1 lpfnDllFunc1; // Function pointerDWORD dwParam1;UINT uParam2, uReturnVal;hDLL = LoadLibrary(”MyDLL”);if (hDLL != NULL){lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,“DLLFunc1″);if (!lpfnDllFunc1){// handle the errorFreeLibrary(hDLL);return SOME_ERROR_CODE;}else{// call the functionuReturnVal = lpfnDllFunc1(dwParam1, uParam2);}}需要说明的是,typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);是声明想要调⽤的函数指针,这个函数的参数必须和DLL⾥⾯的⼀样。
DLLFunc1是DLL⾥⾯的“实际的函数名”,必须和头⽂件⾥⾯声明的⼀样,否则将会调⽤失败。
使⽤需要加Windows.h 头⽂件。
mplayer 用法
mplayer 用法摘要:一、MPlayer 简介1.MPlayer 的概述2.MPlayer 的特点二、MPlayer 的安装与配置1.安装MPlayer2.配置MPlayer三、MPlayer 的基本用法1.播放媒体文件2.控制播放进度3.调整播放设置四、MPlayer 的高级用法1.播放列表管理2.字幕设置与调整3.网络流媒体播放五、MPlayer 的快捷键与命令行参数1.快捷键2.命令行参数六、MPlayer 的常见问题与解决方案1.无法播放媒体文件2.播放过程中卡顿或缓冲3.字幕无法正常显示正文:MPlayer 是一款免费开源的跨平台媒体播放器,支持多种音视频格式,具有强大的功能和良好的兼容性。
本篇文章将详细介绍MPlayer 的用法。
一、MPlayer 简介MPlayer 是一款基于命令行的媒体播放器,支持Linux、Windows、macOS 等操作系统。
它具有占用资源少、播放速度快、兼容性强等特点,是许多用户的首选播放器。
二、MPlayer 的安装与配置1.安装MPlayer在Linux 系统上,可以通过包管理器(如apt、yum 等)进行安装。
在Windows 和macOS 系统上,可以访问MPlayer 官方网站(http://www.mplayerhq.hu/)下载安装包并进行安装。
2.配置MPlayerMPlayer 的配置文件位于用户主目录下的`.mplayer/config`文件。
用户可以根据自己的需求,修改配置文件以满足特定需求。
三、MPlayer 的基本用法1.播放媒体文件使用MPlayer 播放媒体文件非常简单,只需在终端中输入`mplayer [文件路径]`即可。
例如,要播放名为“example.mp4”的媒体文件,输入`mplayer example.mp4`。
2.控制播放进度通过键盘上的左右方向键,可以向前或向后跳转播放进度。
按“+”键可以加快播放速度,按“-”键可以减慢播放速度。
Gtk中调用Mplayer
Gtk中调用Mplayer一、Mplayer1. 什么是MplayerMplayer是Linux下的多媒体播放器,它使用简单,对常见的视频、音乐格式都支持得不错。
2. 为什么使用MplayerLinux下的多媒体播放器主要用xine, mplayer, gstreamer,它们各有常处1) mplayer安装使用都很方便,一般通过命令行调用,然后通过按键控制(空格是暂停,左右键是seek等),它自带的图形界面不是很好用2) xine包括lib和ui两部分(两个安装包版本需一致),一般用户通过xine-ui播放媒体,lib部分提供了完善的接口,便于二次开发,库的使用相对比较复杂3) gstreamer是一个播放框架加一些解码库,据说结构很好,但是普通人安装、使用和开发都比较麻烦3. 如何使用mplayer1) 播放普通文件$ mplayer xxx.mp3$ mplayer xxx.avi2) 播放管道文件$ mkfifo /tmp/media // 建立管道文件$ cat xxx.mpeg > /tmp/media & // 把媒体文件数据写入管道一端$ mplayer /tmp/media –cache 3000 // mplayer在缓充3M数据后开始播放注意必须建立缓充,以支持读取数据时的小范围索引以此类推,可以实现流媒体的播放(比如从服务上收到媒体数据写入管道一端,另一端用mplayer读取并播放)3) slave模式播放slave模式时Mplayer不再按受按键控制,可使用管道向mplayer发送控制命令它常用于mplayer被另一程序调用,在后台播放的情况$ mkfifo /tmp/cmd$ mplayer –slave –quiet –input file=/tmp/cmd xxx.mpeg &$ echo ―pause‖ > /tmp/cmd用以下命令查看可用的控制命令$ mplayer –input cmdlistMPlayer 1.0rc2-4.1.2 (C) 2000-2007 MPlayer TeamCPU: SGI MIPSCreating config file: //.mplayer/configseek Float [Integer]edl_markaudio_delay Float [Integer]speed_incr Floatspeed_mult Floatspeed_set Floatquit [Integer]pauseframe_steppt_step Integer [Integer]pt_up_step Integer [Integer]alt_src_step Integerloop Integer [Integer]sub_delay Float [Integer]sub_step Integer [Integer]osd [Integer]osd_show_text String [Integer] [Integer] osd_show_property_te String [Integer] [Integer] volume Float [Integer] balance Float [Integer]use_mastermute [Integer]contrast Integer [Integer] gamma Integer [Integer] brightness Integer [Integer]hue Integer [Integer] saturation Integer [Integer]frame_drop [Integer]sub_pos Integer [Integer]sub_alignment [Integer]sub_visibility [Integer]sub_load Stringsub_remove [Integer]vobsub_lang [Integer]sub_select [Integer]sub_logsub_scale Float [Integer]get_percent_posget_time_posget_time_lengthget_file_nameget_video_codecget_video_bitrateget_video_resolutionget_audio_codecget_audio_bitrateget_audio_samplesget_meta_titleget_meta_artistget_meta_albumget_meta_yearget_meta_commentget_meta_trackget_meta_genreswitch_audio [Integer]tv_start_scantv_step_channel Integertv_step_normtv_step_chanlisttv_set_channel Stringtv_last_channeltv_set_freq Floattv_step_freq Floattv_set_norm Stringtv_set_brightness Integer [Integer] tv_set_contrast Integer [Integer] tv_set_hue Integer [Integer] tv_set_saturation Integer [Integer] forced_subs_only [Integer]dvb_set_channel Integer Integer switch_ratio [Float]vo_fullscreen [Integer]vo_ontop [Integer]file_filter Integervo_rootwin [Integer]vo_border [Integer] screenshot [Integer] panscan Float [Integer] switch_vsync [Integer] loadfile String [Integer] loadlist String [Integer] run String change_rectangle Integer Integer get_vo_fullscreenget_sub_visibilitykey_down_event Integerset_property String Stringget_property Stringstep_property String [Float] [Integer]seek_chapter Integer [Integer]set_mouse_pos Integer Integer4. Mplayer相关的GUI1) Gmplayer:Mplayer自带的GUI一般用rpm包安装的Mplayer不带gmplayer想使用gmplayer需要下载源码,然后在编译时加入选项—enable-gui,编译安装后就产生了可执行程序gmplayer想要正常运行gmplayer,还需要安装皮肤gmplayer的控制界面和播放界面分别在两个窗口,也不是很好用2) Kmplayer:基于mplayer程序的播放软件控制界面和播放界面在同一窗口中实现,看起来就像暴风影音它只支持mplayer的部分功能,比如像设置cache的功能,这就无法实现有局限性,代码又多,不便修改和加入自己想要的功能3) 自己动手实现Mplayer GUI的好处a) 做最简单的mplayer GUI:我们可以用不到200行的代码,使用gtk图形界面,给Mplayer做一个简单GUI(pause/seek/vol等功能),控制界面和播放界面在同一窗口b) 它可以支持mplayer的所有参数及功能c) 它可以与你自已做的应用软件结合紧密d) 不用编译和修改mplayer的源码二、Gtk中调用MplayerMplayer可以和很多图形界面工具结合(包括framebuffer)我们以gtk为例,是因为gtk实现比较简单(qt、X、framebuffer同理)1. 与gtk窗口结合1) Mplayer播放的媒体在指定窗口中显示Mplayer的slave模式中,参数-wid可以使视频输出到指定窗体(需指明xwindowID,在XWindow桌面系统中,每个窗口创建时都被分配有唯一的ID号,它相当于一个指针)以下代码能取得gtk窗口的xwindowID号window1 = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_widget_show(window1);xid = gdk_x11_drawable_get_xid(window1->window);在播放时指在-wid后面加上十进制的xid号2) Mplayer播放的媒体与其它gtk控件并存用上面的方法虽然可以指定mplayer显示窗口,但无法设置视频在该窗口中显示的位置,使得视频在整个窗口中播放,若想在屏幕中同时显示控件就会出现问题,我们用darwingarea 控件来解决这个问题drawingarea控件虽然也布局在gtkwindow窗口中的某个部分,却与gtkwindow有着不同的xwindowID, 我们用以下方法,使Mplayer显示在窗口的局部(10, 10, 200, 150)window1 = gtk_window_new(GTK_WINDOW_TOPLEVL);fixed1 = gtk_fixed_new();gtk_container_add(GTK_CONTAINER(window1), fixed1);drawingarea1 = gtk_drawing_area_new();gtk_fixed_put(GTK_FIXED(fixed1), drawingarea1, 10, 10);gtk_widget_set_size_request(drawingarea1, 200, 150);gtk_widget_show(drawingarea1);gtk_widget_show(fixed1);gtk_widget_show(window1);xid = gtk_x11_drawable_get_xid(drawingarea1->window);2. 命令控制Mplayer上面提到的slave模式可以让程序通过管道控制Mplayer的播放,在程序中利用system函数运行shell命令,例如暂停system(―echo pause >/tmp/cmd‖);3. 获取Mplayer进度信息控制命令get_percent_pos可以让Mplayer打印出当前进度(当前进度是Mplayer的输出信息),以ANS_PERCENT_POSITION开头,我们可以用popen的read方式来运行mplayer,从而取得mplayer的输出信息,并做出分析,形如if ((pp = popen(―mplayer –wid xxxx –slave –input file=/tmp/cmd‖, ―r‖)) != NULL){while(!feof(pp)){data = gets(str, 256, pp);if (strncmp(str, ―ANS_PERCENT_POSITION=‖, 21) == 0){pos = atoi(str+21) / 100.0;// 设置进度条}}pclose(pp);}这种方法不断读取可能需要使用线程,你也可以使用io_channel的方法分析mplayer输出同时启动一个定时器,每秒执行一次以下代码,使每秒得到一次进度信息system(―echo get_percent_pos >/tmp/cmd‖);4. 注意1) 向mplayer发送控制命令时需要注意,任何命令都会打断当前的pause状态2) 注意捕捉SIGPIPE信号,由于程序通过管道与Mplayer通信,当Mplayer退出时程序可能会收到SIGPIPE信号,如果不做处理,可能引起你程序的不正常退出3) 若运行mplayer时运用了多线程,别忘了在新线程中操作界面时使用gdk_thread_xxx函数进行资源锁定,以避免冲突本文来自CSDN博客,转载请标明出处:/zhangbinka/archive/2009/07/01/4313057.aspx。
如何用QT4来播放视频文件
1.MPlayer 的特殊控制模式MPlayer 本身是一个命令行的程序,但是他提供了有后台模式(Slave),可以把自己输出重定向到一个指定的X Windows窗口中,并且可以通过管道向其发送命令来控制,这样就为GUI程序提供一个简单的编程接口.让其用图形界面来控制.Gnome下的gmplayer其实就是通过这个方法来在图形界面调用MPlayer.关于gtk下如何编程控制Mplayer可以参考/zhangbinka/archive/2009/07/01/4313057.aspx关于MPlayer在X86和ARM下如何安装请参考,我的博文/u3/105675/showart_2101453.html/u3/105675/showart_2148571.html本文的重点如何在QT来在GUI控制MPlayerMPlayer 的特殊用法1.1 通过管道播放视频∙mkfifo /tmp/media // 建立管道文件∙cat xxx.mpeg > /tmp/media & // 把媒体文件数据写入管道一端∙mplayer /tmp/media –cache 3000 // mplayer在缓充3M数据后开始播放注意必须建立缓充,以支持读取数据时的小范围索引本例里没有用这个功能,但是很多LINUX的网络播放器也是用这个方法来这现的.有兴趣可以参考一下gtk-sopcast(/p/gsopcast/)这个开源项目,这个软件相信很多人用它的WINDOWS版本看过球.1.2 slave模式.slave 播放模式,可以MPlayer在后台执行,并可以通专用的命令管道发送命令来控制MPlayer.∙ mkfifo /tmp/cmd∙ mplayer -slave -quiet -input file=/tmp/cmd xxx.mpeg & o使用/tmp/cmd做为命令管道∙ echo "pause" > /tmp/cmdo暂停播放常用的控制命令可以用如下命令来查看mplayer –input cmdlist编程常用到几个命令∙seek Float [Integer] 跳到指定时间播放∙speed_incr Float 快进∙speed_set Float 设置指定时间∙quit [Integer] 退出∙pause 暂停,再一次表示重新播放∙get_percent_pos 取得百分比表示的进度∙get_time_pos 取得时间进度1.3 在指定的窗口播放MplayerMPlayer是默认全屏播放,但在GUI中一般都是指定区域或者控制来播放.这样显得美观,MPlayer支持在指定的X窗口播放的功能.用-wid参数告诉窗口ID 即可.mplayer test.mpg -wid 0x00029 #0x0029是X ID在对于正在运行图形界面窗口,可以用Linux 命令xwininfo来取到其ID,方法是运行这个程序后.屏幕鼠标变成+,将其拖到指定窗口即可看到其结果。
QT生成动态链接库及调用详细步骤
QT⽣成动态链接库及调⽤详细步骤
1. ⾸先新建⼀个⼯程(该篇⽂章共有两个不同的⼯程,注意区分,⼀个是有UI界⾯的,⼀个是没有UI界⾯的)
2.接下来选择库模板
3.选择共享库,取个该动态链接库的名字,下⼀步
5.继续下⼀步,直到点击完成。
6.点击项⽬,勾掉Shadow build,使.dll不⽣成在debug⽬录中,⽣成在我们⾃⼰创建的⽬录下⾯,⽅便查找和使⽤。
7.在.pro⽂件中,添加如下代码
DESTDIR =..\MyDebug
使⽣成的.dll⽂件放在该⽬录下,⾃动创建该⽬录。
8.点击运⾏,即可⽣成。
(此弹框不⽤管它,代表编译成功,已⽣成⽂件)
9.调⽤⽅法有两种:
(1)在.pro⽂件中,添加如下代码,并将Save_Data.h 添加到⼯程项⽬中(这步应该都会,添加现有⽂件),需要⽤到该动态链接库的地⽅就 #include 进去。
需要注意的⼀点就是:需要把以上⽣成的⽂件放置到⽣成的E:\cpptest\build-test_dll-
Desktop_Qt_5_7_0_MinGW_32bit-Debug\debug ⽬录下。
LIBS += libgdi32#这个也不能少。
少了会出错
win32:LIBS += "E:/cpptest/MyDebug/Save_Data.dll"
win32:LIBS+= -LE:/cpptest/MyDebug/ -lSave_Data
(2)在.pro⽂件中,添加如下代码,并将Save_Data.h ⽂件放置在与⼯程⽂件同⽬录⽂件中,需要⽤到该动态链接库的地⽅就 #include 进去。
⽐如我的,看图⼀⽬了然:。
qt 函数的定义与调用
qt 函数的定义与调用Qt 函数是在 Qt 框架中定义和使用的函数,它们是支持跨平台开发的重要组成部分。
在 Qt 中使用函数的两个主要步骤是函数的定义和调用。
下面将详细介绍 Qt 函数的定义与调用。
一、Qt 函数的定义Qt 函数是在类中定义的,所以要先定义一个类。
下面是一个示例:```class MyClass{public:void myFunction(); //这是一个函数声明};```这里定义了一个名为 MyClass 的类,并在该类中定义了一个名为myFunction() 的函数。
注意,这只是一个函数声明,实际的函数定义必须在类的实现文件中进行。
void MyClass::myFunction(){//函数定义}```这样就定义了一个函数。
函数实现可以根据需要包含参数和返回值,例如:```class MyClass{public:int addNumbers(int num1, int num2); //函数声明};int MyClass::addNumbers(int num1, int num2){int sum = num1 + num2; //计算两个数的和return sum; //返回结果}```二、Qt 函数的调用在使用定义好的 Qt 函数时,需要进行函数的调用。
以下是一个调用示例:```int main(int argc, char *argv[]){QApplication a(argc, argv);MyClass myObj;int result = myObj.addNumbers(2, 3); //调用函数qDebug() << "The result is: " << result;return a.exec();}```在 main() 函数中,首先创建了一个 QApplication 对象,然后创建了一个 MyClass 对象 myObj。
基于QT的音乐播放器编程(实现最基本的功能)
第一节实现基本功能说明:源代码我已经上传到CSDN网站,请大家到网站搜索“基于QT的音乐播放器源代码及详细教程”下载。
1.新建工程,基类选择Qwidget。
双击打开界面文件,在界面文件中创建label显示时间、若干个toolbutton按钮和一个listWidget列表显示歌曲列表。
点击“文件”->“新建”创建QT资源文件,在工程目录下建文件夹“images”,双击QT资源文件添加前缀“/”,再添加图标文件。
2.单击上一曲按钮,在属性栏设置标题tooltip和图标icon:界面如下:3.右键几个按钮,转入槽函数,列表和歌词的信号选择clicked(bool)。
4.工程文件中添加语句QT+=phonon对音乐播放器进行设计,主要用到模块中的MediaObject(管理媒体源)AudioOutput(连接物理设备)SeekSlider(实现进度条)QList(实现播放列表)大概地说,Phonon的工作机制是使用MediaObject来管理MediaSource即源文件,通过Path连接到AudioOutput,最后是由AudioOutput5.修改widget.h头文件在widget.h头文件添加语句:#include<phonon>在头文件声明变量:private:Phonon::MediaObject*audio;//QAction*stop;QAction*open;QAction*sound;QAction*exit;QAction*remove;头文件声明函数:public:void creatActions();//创建动作6.修改widget.cpp文件构造函数添加:this->setWindowTitle(tr("音乐播放器"));//设置标题/**初始化媒体**/audio=new Phonon::MediaObject();//媒体对象audio->setTickInterval(1);audioOutput=new Phonon::AudioOutput(Phonon::VideoCategory);//音频输出Phonon::createPath(audio,audioOutput);//连接媒体对象与音频输出musicInformationMediaObject=new Phonon::MediaObject(this);//音乐信息对象volumeSlider=new Phonon::VolumeSlider(audioOutput,this);//音量滑动条volumeSlider->move(190,100);volumeSlider->resize(50,20);volumeSlider->setStyleSheet("background-color:rgb(255,255,255,100)"); volumeSlider->setFixedWidth(100);//固定音量条大小seekSlider=new Phonon::SeekSlider(audio,this);//进度滑动条seekSlider->move(10,35);seekSlider->resize(170,20);seekSlider->setStyleSheet("background-color:rgb(255,255,255,100)");creatActions();函数定义://播放/暂停void Widget::on_toolButton_playpause_clicked(){if(sourceList.isEmpty()){return;}audio->setQueue(sourceList);//if{}}//{audio->stop();}void Widget::on_toolButton_open_clicked(){QStringList files=QFileDialog::getOpenFileNames(this,tr("SelecFilestoplay"));//使用QFileDialog的getOpenFileNames方法获取若干个音乐文件,QString file;foreach(file,files)//使用Qt中的foreach遍历每个选中的文件,将其添加到播放列表中。
QT开发——动态库静态库的生成与调用(Qmake和Cmake方式)
QT开发——动态库静态库的⽣成与调⽤(Qmake和Cmake⽅式)1.理解动态库与静态库区别链接:https:///wonengguwozai/article/details/93195827静态库和动态库最本质的区别就是:该库是否被编译进⽬标(程序)内部。
1.1 静态(函数)库⼀般扩展名为(.a或.lib),这类的函数库通常扩展名为libxxx.a或xxx.lib 。
这类库在编译的时候会直接整合到⽬标程序中,所以利⽤静态函数库编译成的⽂件会⽐较⼤,这类函数库最⼤的优点就是编译成功的可执⾏⽂件可以独⽴运⾏,⽽不再需要向外部要求读取函数库的内容;但是从升级难易度来看明显没有优势,如果函数库更新,需要重新编译。
1.2 动态函数库动态函数库的扩展名⼀般为(.so或.dll),这类函数库通常名为libxxx.so或xxx.dll 。
与静态函数库被整个捕捉到程序中不同,动态函数库在编译的时候,在程序⾥只有⼀个“指向”的位置⽽已,也就是说当可执⾏⽂件需要使⽤到函数库的机制时,程序才会去读取函数库来使⽤;也就是说可执⾏⽂件⽆法单独运⾏。
这样从产品功能升级⾓度⽅便升级,只要替换对应动态库即可,不必重新编译整个可执⾏⽂件。
1.3总结从产品化的⾓度,发布的算法库或功能库尽量使动态库,这样⽅便更新和升级,不必重新编译整个可执⾏⽂件,只需新版本动态库替换掉旧动态库即可。
从函数库集成的⾓度,若要将发布的所有⼦库(不⽌⼀个)集成为⼀个动态库向外提供接⼝,那么就需要将所有⼦库编译为静态库,这样所有⼦库就可以全部编译进⽬标动态库中,由最终的⼀个集成库向外提供功能。
2.qmake⽅式⽣成和调⽤动态/静态库链接:https:///lywzgzl/article/details/428059912.1 ⽣成库QT -= guiTARGET = laser_libTEMPLATE = libCONFIG += staticlib #加这句是⽣成静态库,不加则是动态库DEFINES += LASER_LIB_LIBRARYDEFINES += QT_DEPRECATED_WARNINGSLIBS += /usr/lib/x86_64-linux-gnu/libboost_thread.so\/usr/lib/x86_64-linux-gnu/libboost_system.soSOURCES += \laser_lib.cppHEADERS += \laser_lib.h \laser_lib_global.hinclude(LMS1xx/LMS1xx.pri)DESTDIR = $$PWD/../Libunix {target.path = /usr/libINSTALLS += target}2.2 调⽤库QT -= guiCONFIG += c++11 consoleCONFIG -= app_bundleDEFINES += QT_DEPRECATED_WARNINGS#增加系统库的依赖LIBS +=/usr/lib/x86_64-linux-gnu/libboost_thread.so\/usr/lib/x86_64-linux-gnu/libboost_system.so#增加⾃定义库的依赖LIBS += -L$$PWD/../Lib -llaser_lib #$$PWD获取当前pro⽂件的⽬录INCLUDEPATH += ../laser_libSOURCES += main.cppDESTDIR = $$PWD/../Lib3.cmake⽅式⽣成和调⽤动态库3.1创建共享库项⽬Cmake新建⼀个Qt Creator项⽬,在CMakeLists.txt中添加如下代码#-------------------------------------- 搜索软件包 --------------------------------------find_package(Qt5Widgets REQUIRED)find_package(Qt5Network REQUIRED)set(CMAKE_AUTOMOC ON)#-------------------------------------- 包含头⽂件 --------------------------------------include_directories(${Qt5Widgets_INCLUDE_DIRS})include_directories(${Qt5Network_INCLUDE_DIRS})include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)#-------------------------------------- -添加项⽬- --------------------------------------FILE(GLOB_RECURSE HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h*)FILE(GLOB_RECURSE SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.c*)add_library(${PROJECT_NAME} SHARED${HEADER_FILES}${SOURCE_FILES}) #STATIC or SHARED 对应静态库或者动态库target_link_libraries(${PROJECT_NAME}${Qt5Widgets_LIBRARIES}${Qt5Network_LIBRARIES})#-------------------------------------- -设置输出- --------------------------------------set(OUTPUT_LIB_DIR ${PROJECT_BINARY_DIR}/libCACHE PATH "Output directory for libraries")file(MAKE_DIRECTORY ${OUTPUT_LIB_DIR})file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/${PROJECT_NAME})set(LIBRARY_OUTPUT_PATH ${OUTPUT_LIB_DIR})#-------------------------------------- -安装项⽬- --------------------------------------install(TARGETS ${PROJECT_NAME}EXPORT ${PROJECT_NAME}LIBRARY DESTINATION ${LIBRARY_OUTPUT_PATH})按需编辑plugintest.h和plugintest.cpp,这个就是该共享库项⽬的plugintest类了,我加⼊了⼀个int sum(int input1, int input2);公共函数,内容为:int Plugintest::sum(int input1, int input2){std::cout<<"Hello World!"<<std::endl;int sum = input1+input2;return sum;}保存并编译项⽬吧,没问题的话会在plugintest-build/lib⽬录⾥⽣成libplugintest.so。
QT动态库的编写和调用
QT动态库的编写和调⽤⼀、VS版本重点:(1)新建⼀个库⽂件项⽬,在项⽬⽂件夹中新建lib⽂件夹和include⽂件夹(2)指定该库⽂件项⽬的lib⽂件和include⽂件路径(3)主项⽬中添加库⽂件项⽬的lib⽂件和inlcude⽂件路径(4)添加头⽂件调⽤(1)新建项⽬1.选择项⽬类型为库⽂件【Qt Class Library】2.选择动态库需要的模块3.新建⼀个类4.新建的⽂件如下,并将第⼀级XViewLib更名为qt-common以便区分(2)新建lib⽂件夹和include⽂件夹1.新建lib⽂件夹,存放库⽂件供主项⽬使⽤2.在XViewLib项⽬中新建include⽂件夹,将项⽬的头⽂件都放到⾥⾯,供主项⽬使⽤3.将头⽂件移⼊include⽂件夹后,需将解决⽅案中的头⽂件重新加载:先移除,再到include⽂件夹中添加(3)XViewLib项⽬的属性页1.设置库⽂件的输出⽬录和名称2.XViewLib⽣成后会在主项⽬中⽣成.dll⽂件3.⽣成XViewLib的库⽂件4.添加上⾯新建的include头⽂件路径5.修改库⽂件名称,Debug版后加d6.将项⽬⽣成的lib⽂件输出到刚新建的lib⽂件夹中,供主项⽬使⽤(4)主项⽬DeviceClient的属性页1.输出⽬录和名称2.添加XViewLib项⽬中的include头⽂件路径3,添加XViewLib项⽬中的lib⽂件夹路径4.添加lib⽂件(5)整个解决⽅案的属性页(6)主项⽬调⽤XViewLib中的类1.添加头⽂件主项⽬调⽤XViewLib项⽬中的类时,需添加XViewLib项⽬中的头⽂件2.调⽤其中的类3.需要添加类时1》要在class后添加宏定义XVIEWLIB_EXPORT2》将新建类的头⽂件放到include⽂件夹中,再在解决⽅案中重新加载该头⽂件。
⼤功告成。
Qt技巧:QProcess与外部程序的调用
Qt技巧:QProcess与外部程序的调⽤项⽬做到⼀定阶段,常常须要在原来的project上调⽤外部程序。
Qt为此提供了QProcess类,QProcess可⽤于完毕启动外部程序,并与之交互通信。
⼀、启动外部程序的两种⽅式:(1)⼀体式:void QProcess::start(const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite)外部程序启动后。
将随主程序的退出⽽退出。
(2)分离式:void QProcess::startDetached(const QString & program, const QStringList & arguments, const QString & workingDirectory = QString(), qint64 * pid = 0)外部程序启动后,当主程序退出时并不退出。
⽽是继续执⾏。
值得注意的是。
当程序路径中含有空格的时候,仅设置程序路径program是⽆法被识别的。
解决⽅法是再将程序路径传递给arguments。
⽐如:⼆、启动之前须要做的⼯作:To start a process, pass the name and command line arguments of the program you want to run as arguments to start(). Arguments are supplied as individual strings in a QStringList.启动⼀个外部程序,须要传递外部程序的路径和运⾏參数。
參数⽤QStringList来带⼊。
(1)设置路径:void QProcess::setProgram(const QString & program)(2)设置參数[可选]:void QProcess:: setArguments(const QStringList & arguments)(3)启动:void QProcess::start(OpenMode mode = ReadWrite)Qt官⽅⾃带的样例:事实上。
QT调用mplayer(转) - scutLiu的专栏 - CSDN博客
QT调用mplayer(转) - scutLiu的专栏- CSDN博客scutLiu的专栏To Be A Better Man!条新通知登录注册欢迎退出我的博客配置写文章文章管理博客首页全站当前博客空间博客好友相册留言用户操作[留言] [发消息] [加为好友]狼的图腾ID:scutLiu共2693次访问,排名2万外,好友10人,关注者10人。
狼的图腾的文章原创17 篇翻译0 篇转载36 篇评论4 篇订阅我的博客[编辑]scutLiu的公告学无止境![编辑]文章分类C/C++/C#Linux内核/应用开发Open SourceQT设计模式数据库编程随笔他山之石行业应用存档2010年08月(3)2010年07月(3)2010年06月(13)2010年05月(11)2010年04月(7)2010年03月(7)2010年02月(3)2010年01月(6)公告:[意见反馈][官方博客] QT调用mplayer(转) 收藏转自/aoxuehan424/blog/item/348888c45b186bc138db49d7.html暂时知道播放歌曲。
安装mplayer,之后目录下会有个mplayer-core.exe 提取出来。
放到源码下面。
代码:QProcess *mplayerProcess = new QProcess(this); QString exefile = "mplayer-core.exe";QStringList arg;// arg << "-slave";// arg << "-quiet";// arg << "-idle"; 如果想不播放歌曲的时候就退出mplayer,那么这个参数不要加arg << "D:/temp/PhonoTest/PhonoTest/1.mp3"; mplayerProcess->start(exefile,arg);这个文件有12.9M。
基于MPlayer的KTV系统的设计与实现
基于MPlayer的KTV系统的设计与实现张乃千【期刊名称】《电脑开发与应用》【年(卷),期】2013(000)004【摘要】介绍了MPlayer和Qt的开发环境以及体系结构,并在此基础上给出了将MPlayer嵌入至Qt平台的一种详细过程。
通过利用Linux平台下声卡全双工工作的模式和方法,基于ALSA体系结构,设计了KTV系统的主要功能,实现了利用Qt编程语言通过后台调用MPlayer程序实现在Linux平台部署KTV系统的应用。
%First, this paper introduces MPlayer and the developing environment of Qt, meanwhile, the author analyses the architecture of the transplantation of MPlayer. On the basis of that the paper introduces the process of the transplantation of MPlayer to Qt platform in detail. Using the model and method of full duplex on sound card, based on the architecture of ALSA, the paper finally designs the major function of KTV system and achieves the implementation of KTV system disposed on Linux based on MPlayer using background written by Qt platform.【总页数】4页(P75-78)【作者】张乃千【作者单位】国防科学技术大学光电科学与工程学院,长沙 410073【正文语种】中文【中图分类】TP319【相关文献】1.基于MPLAYER的RTSP客户端设计与实现 [J], 白勇;卿粼波;何小海2.基于Mplayer的嵌入式流媒体播放器的设计与实现 [J], 闻连臣;段晓辉;郭跃超;张振3.KTV点歌系统的设计与实现 [J], 乔飞飞4.基于C/S模式的KTV点歌系统的研究 [J], 周俊平5.基于C#的KTV点歌系统的设计与实现 [J], 王琴因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
QT调用mplayer(转) - scutLiu的专栏- CSDN博客scutLiu的专栏To Be A Better Man!条新通知登录注册欢迎退出我的博客配置写文章文章管理博客首页全站当前博客空间博客好友相册留言用户操作[留言] [发消息] [加为好友]狼的图腾ID:scutLiu共2693次访问,排名2万外,好友10人,关注者10人。
狼的图腾的文章原创17 篇翻译0 篇转载36 篇评论4 篇订阅我的博客[编辑]scutLiu的公告学无止境![编辑]文章分类C/C++/C#Linux内核/应用开发Open SourceQT设计模式数据库编程随笔他山之石行业应用存档2010年08月(3)2010年07月(3)2010年06月(13)2010年05月(11)2010年04月(7)2010年03月(7)2010年02月(3)2010年01月(6)公告:[意见反馈][官方博客] QT调用mplayer(转) 收藏转自/aoxuehan424/blog/item/348888c45b186bc138db49d7.html暂时知道播放歌曲。
安装mplayer,之后目录下会有个mplayer-core.exe 提取出来。
放到源码下面。
代码:QProcess *mplayerProcess = new QProcess(this); QString exefile = "mplayer-core.exe";QStringList arg;// arg << "-slave";// arg << "-quiet";// arg << "-idle"; 如果想不播放歌曲的时候就退出mplayer,那么这个参数不要加arg << "D:/temp/PhonoTest/PhonoTest/1.mp3"; mplayerProcess->start(exefile,arg);这个文件有12.9M。
完全提取??暂时不明确。
参数怎么加?暂时不明确、通过定义一个QProcess对象调用已编译好的Mplayer。
QProcess *process = new QProcess();process->setProcessChannelMode(QProcess::Merged Channels);Process->start(“mplayer –ac–mad xxxxx”);在命令中添加-slave 和-quiet就可以通过命令设置Mplayer实现相应的功能。
在mplayer源码中的,slave.txt 中对这些命令有详细的Process->start(“mplayer –slave–quiet –ac –mad xxxxx”);1.暂停功能:通过如下代码可以设置Mplayer暂停。
process->write(“pause\n”);执行这段代码的时候如果是播放状态就会暂停,暂停状态时就会继续播放。
2.获取播放文件的总时间和当前播放进度。
执行下面代码时,Mplayer将时间在标准输出显示。
process->write("get_time_pos\n");process->write("get_time_length\n");通过如下代码即可读出我们需要的信息:connect(process,SIGNAL(readyReadStandardOutput()),thi s,SLOT(back_message_slots()));process有可读取的信息时,发出信号,在槽函数back_message_slots()中读取信息。
void MPlayer::back_message_slots(){while(process->canReadLine()){QString message(process->readLine());//message即为读取的信息我们可以根据需要取我们要的信息如//文件总时间为:ANS_LENGTH=23.00//当前时间为:ANS_TIME_POSITION=23.00}}3.快进功能seek [type]Seek to some place in the movie0 is a relative seek of +/- seconds (default).1 is a seek to % in the movie.2 is a seek to an absolute position of seconds.下面代码即可实现快进功能:process->write(“seek ** 1\n”);4.音量调节volume [abs]Increase/decrease volume or set it to if [abs] is nonzero.下面代码即可实现快进功能:Process->write(“volume -1\n”); //音量减小Process->write(“volume +1\n”); //音量增加5.静音功能mute [value]Toggle sound output muting or set it to [value] when [value] >= 0(1 == on, 0 == off).下面代码即可实现快进功能:process->write("mute 0\n"); //开启静音process->write("mute 1\n"); //关闭静音6.定位视频窗口通过上面的代码基本功能实现了,可是播放视频的时候发现又弹出一个窗口。
并没有出现在我们的窗口里。
如下代码即可时间窗口的定位。
QString common = "mplayer -slave -quiet -ac mad-zoom movie/" + file_name + " -wid " +QString::number(widget->winId());process->start(common);红色部分实现串口的定位。
Widget是一个QWidget对象。
通过winId可以获得一个数字,-wid既将视频输出定位到widget窗体部件中。
注意:-wid参数只在X11、directX和OpenGL中适用。
发表于@ 2010年04月08日23:00:00 | 评论( 0 ) | 编辑| 举报| 收藏旧一篇:QT4 自定义槽和信号(转) | 新一篇:程序中菜单项可见性控制不能实时生效查看最新精华文章请访问博客首页相关文章[随手记]EMBED tag usagePHP - XML - Recursively process an XML document.Qt编写Mplayer前端程序android java代码的启动:app_process在线播放FTP资源Qt 调用mplayer视频mplayer slave 模式文档翻译QT调用mplayer发表评论表情:评论内容:用户名:登录注册匿名评论匿名用户验证码:重新获得验证码热门招聘职位【支付宝】2010支付宝技术专场招聘【东方通】中间件第一品牌:高薪.急聘!【百度】诚聘Web研发/工程师【上海我友】福利购房计划+高薪+期权,邀您共创互联网的奇迹!【艾瑞威尔】高薪诚募Apple游戏开发工程师一流环境+一流待遇【支付宝】诚聘技术精英【CSDN】招聘:Ruby 工程师、Java搜索工程师、运营编辑、兼职编辑北京明天高软科技测试工程师北京明天高软科技有限公司高级java工程师北京明天高软科技JAVA开发工程师【惠普】研发中心诚聘R&D TechLead(LoadRunner or QTP)北京明天高软科技高级需求分析师【支付宝】2010支付宝技术专场招聘【东方通】中间件第一品牌:高薪.急聘!【百度】诚聘Web研发/工程师【上海我友】福利购房计划+高薪+期权,邀您共创互联网的奇迹!【艾瑞威尔】高薪诚募Apple游戏开发工程师一流环境+一流待遇【支付宝】诚聘技术精英【CSDN】招聘:Ruby 工程师、Java搜索工程师、运营编辑、兼职编辑北京明天高软科技测试工程师北京明天高软科技有限公司高级java工程师北京明天高软科技JAVA开发工程师【惠普】研发中心诚聘R&D Tech Lead(LoadRunner or QTP)北京明天高软科技高级需求分析师本文来自CSDN博客,转载请标明出处:/scutLiu/archive/2010/04/09/5464998.a spx。