您当前的位置: 首页 >  音视频

风间琉璃•

暂无认证

  • 1浏览

    0关注

    337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Linux之音视频入门

风间琉璃• 发布时间:2022-08-30 11:03:36 ,浏览量:1

目录

一、madplay

1.madplay指令

 2.mdaplay编程

二、mplayer

1.mplayer指令

2.mplayer编程

 三、ALSA

1.ALSA简介

2.ALSA编程

一、madplay 1.madplay指令

madplay是一个开源的音频播放器,可以播放各种音乐格式的音频文件。

Ubuntu中madplay的安装命令:

sudo apt-get update sudo apt-get install madplay

播放指令:

madplay 音频文件路径

参数介绍:

设置音量:-a -175 ~ +18(播放时按+/-调节)

显示播放的时间:-v

循环播放:-r

传入多个音频文件:

         随机播放:-z

        上一首/下一首:b/f

控制madplay播放命令

开始: madplay 音频文件路径 &

停止: killall -KILL madplay &

暂停: killall -STOP madplay &

继续: killall -CONT madplay & 

 2.mdaplay编程

在Qt程序中启动进程(QProcess)播放madplay。

QProcess相关介绍:

start :启动

kill :停止

waitForFinished :等待结束

state:状态

excute(命令,参数):停止进程执行的内容等待执行完指定程序后继续执行原内容

 ui布局:

 musicplayer.h文件

#ifndef MUSICPLAYER_H
#define MUSICPLAYER_H

#include 
#include 
#include 

QT_BEGIN_NAMESPACE
namespace Ui { class MusicPlayer; }
QT_END_NAMESPACE

class MusicPlayer : public QWidget
{
    Q_OBJECT

public:
    MusicPlayer(QWidget *parent = nullptr);
    ~MusicPlayer();

private slots:
    void on_pushButton_play_clicked();

    void on_pushButton_cancel_clicked();

    void on_pushButton_addmusic_clicked();

    void on_pushButton_deletemusic_clicked();

    void on_pushButton_clearmusic_clicked();

    void on_pushButton_stop_cont_clicked();

    void on_pushButton_prev_clicked();

    void on_pushButton_next_clicked();

    void on_listWidget_itemDoubleClicked(QListWidgetItem *item);

private:
    Ui::MusicPlayer *ui;
    QProcess *p;
    //记录正在播放的音乐
    QString current_music;
};
#endif // MUSICPLAYER_H

musicplayer.cpp文件

#include "musicplayer.h"
#include "ui_musicplayer.h"
#include 

MusicPlayer::MusicPlayer(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MusicPlayer)
{
    ui->setupUi(this);

    p = new QProcess(this);
}

MusicPlayer::~MusicPlayer()
{
    if(p->state()==QProcess::Running){
        p->kill();
        p->waitForFinished();
    }

    delete ui;
}

//播放
void MusicPlayer::on_pushButton_play_clicked()
{
    //只有没有运行才开始播放
    if(p->state()==QProcess::Running){
        p->kill();
        p->waitForFinished();
    }

    QString cmd = QString("madplay");
    QStringList args;//参数

    current_music = ui->listWidget->currentItem()->text();
    argspushButton_stop_cont->setEnabled(true);
}

//停止
void MusicPlayer::on_pushButton_cancel_clicked()
{
    if(p->state()==QProcess::Running){
        p->kill();
        p->waitForFinished();
    }

    ui->pushButton_stop_cont->setText("暂停");
    ui->pushButton_stop_cont->setEnabled(false);
}

//添加音乐
void MusicPlayer::on_pushButton_addmusic_clicked()
{
    QStringList music_files = QFileDialog::getOpenFileNames(this,"选择音乐文件","/music","*.mp3 *.WAV");

    //去重
    for(int i=0;ilistWidget->count();i++){
        for(int j=0;jlistWidget->item(i)->text()==music_files.at(j)){
                music_files.removeAt(j);
                break;
            }
        }
    }

    //如果无添加文件,直接返回
    if(music_files.isEmpty())
        return;

    //添加到listWidget
    ui->listWidget->addItems(music_files);
    //定位
    ui->listWidget->setCurrentRow(0);
}

//删除音乐
void MusicPlayer::on_pushButton_deletemusic_clicked()
{
    int row = ui->listWidget->currentRow();
    //取出一项
    QListWidgetItem *item = ui->listWidget->takeItem(row);
    //删除的是正在播放的歌曲,停止播放
    if(item->text()==current_music){
        on_pushButton_cancel_clicked();
    }

    if(item){
        delete item;
    }
}

//清空
void MusicPlayer::on_pushButton_clearmusic_clicked()
{
    ui->listWidget->clear();

    on_pushButton_cancel_clicked();
}

//暂停
void MusicPlayer::on_pushButton_stop_cont_clicked()
{
    QString cmd = "killall";
    QStringList args;

    if(ui->pushButton_stop_cont->text()=="暂停"){
        argslistWidget->currentRow();
    if(row==ui->listWidget->count()-1)
        row = 0;
    else
        row++;

    ui->listWidget->setCurrentRow(row);

    //播放下一首
    on_pushButton_play_clicked();
}

void MusicPlayer::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
    //只有没有运行才开始播放
    if(p->state()==QProcess::Running){
        p->kill();
        p->waitForFinished();
    }

    QString cmd = QString("madplay");
    QStringList args;//参数

    current_music = item->text();
    argspushButton_stop_cont->setEnabled(true);
}
二、mplayer 1.mplayer指令

mplayer是一个免费开源的视频播放器,视频播放器提供视频解码并播放的功能,支持各种常见格式的视频,用法和madplay类似。

使用指令:

mplayer 视频文件路径

参数:

-quiet : 输出变化信息

-slave :后台命令处理模式

-geometry :指定播放位置(开发板无效)

-zoom -x ** -y ## :指定播放分辨率

-af volume=xxx :设置音量(-200 ~ +60)

2.mplayer编程

使用Qt界面控制mplayer,和控制madplay一样,唯一的区别是需要预留播放视频图像的区域。

ui布局

 mymplayer.h

#ifndef MYMPLAYER_H
#define MYMPLAYER_H

#include 
#include 
#include 

QT_BEGIN_NAMESPACE
namespace Ui { class MyMplayer; }
QT_END_NAMESPACE

class MyMplayer : public QWidget
{
    Q_OBJECT

public:
    MyMplayer(QWidget *parent = nullptr);
    ~MyMplayer();

private slots:
    void on_pushButton_addvideo_clicked();

    void on_pushButton_deletevideo_clicked();

    void on_pushButton_clearvideo_clicked();

    void on_pushButton_play_clicked();

    void on_pushButton_cancel_clicked();

    void on_pushButton_stop_cont_clicked();

    void on_pushButton_prev_clicked();

    void on_pushButton_next_clicked();

    void on_listWidget_itemDoubleClicked(QListWidgetItem *item);

private:
    Ui::MyMplayer *ui;
    QProcess *p;
    //记录正在播放的视频
    QString current_video;
};
#endif // MYMPLAYER_H

mymplayer.cpp

#include "mymplayer.h"
#include "ui_mymplayer.h"
#include 
#include 
#include 

MyMplayer::MyMplayer(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyMplayer)
{
    ui->setupUi(this);

    p = new QProcess(this);
}

MyMplayer::~MyMplayer()
{
    if(p->state()==QProcess::Running){
        p->kill();
        p->waitForFinished();
    }

    delete ui;
}

//添加视频
void MyMplayer::on_pushButton_addvideo_clicked()
{
    QStringList video_files = QFileDialog::getOpenFileNames(this,"选择视频文件","/video","*.mp4 *.avi");

    //去重
    for(int i=0;ilistWidget->count();i++){
        for(int j=0;jlistWidget->item(i)->text()==video_files.at(j)){
                video_files.removeAt(j);
                break;
            }
        }
    }

    //如果无添加文件,直接返回
    if(video_files.isEmpty())
        return;

    //添加到listWidget
    ui->listWidget->addItems(video_files);
    //定位
    ui->listWidget->setCurrentRow(0);
}

//删除视频
void MyMplayer::on_pushButton_deletevideo_clicked()
{
    int row = ui->listWidget->currentRow();
    //取出一项
    QListWidgetItem *item = ui->listWidget->takeItem(row);
    //删除的是正在播放的歌曲,停止播放
    if(item->text()==current_video){
        on_pushButton_cancel_clicked();
    }

    if(item){
        delete item;
    }
}

void MyMplayer::on_pushButton_clearvideo_clicked()
{
    ui->listWidget->clear();

    on_pushButton_cancel_clicked();
}

//播放
void MyMplayer::on_pushButton_play_clicked()
{
    //只有没有运行才开始播放
    if(p->state()==QProcess::Running){
        p->kill();
        p->waitForFinished();
    }

    QString cmd = QString("mplayer");
    QStringList args;//参数

    current_video = ui->listWidget->currentItem()->text();
    argslistWidget->count()-1)
        row = 0;
    else
        row++;

    ui->listWidget->setCurrentRow(row);

    //播放下一首
    on_pushButton_play_clicked();
}

//双击播放
void MyMplayer::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
    //只有没有运行才开始播放
    if(p->state()==QProcess::Running){
        p->kill();
        p->waitForFinished();
    }

    QString cmd = QString("mplayer");
    QStringList args;//参数

    current_video = item->text();
    args            
关注
打赏
1665385461
查看更多评论
0.0598s