快手 · 移动端音视频开发实战
展晓凯
快手回森技术负责人
12246 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 25 讲
快手 · 移动端音视频开发实战
15
15
1.0x
00:00/00:00
登录|注册

20|如何实现视频录制器的底层模块?(上)

你好,我是展晓凯。今天我们来一起学习视频录制器底层核心模块的实现。
上一节课我们从视频录制器的场景分析入手,设计出了一个视频录制器的架构,并且详细讲解了每个模块的职责与技术选型。接下来这两节课,我们就来分别实现音视频两个大模块下面的子模块。这节课我们要实现的是音频模块中的音频队列,目标是把音频(采集到的声音 +BGM)的 PCM 数据放到 PCM 队列里。

音频模块

具体如何采集音频,你可以回顾一下前面第 10 节课第 11 节课的内容。这节课我们主要讲解音频队列在 Android 平台和 iOS 平台的实现,还有如何把采集的音频数据放到队列里的问题,最重要的还有一部分是如何在音频模块里加入播放背景音乐的功能。其中音频队列的实现在双端我们采用一套代码,都使用 C++ 来实现。

音频队列的实现

队列元素定义

讲解队列的具体实现之前,我们先来看一下队列里存放的元素,结构体定义如下:
typedef struct AudioPacket {
short * buffer;
int size;
AudioPacket() {
buffer = NULL;
size = 0;
}
~AudioPacket() {
if (NULL != buffer) {
delete[] buffer;
buffer = NULL;
}
}
} AudioPacket;
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了在Android和iOS平台上实现视频录制器的底层音频模块中的音频队列。在Android平台上,通过RecordProcessor类实现了音频数据的入队操作,包括初始化方法和音频数据入队的方法。在iOS平台上,通过AUGraph构建了音频单元的连接,实现了伴奏的解码与播放。文章详细介绍了在Android和iOS平台上音频模块的实现细节,包括音频数据的处理和入队操作。通过本文的阐述,读者可以了解音频模块的底层实现原理和技术细节,对于想要深入了解视频录制器底层音频模块的读者具有一定的参考价值。 文章中详细介绍了在Android和iOS平台上音频模块的实现细节,包括音频数据的处理和入队操作。在Android平台上,通过RecordProcessor类实现了音频数据的入队操作,包括初始化方法和音频数据入队的方法。在iOS平台上,通过AUGraph构建了音频单元的连接,实现了伴奏的解码与播放。文章还介绍了音频数据的格式转换和队列操作的具体实现方法。通过本文的阐述,读者可以了解音频模块的底层实现原理和技术细节,对于想要深入了解视频录制器底层音频模块的读者具有一定的参考价值。 在音频队列的实现中,最重要的是解码伴奏以及实现控制器,其中包括使用FFmpeg做解码、线程的控制,以及实现一个伴奏播放器,同时又把采集到的人声PCM和播放出来的伴奏PCM存到队列里。现在这两种PCM数据已经放到PCM队列里了,下节课会继续实现音频编码模块,这个模块会从PCM队列里获取出PCM数据,然后编码成AAC的码流,存入AAC队列里。 总的来说,本文通过深入的技术细节和实现方法,为读者提供了对视频录制器底层音频模块的全面了解和参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《快手 · 移动端音视频开发实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • peter
    请教老师几个问题: Q1:队列为什么不用类来定义? Q2:音频的缓冲队列是前面定义的音频队列吗? Q3:文中是采用AudioTrack播放音频,但用FFmpeg也可以播放吧。 Q4:有一种vep视频文件,只能用“大黄蜂播放器”播放,请问:vep文件是什么编码方法?什么封装格式?是否有其他软件可以播放?

    作者回复: A1:队列是一个C++类,回头可以看项目源码; A2:从全局来看一共有两个队列,一个是PCM队列,一个是AAC队列; A3: 不可以的,播放必须使用平台自己的API,这个前面有讲解过的。 A4: 我之前没接触过,查了一下vep应该是一种加密的视频文件,封装格式应该还是H264不过做了加密而已。

    2022-09-07归属地:北京
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部