Linux 基于QT的mplayer视频播放器(实现进度条的拖动、播放列表等)

本项目利用QT和mplayer实现了一个音视频播放器,具备音量调节、播放进度控制、快进快退等功能。界面支持窗口缩放,通过QSlider组件控制播放位置。代码适用于Ubuntu 16.04和QT 5.9.1,包含详细的中文注释,可直接编译运行。
摘要由CSDN通过智能技术生成

UI随手做的,有点简陋
先放效果图:
在这里插入图片描述
功能:实现了音量的进度条,播放进度条,播放暂停,停止,快进快退等等,并且界面可以跟随窗口缩放。(进度条可拖动控制视频、音频)
下面界面视频的功能:
1、播放

用mplayer的播放slave模式
slave模式:接受以“\n”结束的命令控制,这样就可以直接发送命令来控制mplayer
play功能核心代码:
    QStringList arg1;

    this->process=new QProcess;
    arg1 << fileName;
    arg1 << "-slave";
    arg1 << "-quiet"; //不打印播放信息
    arg1 << "-zoom"; //视频居中,四周黑条,全屏播放
    arg1 << "-wid" << QString::number((unsigned int)(ui->widget->winId()));
             // "-wid" 是指让MPlayer显示在哪个窗口,ui->widget->winId() 获取widget的标识码 

    connect(this->process,SIGNAL(readyReadStandardOutput()),this,SLOT(dataReceive()));
    this->process->start(“/bin/mlpayer”,arg1);   //调用mplayer。开始进程

2、实现快进后退的功能:

void MainWindow::backSlot()//后退
{
    this->process->write("seek -1 0\n");

}
void MainWindow::forwardSlot()//快进
{
    this->process->write("seek +1 0\n");
}
其它的暂停、音量加减功能与此类似!具体看下面的mplayer常用命令调用

3、实现移动进度条控制播放位置,进度条通过Qslider套件实现

void MainWindow::on_horizontalSlider_sliderMoved(int position)
{
    this->process->write(QString("seek "+QString::number(position)+" 2\n").toUtf8());
}

后续再更新其它功能。

:mplayer的基本功能

get_audio_bitrate
    打印出当前文件音频比特率。

get_audio_codec
    打印出的音频当前文件的编解码器的名称。

get_audio_samples
    打印出的音频和当前文件的声道数。

get_file_name
    打印出当前文件名。

get_meta_album
    打印出当前文件的'专辑'的元数据。

get_meta_artist
    打印出当前文件的'艺术家'的元数据。

get_meta_comment
    打印出当前文件的'评论'的元数据。

get_meta_genre
    打印出当前文件的'流派'的元数据。

get_meta_title
    打印出当前文件的'标题'的元数据。

get_meta_track
    打印出当前文件的'音轨的数量'的元数据。

get_meta_year
    打印出当前文件的'年份'的元数据。

get_percent_pos
    打印出文件中的当前位置为整数百分比[0-100)。

get_property <property>
    打印出的属性的当前值。

get_sub_visibility
    打印出字幕能见度(1 ==开启,0 ==关闭)。

get_time_length
    打印出当前文件的长度用秒表示。

get_time_pos
    打印出在文件的当前位置用秒表示,采用浮点数。

get_vo_fullscreen
    全屏状态打印出来(1 == 全屏,0 ==窗口)。

get_video_bitrate
    打印出当前文件的视频比特率。

get_video_codec
    打印出当前视频文件的编解码器的名称。

get_video_resolution
    打印出当前文件的视频分辨率。

screenshot <value>
    截屏。要求屏幕过滤器加载。
        0以一个单独的截图。
        1启动/停止服用,每帧画面。

gui_[about|loadfile|loadsubtitle|play|playlist|preferences|skinbrowser|stop]
    图形用户界面行动

key_down_event <value>
    注入<value>到MPlayer的关键代码的事件。

loadfile <file|url> <append>
    加载给定的文件/网址,停止当前文件的播放/网址。
    如果是<append>非零继续播放和文件/网址
    追加到当前播放列表代替。

loadlist <file> <append>
    加载给定的播放列表文件,停止当前文件的播放。
    如果<append>是非零和继续播放文件,文件追加到当前播放列表。

loop <value> [abs]
    调整/设置怎样的电影应该是循环多次。 -1代表不循环,永远的0。

菜单命令>
    执行上显示OSD菜单命令。
        up 移动光标向上。
        down 移动光标向下。
        ok 接受的选择。
        cancel 取消选择。
        hide 隐藏的OSD菜单

set_menu <menu_name>
    显示菜单命名<menu_name>。

mute [value]
    切换声音输出静音或将其设置为[value](value>=0)
    (1 ==开启,0 ==关闭)。
    
osd [level]
    切换OSD模式或将其设置为[level]在[level]>= 0。

osd_show_property_text <string> [duration] [level]
    显示一项关于OSD扩展属性的字符串,看到-playing-msg 用于描述可用的扩展。如果[duration]>=0,显示为[duration]ms。 [level]设置所需的最低水平OSD该消息可见(默认是:0 -始终显示)。

osd_show_text <string> [duration] [level]
    查看OSD的<string>。

panscan <-1.0 - 1.0> | <0.0 - 1.0> <abs>
    增加或减少pan-and-scan的<value>的范围,1.0是最高的。
    负值降低pan-and-scan范围。
    如果<abs>!= 0,那么pan-and-scan范围被解释为绝对的范围。

pause
    暂停/取消暂停播放。

frame_step
    播放一帧,然后暂停。

pt_step <value> [force]
    转到下一个/上的播放树项。标志的<value>讲述
    该方向。如果没有项目可在给定的方向不会做任何事,除非[force]不为零。

pt_up_step <value>[force]
    类似pt_step,但跳转到下一个/父列表中的前一个项目。
    有助于摆脱在播放树内部循环。

quit [value]
    退出MPlayer。可选的整数[value]的值作为返回代码
    为mplayer的进程(默认值:0)。

radio_set_channel <channel>
    切换到<channel>。在‘channel’的广播参数需要设置。

radio_set_freq <frequency in MHz>
    设置广播频率调谐器。

radio_step_channel <-1|1>
    步向前(1)或向后(-1频道列表)。只有当'channel'的广播参数设置。

radio_step_freq <value>
    调整频率的<value>(正数 - 向上,负数 - 向下)。
    
seek <value> [type]
    定位电影的某些地方。
        0 是一个相对定位+/- <value>(默认值)。
        1 是定位<value>%在电影里。
        2 是寻求一个绝对位置的<value>秒。

seek_chapter <value> [type]
    定位一章的开始。
        0 是一个相对寻求+/- <value>章节(默认)。
        1 定位到<value>章。

switch_angle <value>
    转换ID为角度[value]。通过循环如果用角度[value]省略或负数。

set_mouse_pos<X> <y>
    告诉MPlayer的窗口中鼠标坐标。
    此命令不移动鼠标!

set_property <property> <value>
    设置属性。

speed_incr <value>
    增加<value>当前回放速度。

speed_mult <value>
    目前速度乘以<value>。

speed_set <value>
    设定速度为<value>。

step_property <property> [value] [direction]
    通过value来改变属性,或者,如果没给定或为0则增加默认值。如果小于零,方向是相反的方向。

stop
    停止播放。

本人QT版本5.9.1
Ubuntu系统版本是16.04。
mplayer是直接通过apt-get install下载的。
·===============================
补充:mplayer版本我当时也没看是多少,很久之前做的,环境都没保留。所以现在无法查看了。
有部分人是使用没有问题的,遇到问题先测试下mplayer是否正常,QT是否正常,有可能是环境的问题,还有开发版和Linux系统是不一样的,移植到开发版的话一般是有不少问题的,得自己去慢慢调通。
·=====================================
现在时间是2020.06.18
我重新搞了个虚拟机搭了下环境,播放是正常的。
如果有播放不正常的话,可能是下面这个参数没改,改成mplayer的正确路径,一般在/usr/bin/。
还有图片加载问题,路径改下就行,因为是随手做出来的demo,所以没考虑路径的问题。

arg = "/bin/mplayer";

在这里插入图片描述
我的mplayer版本如下:
在这里插入图片描述
--------------------假装我是分割线-------------------------------
源码下载地址:https://download.csdn.net/download/weixin_38890593/11268907
源码里面已经做好相应的较为详细中文注释。
直接通过QT点击pro文件编译运行就OK了!

补下百度网盘链接:链接:https://pan.baidu.com/s/1Q1j7_0QIejluOOD-Ezd-qQ
提取码:jk0r
没想到有不少人下载,都要16积分一次了,囧!太多了,有需要的直接拿百度盘资源就行哈!

评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值