首页 > 编程知识 正文

安卓音视频开发教程,android从入门到精通视频教程

时间:2023-05-04 12:41:35 阅读:246418 作者:520

文章目录 0,题记1,学习路线2,学习目标任务列表基础知识FFmpeg 3,开始音视频开发必备的技能1,C语言。2,Linux。3,基本的Linux编译执行命令,以及vim操作。4,JNI,ndk开发流程。

0,题记

做Android开发有三四年了,一直做的都是应用层的APP开发,实现的基本都是UI效果,动画,机型适配,集成第三方的lib进行推送,支付,第三方登录,地图等的功能,就算涉及到视屏的播放也就是直接VideoView把mp4,flv或者其他格式的视屏直接给展示出来,并不会对视频本身做任何的处理,比如视频的压缩、比如清晰度切换,变声,滤镜。。。 就算涉及到拍照,也都是简单的直接调用系统给定的调用系统摄像头的 API进行拍照,然后通过回调方法拿到拍摄的缩略图或者原图的bitmap。并不会涉及到摄像头的控制,美颜,大眼,磨皮,贴纸等功能。
但是音视频的开发是更底层的,就需要涉及到使用麦克风采集音频数据,使用摄像头采集图像数据,然后要对这些数据进行编码,降噪,并增加美颜,变声等的效果,最后录制完成了并播放出来。
总结来说,摄像头的操作分为两种:
1,takeing photos,也就是调用系统相机实现拍照功能,比如一个APP里面个人资料的头像,可以从相册选择图片,也可以调用相机进行拍摄获取图片。
2,controling the camer主要就是控制相机,进行自定义相机,实现和系统相机类似的效果或者不同效果的一个APP,在5.0以后主要采用的是Camera2,这个类比早起版本的Camera功能更强大,开放了更多的可定制可控制拍摄,录制,各个环节的API,当然功能多了,对底层的操作性更强了,那使用起来复杂度也就增加了,其实主要也就是一层一层的回调。

言归正传,
完全没有音视频开发相关的任何的基础,从0开始踩坑,从做技术调研开始,最后的目标是可以做出一个播放器,视频播放器;一个直播APP类似于映客,花椒,斗鱼;一个小咖秀类似于抖音,快手。

记录一下,一路以来的踩坑过程,对个人来说是个总结,记录,对相同想从事音视频开发的朋友也希望能帮助到他们。

废话就说这么多,下面开始正题。

1,学习路线

学习需要一个方向,以往就有人总结出过大概的一个学习路线,我借鉴了,然后又增加了一些,觉得是个比较好的路线。
路线1:任务列表
音视频开发入门指南 (https://blog.51cto.com/ticktick/1956269) 这篇帖子是一个xydsh给出的学习路径,我也是从这里开始的,感谢博主。

然后,我想说的是,有了这个任务列表,其实还是抽象,去实现每一个任务的过程其实还是很累,还是有些模糊,不过这个艰辛的过程挺过去了就觉得收货很大,也会提升很多,可以提升自己tzdkh研究,静下来做技术的心,克服浮躁;第二点就是提升自己分析问题,解决问题的能力;第三点当然就是思考问题以及自我学习的能力的提升了。作为一名程序员,热爱coding,必须持续的学习,持续的提升自我,技术的革新换代真的是相当的快,停下了学习的步伐就要被落下,就会落后。
路线2:找人带
移动端音频视频入门 https://www.imooc.com/learn/959
FFmpeg音视频核心技术精讲与实战 https://coding.imooc.com/class/279.html
慕课网找资料,phdybxydsh,在爱奇艺工作,从事的就是音视频相关的领域而且已经工作了好多年,在慕课网开了两个音视频相关的课程,虽然简洁,但是个人觉得很有帮助,一个免费,一个付费。是个不错的入门资料。
这里没有任何的广告情绪和py交易,phdybxydsh都不知道我是谁,我竟然在帮他打广告,不过这资料确实有帮助。
另外:查资料
在慕课网的手记上查到很多相关的文档,以前并不知道还有这样的地方可以去搜索查询,这里记录下,当然还有CSDN,还有GitHub直接拿到别人的demo看。

2,学习目标 任务列表

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

参考资料:

1. 《Android音频开发》:http://ticktick.blog.51cto.com/823160/d-152. 《雷霄骅的专栏》:http://blog.csdn.net/leixiaohua10203. 《FFMPEG Tips》:http://ticktick.blog.51cto.com/823160/d-174. 《Learn OpenGL 中文》:https://learnopengl-cn.readthedocs.io/zh/latest/5. 《Android Graphic 架构》:https://source.android.com/devices/graphics/ 基础知识

音视频开发的基础概念以及流程。在后续的博客里会梳理总结出来。

FFmpeg

1,FFmpeg常用命令:
1.1,视频录制命令
1.2,多媒体文件的分解、复用命令
1.3,裁剪与合并命令
1.4,图片、视频互转命令
1.5,直播相关命令
1.6,各种滤镜命令
2,FFmpeg基本开发:
2.1,c语言
2.2,FFmpeg核心概念与常用结构体
2.3,多媒体文件的分解、复用-demo
2.4,多媒体格式的互转-demo
2.5,从mp4裁剪一段视频
2.6,demo-小咖秀
3,音视频编解码
3.1,H264编码
3.2,H264解码
3.3,音频AAC编码
3.4,音频AAC解码
3.5,视频转图片-demo
4,音视频的渲染
4.1,SDL事件渲染
4.2,SDL视频纹理渲染
4.3,SDL音频渲染
4.4,YUV视频数据播放-demo
4.5,YUV视频倍速播放-demo
4.6,pcm音频播放器-demo
5,开发播放器
5.1,实现mp4的视频播放,ijkplayer,ffplayer。
5.2,实现mp4的音频播放
5.3,实现一个初级播放器
5.4,音视频同步
5.5,播放器内核,快进、倍速播放、显示字幕
6,Android中使用FFmpeg
6.1,编译Android端可以使用的FFmpeg
6.2,Java与c语言相互调用
6.3,Android调用FFmpeg–demo。

3,开始音视频开发必备的技能 1,C语言。

FFmpeg是用C开发的,所以必须懂点C语言,不过也不用懂太多,指针,结构体,枚举,这些基本的东西懂得就OK了。

2,Linux。

FFmpeg在Linux上最优良,所以最好是在Linux下采用源代码编译安装。可以使用VMware+centeros或者VMware+ubantu。
需要注意一点,在安装Linux的时候我们需要将必须的包安装上。主要有下面几个包:

gccg++makecmakeautomakegdbnasmyasmwget 3,基本的Linux编译执行命令,以及vim操作。 4,JNI,ndk开发流程。

Android主要是采用Java开发,后续当然是Java和C互相调用,其实主要的还是Java调用C,会将Linux下编译后的程序打包成so包,移植进Android工程进行调用。

准备工作就先说这么多,后续的博客会讲述安装中的一些坑。
如果对你有所帮助,请点赞留言。

怎么用JS实现图片懒加载linux删除文件之后磁盘没释放如何使用CSS设置div半透明的效果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。