




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
tk中调用Mplayer一、Mplayer1. 什么是Mplayerplayer是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 Integeredl_mark audio_delay Float Integerspeed_incr Floatspeed_mult Floatspeed_set Floatquit Integerpause frame_step pt_step Integer Integerpt_up_step Integer Integeralt_src_step Integerloop Integer Integersub_delay Float Integersub_step Integer Integerosd Integerosd_show_text String Integer Integerosd_show_property_te String Integer Integervolume Float Integerbalance Float Integeruse_master mute Integercontrast Integer Integergamma Integer Integerbrightness Integer Integerhue Integer Integersaturation Integer Integerframe_drop Integersub_pos Integer Integersub_alignment Integersub_visibility Integersub_load Stringsub_remove Integervobsub_lang Integersub_select Integersub_log sub_scale Float Integerget_percent_pos get_time_pos get_time_length get_file_name get_video_codec get_video_bitrate get_video_resolutionget_audio_codec get_audio_bitrate get_audio_samples get_meta_title get_meta_artist get_meta_album get_meta_year get_meta_comment get_meta_track get_meta_genre switch_audio Integertv_start_scan tv_step_channel Integertv_step_norm tv_step_chanlist tv_set_channel Stringtv_last_channel tv_set_freq Floattv_step_freq Floattv_set_norm Stringtv_set_brightness Integer Integertv_set_contrast Integer Integertv_set_hue Integer Integertv_set_saturation Integer Integerforced_subs_only Integerdvb_set_channel Integer Integerswitch_ratio Floatvo_fullscreen Integervo_ontop Integerfile_filter Integervo_rootwin Integervo_border Integerscreenshot Integerpanscan Float Integerswitch_vsync Integerloadfile String Integerloadlist String Integerrun Stringchange_rectangle Integer Integerget_vo_fullscreen get_sub_visibility key_down_event Integerset_property String Stringget_property Stringstep_property String Float Integerseek_chapter Integer Integerset_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、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) player播放的媒体与其它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发送控制命令时需
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国改性C9石油树脂行业市场分析及投资价值评估前景预测报告
- 02 第8讲 牛顿第二定律的基本应用 【答案】作业手册
- 2025年中国分子筛湿度控制产品行业市场分析及投资价值评估前景预测报告
- Revision 4教学设计-2025-2026学年小学英语一年级上册牛津上海版(深圳用)
- 18.1微生物在生物圈中的作用说课稿2023-2024学年北师大版生物八年级上册
- 湖北省武汉市高中地理 第一章 行星地球 1.1 宇宙中的地球说课稿 新人教版必修1
- 1.1 网络与生活说课稿高中信息技术人教中图版2019选修2 网络基础-人教中图版2019
- 浙教版科学八上1.1 地球上的水 说课稿
- 保命知识点培训时间安排课件
- 高二历史汇考试卷及答案
- 2025四川数据集团有限公司第二批员工招聘3人笔试历年参考题库附带答案详解
- 2025年甘肃省天水市供热有限公司招聘12人笔试历年参考题库附带答案详解
- 2025年一卷政治高考真题及答案
- 厨房火灾安全培训教材课件
- 临时工工伤私了协议书
- 人工造林项目投标方案(技术方案)
- 微生物与单细胞蛋白
- 江苏开放大学2024年春《公文写作与处理 050008》第一次作业(占平时成绩的20%)参考答案
- 冠心病PCI术后康复策略
- 通勤车租赁投标方案(技术标)
- 脲的合成方法总结
评论
0/150
提交评论