qt学习:mplayer播放器(视频)+arm如何播放视频实战

2024-02-04 05:52

本文主要是介绍qt学习:mplayer播放器(视频)+arm如何播放视频实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作用

可以播放视频和音频

linux下载

sudo apt install mplayer

arm下载

由于arm版本qt没有多媒体模块,只能使用第三方播放器(mplayer或者madplay),对于arm平台而言,它就相当于一个可执行文件,可以当做命令来使用,在linux下可以使用system函数来执行mplayer,将播放音乐的命令集成到程序中,在qt中把mplayer当做是一个进程QProoess,那么,可以使用它来播放音乐

  1. 下载mplayer源码,进行交叉编译配置生成一个程序,一般都有现成的
  2. 将程序放到板子上的/bin目录下加权限
  3. 添加环境

使用方法

进程

  • mplayer xxx,xxx是播放的视频,可以通过键盘来控制

命令

  • mplayer -slave -quiet xxx,xxx是播放的视频
    • -slave是表示用命令的方式
    • -quiet是表示不输出多余的信息
  • 进入之后可以输入命令词来进行控制视频

命令词有很多,举例几个

  • pause是暂停/播放
  • seek xx快进xx秒,如果是负数就是后退
  • get_time_length返回播放文件的长度,多少秒
  • get_file_name返回当前播放文件的名字
  • get_meta_year返回当前播放文件的年份

在arm上qt实战

在linux上用交叉编译后将可执行文件放到开发板上,再安装第三方播放器,就可以运行了

配置ui界面

添加头文件,成员,函数

#include <QProcess>
#include <QListWidgetItem>
#include <QFileDialog>
#include <QDebug>
#include <QThread>
#include <QTime>
#include <QPoint>private:QProcess *m_process;//进程指针int index;//歌曲索引

添加视频按钮点击事件

    //弹出选择文件对话框,并返回选择文件的路径QStringList lists = QFileDialog::getOpenFileNames(this,"add video","","video file (*.mp4 *.MP4 *.avi)");//将添加的文件显示到列表上for(int i=0; i<lists.size(); i++){//新建一个选项QListWidgetItem *item = new QListWidgetItem;//选项设置图标item->setIcon(QIcon(":/new/prefix1/pic/video.png"));//将路径名字写入选项item->setText(lists.at(i).toLocal8Bit());//将选项加入到列表上ui->listWidget->addItem(item);}

列表选项双击事件

    //获取列表的第几首歌曲index = ui->listWidget->currentRow();//并执行播放on_btn_player_clicked();

播放按钮点击事件

    //先停止当前视频on_btn_stop_clicked();//获取并打印显示视频的控件的全局坐标和长宽int posX = ui->label_videoShow->mapToGlobal(QPoint(0, 0)).x();int posY = ui->label_videoShow->mapToGlobal(QPoint(0, 0)).y();int width = ui->label_videoShow->width();int height = ui->label_videoShow->height();qDebug()<<"geometry posX:"<<posX<<"\tgeometry posY:"<<posY;qDebug()<<"width:"<<width<<"\theight:"<<height;//组合视频播放字符串命令QString cmd = QString::fromLocal8Bit("mplayer  -slave -quiet -geometry %1:%2  -zoom -x %3 -y %4 %5 &").arg(posX).arg(posY).arg(width).arg(height).arg(ui->listWidget->item(index)->text());//视频名字//通过进行来运行命令m_process->start(cmd.toLocal8Bit().data());//get_time_length返回播放文件的长度,以秒为单位   ANS_LENGTH=264.00m_process->write("get_time_length\n");//关联当进程运行命令的后返回结果时就会发出readyRead信号,会执行onRecvData槽函数//等于执行ls命令获取目录,当ls命令产生任何输出时,就会发出readyRead信号connect(m_process,&QProcess::readyRead,this,&MainWindow::onRecvData);

暂停继续按钮点击事件

     //向进程写入命令m_process->write("pause\n");

停止按钮点击事件

    //判断进程是否在运行,在运行就杀死进程if(m_process->state() == QProcess::Running){m_process->kill();}//等待直到子进程完成其工作或遇到错误并退出m_process->waitForFinished();

上一首按钮点击事件

    //将索引加一index = --index < 0 ? (ui->listWidget->count()-1) :index;//并执行播放on_btn_player_clicked();

下一首按钮点击事件

    //ui->listWidget->count();返回列表有多少哥选项//将索引加一index = ++index % ui->listWidget->count();//并执行播放on_btn_player_clicked();

快进按钮点击事件

     //向进程写入命令m_process->write("seek +10\n");

快退按钮点击事件

     //向进程写入命令m_process->write("seek -10\n");

静音按钮点击事件

    //向进程写入命令m_process->write("mute\n");

音量滑动条拖动事件

    //显示当前播放的音量数值ui->label_volumeValue->setText(QString::fromLocal8Bit("当前音量:%1").arg(position));

运行命令返回结果的槽函数

//运行命令的后的槽函数
void MainWindow::onRecvData()
{//获取并打印运行命令返回的数据QString data = m_process->readAll();qDebug()<<data;//从 m_process 读取的数据中是否包含字符串 "ANS_LENGTH"。如果包含,说明数据中包含了文件的时间长度信息//获取文件时间长度  ANS_LENGTH=264.00if(data.contains("ANS_LENGTH")){//返回来的时间长度是浮点型,必须转成浮点型,如果转成int 会转换失败bool ok;//首先移除 "ANS_LENGTH=" 字符串和换行符再转为浮点型double timeLength = data.remove("ANS_LENGTH=").remove("\n").toDouble(&ok);//判断有没有获取到数据if(ok){//创建一个时间对象,从0开始QTime timeFormat(0,0,0);//加入前面获取到的文件时间长度timeFormat = timeFormat.addSecs(timeLength);//显示时间长度ui->label_timeLength->setText(timeFormat.toString());//设置 时间长度滑动进度条的最大值为时间长度ui->horizontalSlider_seek->setMaximum(timeLength);}else{qDebug()<<"string to double error";}}
}

这篇关于qt学习:mplayer播放器(视频)+arm如何播放视频实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/676519

相关文章

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

使用Python实现文本转语音(TTS)并播放音频

《使用Python实现文本转语音(TTS)并播放音频》在开发涉及语音交互或需要语音提示的应用时,文本转语音(TTS)技术是一个非常实用的工具,下面我们来看看如何使用gTTS和playsound库将文本... 目录什么是 gTTS 和 playsound安装依赖库实现步骤 1. 导入库2. 定义文本和语言 3

Python实战之屏幕录制功能的实现

《Python实战之屏幕录制功能的实现》屏幕录制,即屏幕捕获,是指将计算机屏幕上的活动记录下来,生成视频文件,本文主要为大家介绍了如何使用Python实现这一功能,希望对大家有所帮助... 目录屏幕录制原理图像捕获音频捕获编码压缩输出保存完整的屏幕录制工具高级功能实时预览增加水印多平台支持屏幕录制原理屏幕