raspberry pi播放音视频

目的

实现在树莓派下外接扬声器, 播放某段音频, 进行回音测试。

QMediaPlayer

首先我的安装是5.11版本。
优先想到的是通过Qt QMutilmedia 这个模块, 结果再通过QMediaPlayer 播放指定路径下文件。

结果不太理想, 报错 “defaultServiceProvider::requestService(): no service found for - “org.qt-project.qt.mediaplayer””

然后采取这篇博客defaultServiceProvider::requestService()建议

了解的思路是安装 gstreamer1.0, 然后ffmpeg, 单独下载qt源码进行安装编译 进行对应配置说明设置, 但由于本人比较懒, 这个就取消了,但最终也没怎么解决, 后续再看看验证此方法, 或者读者有更好方法, 或者已经验证此方法可行, 也请麻烦告知一下, 互相学习。

  1. 安装准备
 gstreamer1.0
 ffmpeg
 qt5

building-qt-515-lts-raspberry-pi-raspberry-pi-os

这篇博客说到 gstreamer multimedia framework support, 如下的在树莓派中都建议安装下。
在这里插入图片描述

  1. import module in pro
QT += multimedia multimediawidgets

Qt | 播放音频文件 QMediaplayer

注意事项:
当定义的QMediaPlayer对象正在播放一个音频文件时,再次调用setMedia()play(),会停止正在播放的音频文件,播放新设置的音频文件。
如果想同时播放两个音频文件,需要创建两个QMediaPlayer对象,同时进行播放。
重复new()delete()会造成崩溃。

GStreamer

what is GStreamer

what is gstreamer

适用于Android,iOS,macOS和Windows, linux 多平台。

GStreamer是一个用于构建图形的库 媒体处理组件。它支持的应用程序范围从简单 Ogg/Vorbis 播放,音频/视频流到复杂的音频(混音)和视频 (非线性编辑)处理。

应用可以利用编解码器和滤波器技术的进步 透明。开发人员可以通过编写 具有干净通用界面的简单插件

GStreamer是一个基于管道的多媒体框架,它将各种各样的媒体处理系统连接在一起,以完成复杂的工作流程。
例如,可以使用GStreamer构建一个系统,该系统读取一种格式的文件,处理它们,并以另一种格式导出它们。格式和过程可以以即插即用的方式进行更改。

GStreamer是一个开源的多媒体框架,主要用于创建媒体应用程序(流媒体、媒体回放、非线性编辑等)。GStreamer框架的设计目的是简化编写处理音频或视频或两者兼有的应用程序。它使用提供各种编解码器和其他功能的插件。

体系框架

在这里插入图片描述

优势

处理多媒体不是一件容易的事。因此,选择合适的框架来处理音频和视频流成为确保项目成功的关键。面对这一挑战的开发人员在选择正确的多媒体框架之前应该考虑以下因素:编码复杂性(架构)、跨平台支持、多媒体技术覆盖范围(编解码器、过滤器等)、文档和可用支持。

GStreamer在上述标准中表现出色:它的智能插件架构和全面的核心库使您的应用程序开发变得容易,并且它为您的许多需求提供了经过良好测试的元素。它可以在所有主要的操作系统上运行。Linux, Android, Windows, Max OS X, iOS),并运行在所有主要硬件架构上,包括x86, ARM, MIPS, SPARC。它有一个广泛的多媒体插件列表(编码器,解码器,内容过滤器……),而且它允许轻松集成第三方插件。最后,GStreamer为开发人员和大型社区提供了广泛且结构良好的文档,他们的贡献确保了该框架的持续改进。

omxplayer

what is omxplayer

omxplayer

OMXPlayer是你可以在树莓派上使用的最好的视频播放器之一,这要归功于它针对其硬件进行了优化。

Kodi团队最初开发这款软件是为了在Pi的硬件上运行视频。由于是专门为硬件设计的,所以它已经进行了大量优化。

更好的是,您可以从命令行使用OMXPlayer。这让你可以使用像Raspberry Pi OS Lite这样的轻量级操作系统,同时仍然可以运行视频。

command Line

Usage: omxplayer [OPTIONS] [FILE]
Options :
         -h / --help                    print this help
         -n / --aidx  index             audio stream index    : e.g. 1
         -o / --adev  device            audio out device      : e.g. hdmi/local
         -i / --info                    dump stream format and exit
         -s / --stats                   pts and buffer stats
         -p / --passthrough             audio passthrough
         -d / --deinterlace             deinterlacing
         -w / --hw                      hw audio decoding
         -3 / --3d mode                 switch tv into 3d mode (e.g. SBS/TB)
         -y / --hdmiclocksync           adjust display refresh rate to match video (default)
         -z / --nohdmiclocksync         do not adjust display refresh rate to match video
         -t / --sid index               show subtitle with index
         -r / --refresh                 adjust framerate/resolution to video
         -g / --genlog                  generate log file
         -l / --pos n                   start position (in seconds)
              --boost-on-downmix        boost volume when downmixing
              --vol n                   Set initial volume in millibels (default 0)
              --subtitles path          external subtitles in UTF-8 srt format
              --font path               subtitle font
                                        (default: /usr/share/fonts/truetype/freefont/FreeSans.ttf)
              --font-size size          font size as thousandths of screen height
                                        (default: 55)
              --align left/center       subtitle alignment (default: left)
              --lines n                 number of lines to accommodate in the subtitle buffer
                                        (default: 3)
              --win "x1 y1 x2 y2"       Set position of video window
              --audio_fifo  n           Size of audio output fifo in seconds
              --video_fifo  n           Size of video output fifo in MB
              --audio_queue n           Size of audio input queue in MB
              --video_queue n           Size of video input queue in MB

key bindings

z			Show Info
1			Decrease Speed
2			Increase Speed
j			Previous Audio stream
k			Next Audio stream
i			Previous Chapter
o			Next Chapter
n			Previous Subtitle stream
m			Next Subtitle stream
s			Toggle subtitles
d			Subtitle delay -250 ms
f			Subtitle delay +250 ms
q			Exit OMXPlayer
Space or p	Pause/Resume
-			Decrease Volume
+			Increase Volume
Left Arrow	Seek -30 s
Right Arrow	Seek +30 s
Down Arrow	Seek -600 s
Up Arrow	Seek +600 s

eg:

sudo omxplayer -p -o hdmi test_spk.WAV
如果是用qproces 开启命令, 对应退出omxplayer 播放可以通过qprocess->write("q"),  或者killall -9 omxplayer杀死进程 

killall

运行过程中错误

当时场景我是接口一个扬声器, 然后播放时候通过该扬声器播放声音。
出现了如下问题:

  1. 播放结果提示 have a nice day!
  2. 排除静音下情形下,播放没有声音出来

首先安装omxplayer, 上文到的gstreamer 中一些dev, alsa

sudo apt-get install omxplayer

在这里插入图片描述
然后再对应的ui操作界面 选择对应输入, 我那里选择AV Jack;

cmd 输入 alsamixer, 了解对应声卡

alsamixer

在这里插入图片描述
在如上图中按下F6, 选择对应的sound car, 由于Raspberry Pi最多具有三种音频输出方式:Master(PulseAudio card),HDMI (HDMI Card) ,以及耳机插孔(Headphone Card)。可以随时切换。
如果您的HDMI显示器或电视具有内置扬声器,则可以通过HDMI来播放音频,同时您可以将其切换到耳机或插入耳机插孔的其他扬声器。如果您的显示器有扬声器,则默认情况下会通过HDMI输出声音。如果不是,则通过耳机插孔输出。这可能不是期望的输出设置,或者自动检测不准确,在这种情况下,您可以手动切换输出。

而我是想通过过耳机插孔输出, 所以会选择Headphone.

树莓派输出声音

还有些说设置, 具体也不知道好不好使 gpu_mem

In the file 
/boot/config.txt
add the line 
gpu_mem=128

之前那种方案是参考ui‘交互去控制音量, 如下是在代码中去执行对应控制Av Jack播放音量控制, 在此之前 ,需要确认下有几种声卡.

cat /proc/asound/cards

然后借查看某个网卡命令, 去操作某个网卡对接参数

amixer help
//1 是指headphone 0 是hdmi, 这里Headphone Playback Volume 0-100% 并非是线性变化的(range (-10250 - 400))
amixer -c 1 cset   numid=1,iface=MIXER,name='Headphone Playback Volume'  400(0% 100%)
amixer set Master 70%
amixer -c 1 controls

ALSA

[ALSA]是Linux声音堆栈的最低级别。alsa-utils包已经安装在我正在使用的debian wheezy发行版(2012-12-16-wheezy-raspbian.zip)上。它提供了一些有用的命令:amixer, alsamixer, alsactl, aplay和speaker-test。

ALSA(高级Linux声音体系结构)是主要的Linux声音系统。pulse audio和Jack在ALSA上进行操作。
Alsamixer是一个基于终端的混音器控制。它是系统自带的,用于故障排除或检查声音运行。

Sound configuration on Raspberry Pi with ALSA

amixer

amixer__

amixer allows command-line control of the mixer for the ALSA soundcard driver. amixer supports multiple soundcards.

alsamixer是Linux音频架构ALSA中的Alsa工具的其中一个,用于配置音频的各个参数。
alsamixer是基于文本下的图形界面的,可以通过键盘的上下键,左右键等,很方便地设置需要的音量,开关某个switch(开关)等等操作。
amixer,是alsamixer的文本模式,即命令行模式,需要用amixer命令的形式去配置你的声卡的各个选项。

PulseAudio 是 POSIX 操作系统的声音服务器系统,这意味着它是您的声音应用程序的代理。它是所有相关现代 Linux 发行版不可或缺的一部分,被多个供应商用于各种移动设备。它在应用程序和硬件之间传递声音数据时对声音数据执行高级操作。诸如将音频传输到另一台机器、更改采样格式或通道数或将多个声音混合到一个输入/输出中等操作都可以使用 PulseAudio 轻松实现

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道阻且长,行则降至

无聊,打赏求刺激而已

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值