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

相关文章

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.