5G时代风口浪尖上的音视频开发技术,你还在观望吗?保姆级Android音视频开发学习一篇就够!!!

  • KCP

  • SRT

  • QUIC

  • FEC + 丢包重传机制(如NACK)

音视频的开发并不是完全从零开始,而是有许多可以依赖的开源库,但要用好这些库,需要对上述的音视频专业知识有深刻的理解。

比较常见的音视频开源库,如下:

  • ffmpeg

  • 可以直接使用ffmpeg的命令行实现转码、切片等常见功能

  • 可以基于FFmpeg API封装开发自己的音视频模块

  • live555

  • 比较完善的RTSP库

  • x264

  • 比较常用的H.264编码库

  • fdkaac

  • 比较常用的AAC编解码库

  • librtmp

  • 支持rtmp协议,产品化时需要自己进一步完善

  • pjsip

  • 支持sip协议

  • webrtc

  • google开源的webrtc库,有比较好的音/视频引擎,对网络状态的实时评估可以借鉴,回声消除模块也是比较有名的

  • SDL

  • 比较有名的音视频渲染库

  • SRS

  • 国内比较知名的RTMP流媒体服务器,支持HLS、HTTP+FLV,4.0版本开始支持WebRTC

  • OWT

  • Intel开源的WebRTC套件,支持了WebRTC客户端SDK和分布式的WebRTC MCU服务器

  • OpenCV

  • 著名的视频算法库

另外,视频的编码和解码可以基于Intel Media SDK和NVIDIA的NVENC来实现。

在海思嵌入式上,海思芯片(如Hi3531D等)提供了硬件的音视频采集、音视频渲染、视频编/解码、视频图像处理等核心功能,这就需要借助于海思提供的SDK进行开发了。

音视频这块,目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的,希望我后面能挤出时间整一个专题详细讲一讲~~目前的话,我先给出一个大的方向性的学习指南,希望对初学者有所帮助。

我一直相信带着 “任务” 去学习和实践,效率会高很多,因此我列出了一系列音视频相关的 “开发任务”,从简单到困难(当然,不一定非常严格和完美,部分任务先后可调整),大家在完成任务的过程中,遇到任何不懂的地方都要及时去 google,或者去请教身边的大牛,不放过任何一个疑点,相信大家会很快就能把音视频周边相关知识积累起来。

这里整理和概括了(还有部分内容没有截图出来)关于音视频的资料,相信应该是全网最全了,所有资料都是免费分享给大家的,也省去了对音视频感兴趣的小伙伴们四处找资料的时间,如果你正好需要可以扫一扫下方二维码免费获取。

Android 音视频从入门到精通——学习目标

1. 在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View

2. 在 Android 平台使用 AudioRecord 和 AudioTrack API 完成音频 PCM 数据的采集和播放,并实现读写音频 wav 文件

3. 在 Android 平台使用 Camera API 进行视频的采集,分别使用 SurfaceView、TextureView 来预览 Camera 数据,取到 NV21 的数据回调

4. 学习 Android 平台的 MediaExtractor 和 MediaMuxer API,知道如何解析和封装 mp4 文件

5. 学习 Android 平台 OpenGL ES API,了解 OpenGL 开发的基本流程,使用 OpenGL 绘制一个三角形

6. 学习 Android 平台 OpenGL ES API,学习纹理绘制,能够使用 OpenGL 显示一张图片

7. 学习 MediaCodec API,完成音频 AAC 硬编、硬解

8. 学习 MediaCodec API,完成视频 H.264 的硬编、硬解

9. 串联整个音视频录制流程,完成音视频的采集、编码、封包成 mp4 输出

10. 串联整个音视频播放流程,完成 mp4 的解析、音视频的解码、播放和渲染

11. 进一步学习 OpenGL,了解如何实现视频的剪裁、旋转、水印、滤镜,并学习 OpenGL 高级特性,如:VBO,VAO,FBO 等等

12. 学习 Android 图形图像架构,能够使用 GLSurfaceviw 绘制 Camera 预览画面

13. 深入研究音视频相关的网络协议,如 rtmp,hls,以及封包格式,如:flv,mp4

14. 深入学习一些音视频领域的开源项目,如 webrtc,ffmpeg,ijkplayer,librtmp 等等

15. 将 ffmpeg 库移植到 Android 平台,结合上面积累的经验,编写一款简易的音视频播放器

16. 将 x264 库移植到 Android 平台,结合上面积累的经验,完成视频数据 H264 软编功能

17. 将 librtmp 库移植到 Android 平台,结合上面积累的经验,完成 Android RTMP 推流功能

18. 上面积累的经验,做一款短视频 APP,完成如:断点拍摄、添加水印、本地转码、视频剪辑、视频拼接、MV 特效等功能

相信我,如果你认真把所有任务都完成了,你一定会成为音视频人才招聘市场的香饽饽~~

一,初级入门篇:

一 绘制图片

  1. ImageView 绘制图片

  2. SurfaceView 绘制图片

  3. 自定义 View 绘制图片

二、AudioRecord API详解

三、使用 AudioRecord 实现录音,并生成wav

  • 创建一个AudioRecord对象

  • 初始化一个buffer

  • 开始录音

  • 创建一个数据流,一边从AudioRecord中读取声音数据到初始化的buffer,一边将buffer中数据导入数据流。

  • 关闭数据流

  • 停止录音

四、用 AudioTrack 播放PCM音频

1.AudioTrack 基本使用

  • MODE_STATIC模式

  • MODE_STREAM模式

2.AudioTrack 详解

  • 音频流的类型

  • Buffer分配和Frame的概念

  • AudioTrack构造过程

  1. AudioTrack 与 MediaPlayer 的对比
  • 区别

  • 联系

  • SoundPool

五、使用 Camera API 采集视频数据

1.预览 Camera 数据

2.取到 NV21 的数据回调

六、使用 MediaExtractor 和 MediaMuxer API 解析和封装 mp4 文件

1.MediaExtractor API介绍

2.MediaMuxer API介绍

3.使用情境

七. MediaCodec API 详解

1.MediaCodec 介绍

2.MediaCodec API 说明

3.MediaCodec 流控

流控基本概念

Android 硬编码流控

Android 流控策略选择

由于文章篇幅受限,剩余内容过多,文中插图有限,下文只能截图目录展示:

二,中级进阶篇:

Android OpenGL ES 开发(一): OpenGL ES 介绍

Android OpenGL ES 开发(二): OpenGL ES 环境搭建

Android OpenGL ES 开发(三): OpenGL ES 定义形状

Android OpenGL ES 开发(四): OpenGL ES 绘制形状

Android OpenGL ES 开发(五): OpenGL ES 使用投影和相机视图

Android OpenGL ES 开发(六): OpenGL ES 添加运动效果

Android OpenGL ES 开发(七): OpenGL ES 响应触摸事件

Android OpenGL ES 开发(八): OpenGL ES 着色器语言GLSL

Android OpenGL ES 开发(九): OpenGL ES 纹理贴图

Android OpenGL ES 开发(十): 通过GLES20与着色器交互

使用 OpenGL 显示一张图片

GLSurfaceviw 绘制 Camera 预览画面及实现拍照

使用OpenGL ES 完成视频的录制,并实现视频水印效果

高级探究篇:

深入学习音视频编码,如H.264,AAC,研究使用开源编解码库,如x.264,JM 等

深入研究音视频相关的网络协议,如 rtmp,hls,以及封包格式,如:flv,mp4

深入学习一些音视频领域的开源项目,如 webrtc,ffmpeg,ijkplayer,librtmp 等等

将 ffmpeg 库移植到 Android 平台,结合上面积累的经验,编写一款简易的音视频播放器

将 x264 库移植到 Android 平台,结合上面积累的经验,完成视频数据 H264 软编功能

将 librtmp 库移植到 Android 平台,结合上面积累的经验,完成 Android RTMP 推流功能

音视频编解码技术

音视频编解码技术(一):MPEG-4/H.264 AVC 编解码标准

音视频编解码技术(二):AAC 音频编码技术

流媒体协议

流媒体协议(一):HLS 协议

流媒体协议(二):RTMP协议

多媒体文件格式

多媒体文件格式(一):MP4 格式

多媒体文件格式(二):FLV 格式

多媒体文件格式(三):M3U8 格式

多媒体文件格式(四):TS 格式

多媒体文件格式(五):PCM / WAV 格式

FFmpeg 学习记录

FFmpeg命令行工具学习(一):查看媒体文件头信息工具ffprobe

FFmpeg命令行工具学习(二):播放媒体文件的工具ffplay

FFmpeg命令行工具学习(三):媒体文件转换工具ffmpeg

FFmpeg命令行工具学习(四):FFmpeg 采集设备

FFmpeg命令行工具学习(五):FFmpeg 调整音视频播放速度

FFmpeg 学习(一):FFmpeg 简介

FFmpeg 学习(二):Mac下安装FFmpeg

FFmpeg 学习(三):将 FFmpeg 移植到 Android平台

FFmpeg 学习(四):FFmpeg API 介绍与通用 API 分析

FFmpeg 学习(五):FFmpeg 编解码 API 分析

FFmpeg 学习(六):FFmpeg 核心模块 libavformat 与 libavcodec 分析

FFmpeg 结构体学习(一): AVFormatContext 分析

FFmpeg 结构体学习(二): AVStream 分析

FFmpeg 结构体学习(三): AVPacket 分析

FFmpeg 结构体学习(四): AVFrame 分析

FFmpeg 结构体学习(五): AVCodec 分析

FFmpeg 结构体学习(六): AVCodecContext 分析

FFmpeg 结构体学习(七): AVIOContext 分析

FFmpeg 结构体学习(八):FFMPEG中重要结构体之间的关系

更多目录截图:

【延伸Android必备知识点】

【Android部分高级架构视频学习资源】

**Android精讲视频学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!

**任何市场都是优胜略汰适者生存,只要你技术过硬,到哪里都不存在饱和不饱和的问题,所以重要的还是提升自己。懂得多是自己的加分项 而不是必须项。门槛高了只能证明这个市场在不断成熟化!**另外一千个读者就有一千个哈姆雷特,所以以上只是自己的关键,不喜勿喷!

如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。欢迎关注会持续更新和分享的。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

9339)]

【Android部分高级架构视频学习资源】

**Android精讲视频学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!

**任何市场都是优胜略汰适者生存,只要你技术过硬,到哪里都不存在饱和不饱和的问题,所以重要的还是提升自己。懂得多是自己的加分项 而不是必须项。门槛高了只能证明这个市场在不断成熟化!**另外一千个读者就有一千个哈姆雷特,所以以上只是自己的关键,不喜勿喷!

如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。欢迎关注会持续更新和分享的。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值