C++ QT结合FFmpeg实战开发视频播放器-18PCM过程的一些基本参数_qt 实时采样频率1ms-程序员宅基地

技术标签: QT  qt  ffmpeg  pcm  

作者:虚幻私塾
博客:https://xuhss.com

早餐店不会开到晚上,想吃的人早就来了!

一、编解码类参数含义

1. 采样率

每秒钟采样的频率。

采样率一般来说有几个极点,这里我们设置44100赫兹

人耳的听力范围是在20赫兹到20000赫兹,著名的奈奎斯特采样定理概念:

在进行模拟/数字信号的转换过程中,当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max>2fmax),采样之后的数字信号完整地保留了原始信号中的信息

    QAudioFormat fmt;
    fmt.setSampleRate(44100);                       //采样率HZ 20HZ-20000HZ
    fmt.setSampleSize(16);                              //采样大小  2^16 = 65535
    fmt.setChannelCount(2);                           //声道数
    fmt.setCodec("audio/pcm");                     //编解码器
    fmt.setByteOrder(QAudioFormat::LittleEndian);  //字节序,小端模式
    fmt.setSampleType(QAudioFormat::UnSignedInt);  //采样类型,无符号int型

所以 通常设置为44100,这样就能很好的保证采样的效果,

2. 采样大小

可以理解为振幅,量化位数。通常该值为16-bit。,意思是它表示的范围是2的16次方。

3. 声道数

通道个数。常见的音频有立体声(stereo)和单声道(mono)两种类型,立体声包含左声道和右声道。另外还有环绕立体声等其它不太常用的类型。

4. 编解码器

我们需要将视频数据采样后进行编解码操作,QAudioFormat是QT中专门做编解码类,

5. 字节序

  • 大端模式(Big-Endian):指的是数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中.
  • 小端模式(Little-Endian):指的是数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。

为什么有大小端模式

因为在计算系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。对于位数大于8位的处理器,例如目前大部分都32位或者64位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

这里使用小端模式

6. 采样类型

这里采用无符号整型作为采样类型

二、生成音频采样的文件

out.pcm

使用二进制读取问腭尖的方式读取pcm文件,然后将读取到的数据放入输入端,也就是播放设备,这样就可以听到播放的声音。

通过命令行生成二进制文件

ffmpeg –i test.mp4 -f f32le out.pcm

16表示16位,2个字节,le表示小端。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E4dK9leN-1651061387444)(博客使用模板.assets/image-20220427195520024.png)]

可以看到 能够生成out.pcm

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b7KEPkwW-1651061387445)(博客使用模板.assets/image-20220427195455630.png)]

三、总结

  • 本文主要讲解了采样参数及如何使用ffmpeg生成pcm数据。
  • 前面也写了一篇,不过是直接使用的示例场景,本篇则是自己改造了一下场景并加了个功能。
  • 如果你有更多的3D动态壁纸思路,可以尝试起来自己做一款专属于你自己的动态壁纸哦!!!
  • 如果觉得文章对你有用处,记得 点赞 收藏 转发 一波哦,博主也支持为铁粉丝制作专属动态壁纸哦~

往期优质文章分享

优质教程分享

  • 如果感觉文章看完了不过瘾,可以来我的其他 专栏 看一下哦~
  • 比如以下几个专栏:Python实战微信订餐小程序、Python量化交易实战、C++ QT实战类项目 和 算法学习专栏
  • 可以学习更多的关于C++/Python的相关内容哦!直接点击下面颜色字体就可以跳转啦!
学习路线指引(点击解锁) 知识定位 人群定位
Python实战微信订餐小程序 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
Python量化交易实战 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
️ C++ QT结合FFmpeg实战开发视频播放器️ 难度偏高 分享学习QT成品的视频播放器源码,需要有扎实的C++知识!
游戏爱好者九万人社区 互助/吹水 九万人游戏爱好者社区,聊天互助,白嫖奖品
Python零基础到入门 Python初学者 针对没有经过系统学习的小伙伴,核心目的就是让我们能够快速学习Python的知识以达到入门

资料白嫖,温馨提示

关注下面卡片即刻获取更多编程知识,包括各种语言学习资料,上千套PPT模板和各种小程序、Web、客户端项目源码等等资料。更多内容可自行查看哦!

请添加图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/huangbangqing12/article/details/124459447

智能推荐

使用IntrospectorCleanupListener 解决quartz引起的内存泄漏问题_quartz 定时任务 报错会引起内存增长吗-程序员宅基地

文章浏览阅读1.7k次。"在服务器运行过程中,Spring不停的运行的计划任务和OpenSessionInViewFilter,使得Tomcat反复加载对象而产生框架并用时可能产生的内存泄漏,则使用IntrospectorCleanupListener作为相应的解决办法。"对于这一句话,引用关于IntrospectorCleanupListener一段解释:spring中的提供了一个名为 org.spring_quartz 定时任务 报错会引起内存增长吗

java/php/node.js/python微信小程序名胜风景推荐平台的设计【2024年毕设】-程序员宅基地

文章浏览阅读44次。本系统带文档lw万字以上文末可领取本课题的JAVA源码参考。

Sophus库的使用-程序员宅基地

文章浏览阅读1.1k次。在这个例子中,我们首先构建了一个SE(3)位姿T1,然后对其进行逆运算、乘法运算,最后将旋转矩阵和李代数相互转换。此外,还演示了如何将两个李代数相加。总的来说,Sophus库提供了一组简单而强大的工具,可以大大简化位姿运算和优化的过程。Sophus是一个用于求解李群和李代数的C++库,它提供了一组基本操作和数学函数,例如构建、转换、乘法等,可以方便地进行位姿运算和优化。_sophus

用Calibre抓取博客,新闻等,制作成电子书_calibre抓取新闻-程序员宅基地

文章浏览阅读3.9k次。calibre简介Calibre是免费的,源代码开放,拥有跨平台的设计,可在Linux,OS X和Windows操作系统中运行。它的功能包括图书馆管理,格式转换,将材料转换为电子书,以及电子书阅读器同步功能、整合进电子图书阅读器。calibre recipes功能使用简介calibre中recipes就是指将文章转换成电子书,使用的编程语言是python2.7(python3应该是不支持的)。也就是_calibre抓取新闻

2、数据库系统是什么?它由哪几部分组成?_数据库系统包括那几个主要组成部分主要功能是什么-程序员宅基地

文章浏览阅读1w次。数据库系统(Database System,DBS)由硬件和软件共同构成。硬件主要用于存储数据库中的数据,包括计算机、存储设备等。软件部分主要包括数据库管理系统、支持数据库管理系统运行的操作系统,以及支持多种语言进行应用开发的访问技术等。数据库系统是指在计算机系统中引入数据库后的系统。完整的数据库系统结构关系如图所示:由图可知,一个完整的数据库系统一般由数据库、数据库管理系统、应用开发工具、应用系统、数据库管理员和用户组成。数据库系统主要有以下 3 个组成部分:数据库:用于存储数据的地方。数据_数据库系统包括那几个主要组成部分主要功能是什么

Android做一个简易计算器_安卓string计算器-程序员宅基地

文章浏览阅读505次。Android实现简陋的计算器_安卓string计算器

随便推点

IDEA使用LeetCode插件刷题_idea刷leetcode-程序员宅基地

文章浏览阅读5.2k次,点赞5次,收藏20次。1、下载插件IDEA中,点击【File】->【Settings】弹出窗口中,选择:2、配置与登录下载好插件后,页面右下角会出现leetcode弹出窗口登录:3、获取cookie首次登录,需要配置用户名和密码,以及cookie在leetcode官网登录后,按F12,在Console中输入javascript:document.cookie,回车,下面双引号里的内容即为cookie,将此cookie复制到IDEA的cookie登录窗口即可..._idea刷leetcode

PINN内嵌物理知识神经网络入门及文献总结_deep learning-based method coupled with small samp-程序员宅基地

文章浏览阅读4.6w次,点赞309次,收藏861次。内嵌物理知识深度学习方法(PINN)已经成功用于解决各类科学计算问题,其本质是将物理先验知识嵌入神经网络训练中,将一个求解PDE的问题转化为一个优化问题。这篇博客主要记录PINN相关论文_deep learning-based method coupled with small sample learning for solving pa

如何理解时钟(STM32)_stm32为什么时钟很重要-程序员宅基地

文章浏览阅读1.8k次,点赞45次,收藏43次。时钟基本概念要是想学习时钟,我们首先需要了解,什么是时钟1) 时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变换等动作,外设部件在时钟的驱动下完成各种工作,例如:串口数据的发送、AD转换、定时器计数等因此时钟对于计算机系统是至关重要的,通常时钟系统出现问题也是致命的,比如振荡器不起振、振荡不稳、停振等。时钟信号推动单片机内各个部分执行相应的指令,时钟就像人的心跳一样。2)时钟系统的组成:时钟源(振荡源)、唤醒定时器、倍频器、分频器。_stm32为什么时钟很重要

全志of_get_named_gpio_flags参数不同-程序员宅基地

文章浏览阅读1.5k次。struct gpio_config config;10431044 rst_pin = of_get_named_gpio_flags(np, "reset-gpio", 0, (enum of_gpio_flags *)&config);1045 if (!gpio_is_valid(rst_pin)) {1046 printk("can rst_pin: %d is invalid\n", rst_pin); return -ENODEV;..._of_get_named_gpio_flags

git拉取代码报错:error:RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054_git error: rpc failed; curl 56 openssl ssl_read: s-程序员宅基地

文章浏览阅读652次。百度了好多文章才找到的答案,分享一下并记录一下,避免自己忘记:终端输入:$ git config http.sslVerify “false”报错信息:fatal: not in a git directory执行下列命令解决:$ git config --global http.sslVerify “false”最后:再次克隆即可!..._git error: rpc failed; curl 56 openssl ssl_read: ssl_error_syscall, errno 0

【金融风险管理】python进行动态波动率的计算和时间序列的预测_python 已实现波动率计算-程序员宅基地

文章浏览阅读2k次,点赞9次,收藏26次。根据前一篇文章算计算出来的股票对数收益率,我们在这一篇文章在前文的基础上,分别用朴素法(平均法)简单移动平均法5日简单移动平均法10日移动平均法15日移动平均法来一次指数平滑法二次指数平滑法三次指数平滑法来预测。并且用RMSEADF检验对数据进行平稳性检验。简单平均法就是用过去所有的值的平均值来作为我们的预测值,也就是所谓的期望均值,简单易计算,但是由于方法简单,限制较少,对数据的敏感度较大,预测效果一般。_python 已实现波动率计算

推荐文章

热门文章

相关标签