当前位置: 首页 > news >正文

raspberry pi播放音视频

文章目录

    • 目的
    • QMediaPlayer
    • GStreamer
      • what is GStreamer
      • 体系框架
      • 优势
    • omxplayer
      • what is omxplayer
      • command Line
      • key bindings
      • 运行过程中错误
      • ALSA

目的

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

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.0ffmpegqt5

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

运行过程中错误

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

  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.

树莓派输出声音

选择Headphone 设置音量,

amixer set -c 0 Headphone 50

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

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

ALSA

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

ALSA(高级Linux声音体系结构)是主要的Linux声音系统。脉冲音频和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 轻松实现

相关文章:

raspberry pi播放音视频

文章目录目的QMediaPlayerGStreamerwhat is GStreamer体系框架优势omxplayerwhat is omxplayercommand Linekey bindings运行过程中错误ALSA目的 实现在树莓派下外接扬声器, 播放某段音频, 进行回音测试。 QMediaPlayer 首先我的安装是5.11版本。 优先…...

【电子学会】2022年12月图形化二级 -- 老鹰捉小鸡

老鹰捉小鸡 小鸡正在农场上玩耍,突然从远处飞来一只老鹰,小鸡要快速回到鸡舍中,躲避老鹰的抓捕。 1. 准备工作 (1)删除默认白色背景,添加背景Farm; (2)删除默认角色小…...

C++的双端队列

双端队列介绍1.双端队列知识需知2.大试牛刀1.双端队列知识需知 由于队列是一种先进先出(FIFO)的数据结构,因此无法直接从队列的底部删除元素。如果希望从队列的底部删除元素,可以考虑使用双端队列(deque)。…...

【独家】华为OD机试 - 拼接 URL(C 语言解题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...

为什么使用Junit单元测试?Junit的详解

Hi I’m Shendi 为什么使用Junit单元测试?Junit的详解 Junit简介 Junit是一个Java语言的单元测试框架。 单元测试是一个对单一实体(类或方法)的测试 JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression test…...

怎么学好嵌入式Linux系统和驱动

嵌入式专业是一门实践性非常强的学科,只有多动手,多实践,多编程,多调试,多看书,多思考才能真正掌握好嵌入式开发技术。 现在很多同学也意识到了学校培养模式和社会需求脱节问题,有一部分同学也先…...

Spring Aware总结

概述 Spring中Aware到底是什么意思? 我们在看Spring源码的时候,经常可以看到xxxAwarexxx的身影,通常我会很疑惑,Aware到底是什么意思呢? 比如图片中这些包含Aware关键字的类或者接口。 我对下面3个类或接口进行了解…...

【RocketMQ】源码详解:Broker端消息刷盘流程

消息刷盘 同步入口:org.apache.rocketmq.store.CommitLog.GroupCommitService 异步入口:org.apache.rocketmq.store.CommitLog.FlushRealTimeService 刷盘有同步和异步两种,在实例化Commitlog的时候,会根据配置创建不同的服务 p…...

编码器SIQ-02FVS3驱动

一.简介 此编码器可以是功能非常强大,可以检测左右转动,和按键按下,所以说这一个编码器可以抵三个按键,而且体积非常小,使用起来比三个按键要高大尚,而且驱动也简单。唯一不足的点就是价格有点小贵6-8元才…...

【2021.9.7】记一次exe手动添加shellcode

【2021.9.7】记一次exe手动添加shellcode 文章目录【2021.9.7】记一次exe手动添加shellcode0.大致思路1.获取MessageBox的真实地址VA2.通过OD在代码段添加shellcode3.dump出数据,设置程序OEP4.测试dump出来的exe5.方法总结测试的exe和添加了shellcode的exe:链接&…...

常用训练tricks,提升你模型的鲁棒性

目录一、对抗训练FGM(Fast Gradient Method): ICLR2017代码实现二、权值平均1.指数移动平均(Exponential Moving Average,EMA)为什么EMA会有效?代码实现2. 随机权值平均(Stochastic Weight Averaging,SWA&a…...

具有精密内部基准的 DACx0502 简介及驱动应用示例

DACx0502 说明 16 位 DAC80502、14 位 DAC70502 和 12 位DAC60502 (DACx0502) 数模转换器 (DAC) 均为具有电压输出的高精度、低功耗器件。 DACx0502 线性度小于 1LSB。凭借高精度和微型封装特性,DACx0502 非常适合以下 应用: 增益和失调电压校准、电流…...

C语言函数:字符串函数及模拟实现strncpy()、strncat()、strncmp()

C语言函数:字符串函数及模拟实现strncpy()、strncat()、strncmp() 在了解strncpy、strncat()、前,需要先了解strcpy()、strncat(): C语言函数:字符串函数及模拟实现strlen() 、strcpy()、 strcat()_srhqwe的博客-CSDN博客 strncp…...

学术论文插图要求简介

1. 类型 位图和矢量图是两种不同的图像类型,它们在存储和处理图像时使用不同的方法。以下是它们之间的详细区别: 图像构成方式:位图使用像素(或图像的最小单元)来构建图像,每个像素都有自己的颜色和亮度值。…...

【独家】华为OD机试 - 斗地主 2(C 语言解题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...

力扣-计算特殊奖金

大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:1873. 计算特殊奖金二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总…...

华为校招机试真题目录

专栏介绍 本专栏将逐步收集历年华为校招算法真题 专栏权益 每篇博客都包含: 算法考点解析(文字+画图)算法源码(支持 Java / JS / Python)每晚9:00 ~ 11:00 在线答疑 真题目录 时间题目考点 or 实现2022.11.27...

EdgeYOLO学习笔记

EdgeYOLO学习笔记 EdgeYOLO: An Edge-Real-Time Object Detector Abstract 本文基于最先进的YOLO框架,提出了一种高效、低复杂度、无锚的目标检测器,该检测器可以在边缘计算平台上实时实现。为了有效抑制训练过程中的过拟合,我们开发了一种…...

【分布式】什么是分布式锁?正文揭晓

分布式锁的概念 分布式锁其实可以理解为:控制分布式系统有序的去对共享资源进行操作,通过互斥来保持一致性。 举个例子:假设共享的资源就是一个房子,里面有各种书,分布式系统就是要进屋看书的人, 分布式锁…...

超详细JDK1.8所有版本下载地址

JDK1.8即为JDK8,JDK8是目前是最成熟最稳定的版本,本文将详细介绍JDK1.8历史版本的下载方式。 在此附上JDK1.8安装与配置教程 超详细JDK1.8安装与配置 一、JDK官网 首先打开oracle官网,官网首页地址为 JDK官网首页地址 点击Products 点击…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

webpack面试题

面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...

【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析

1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器(TI)推出的一款 汽车级同步降压转换器(DC-DC开关稳压器),属于高性能电源管理芯片。核心特性包括: 输入电压范围:2.95V–6V,输…...

32位寻址与64位寻址

32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...

五、jmeter脚本参数化

目录 1、脚本参数化 1.1 用户定义的变量 1.1.1 添加及引用方式 1.1.2 测试得出用户定义变量的特点 1.2 用户参数 1.2.1 概念 1.2.2 位置不同效果不同 1.2.3、用户参数的勾选框 - 每次迭代更新一次 总结用户定义的变量、用户参数 1.3 csv数据文件参数化 1、脚本参数化 …...