Android _ 音视频方向进阶路线及资源合集

但是系统相机和系统控件VideoView的局限性都是可定制型太差,系统相机的图像分辨率,视频码率以及VideoView的进度条等.

1.2 初级版本

接下来,Android开发中我们接触到最上层的两个API(Android官方提供了的么:github.com/android/med… 包含了MediaRecorder VideoPlayer等)是:

  1. MediaRecorder 音频/视频采集 对应上图蓝色部分, 参考 github.com/werbhelius/… 实现
  2. MediaPlayer 音频/视频播放, (VideoView封装了MediaPlayer),对应上图绿色部分 参考:github.com/crossle/Med… 实现

MediaRecorder示例:

mediaRecorder = new MediaRecorder(); // 创建
mediaRecorder.reset(); // 设置为空闲模式 可以赋属性了
mediaRecorder.setCamera(mCamera);// 设置一个摄像头用于录制。
// 使用SurfaceView预览
mediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());

// 1.设置采集声音
// mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 设置采集图像
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// 2.设置视频,音频的输出格式 mp4
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
// 开始录制
mediaRecorder.prepare();
mediaRecorder.start();

MediaRecorder示例:

MediaPlayer mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(mContext, mUri, mHeaders);
mMediaPlayer.setDisplay(mSurfaceHolder);
mMediaPlayer.prepareAsync();

示例代码简单介绍了一下MediaRecorder和MediaRecorder的API,参考上面提供的demo已经可以实现简单的播放器和音视频录制功能了.上面我们又引出两个接口来:Camera, Surface. 拍照等功能我们都可以使用Camera的接口实现,关于Camera的API可以参考google的demo:github.com/googlearchi… Surface我们接下来介绍.

1.3 进阶版本

上面的的MediaRecorder,MediaPlayer直接封装了图中的蓝色部分与绿色部分.它们将输入编码复用以及解码解复用输出封装到了一起,可定制性差: 1.MediaPlayer只支持固定的编码和封装,不支持rtmp等 2.MediaRecorder无法支持mp3,opus, ogg等编码,无法对采集到音视频做预处理(比如变声,美颜等)

基于上述几个原因,我们再认识几个API:

  1. 视频采集 Camera
  2. 音频采集 AudioRecorder
  3. 视频预处理:SurfaceTexture, Surface, EGL ,GLES10
  4. 音视频编码 MediaCodec MediaFormat
  5. 音视频封装(复用) MediaMuxer
  6. 音视频(解复用) MediaExtractor
  7. 音视频解码 MediaCodec
  8. 视频预览 SurfaceView, GLSurfaceView, TextureView
  9. 音频播放 AudioTrack

上述API Android也为我们提供了示例https://github.com/google/grafika,里面包含的示例相当全面:

  1. Play video (TextureView). 基于MediaCodec ,MediaExtractor, TextureView封装的播放器,可以帮助理解这几个api.
  2. Continuous capture. 基于Camera,GLES20,SurfaceTexture,SurfaceView,MediaCodec实现的建议的视频录制器.
  3. Double decode. 类似于Play video示例,只是解码两路视频渲染到TextureView.
  4. Hardware scaler exerciser. 演示OpenGL进行画面缩放
  5. Live camera (TextureView). 演示Camera,SurfaceTexture以及TextureView使用
  6. Multi-surface test. 演示三路视频渲染
  7. Play video (SurfaceView). 类似于Play video (TextureView),只是输出从TextureView变成了SurfaceView.
  8. Record GL app. 基于FBO同时将摄像头采集数据输出到编码器和屏幕,FBO是实时美颜的关键技术.
  9. Record Screen using MediaProjectionManager.基于MediaProjectionManager将屏幕内容录制成文件.之前我们的输入都是摄像头,Android5.0开始提供了MediaProjectionManager,可以对屏幕内容进行采集.
  10. Scheduled swap. 了解一个新伙伴Choreographer
  11. Show + capture camera. 摄像头同时输出到文件和屏幕(与"RecordFBOActivity"输出对象变成了GLSurfaceView)
  12. Simple Canvas in TextureView. 一般的我们把基于OpenGL的渲染称为"硬"渲染,基于Canvas的称为"软"渲染,这个示例展示了如何通过Canvas绘制到TextureView
  13. Simple GL in TextureView. 可以理解为实现了GLThread的TextureView.
  14. Texture from Camera. Camera->SurfaceTexture->SurfaceView
  15. Color bars. Canvas绘制示例
  16. OpenGL ES Info. 获取OpenGL 版本等相关信息
  17. glTexImage2D speed test. 纹理上传示例,从图片装换为OpenGL纹理,又要认识一个新伙伴: glTexImage2D().
  18. glReadPixels speed test. OpenGL纹转换为图片(RGBA/YUV),再认识一个新伙伴 glReadPixels()

上面的demo主要是图形相关的,编解码器观光一下官方文档:developer.android.google.cn/reference/a… 已经不能再明白了.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此外,想弄明白MediaCodec,还需要了解一个数据结构ByteBuffer(移步官方文档了解一下? developer.android.google.cn/reference/j…)

如果学习完这些,那么恭喜你,你已经对音视频相关知识有了一些了解了.接下来你可以试着去接触一下著名的android-gpuimage,以及了解OpenGL相关的FBO,PBO,Texture等,可以处理视频编辑,简单实现美颜等滤镜了. 推荐一些OpenGL相关文章:

  1. 第一个OpenGL程序:blog.csdn.net/fuyajun01/a…
  2. 计算机图形学网络课程:netclass.csu.edu.cn/NCourse/hep…
  3. LearnOpenGl-CN:learnopengl-cn.readthedocs.io/zh/latest/0…
  4. opengl-tutorial:learnopengl-cn.readthedocs.io/zh/latest/0…
  5. OpenGl Pixel Buffer Object(PBO):www.songho.ca/opengl/gl_p…
  6. OpenGL深入探索——缓冲区对象(*BO):blog.csdn.net/panda1234le…
  7. OpenGL深入探索——像素缓冲区对象 (PBO):blog.csdn.net/panda1234le…
  8. Android 关于美颜/滤镜 利用PBO从OpenGL录制视频:www.jianshu.com/p/3bc4db687…
  9. EGL API Notes
  10. Learn OpenGL ES:www.learnopengles.com/android-les…
  11. OpenGL Transformation:www.songho.ca/opengl/gl_t…
  12. glsl_tutorial:zach.in.tu-clausthal.de/teaching/cg…
  13. GLSL ES(OpenGL ES着色器语言)_WebGL笔记9:www.ayqy.net/blog/glsl-e…
  14. OpenGL 纹理坐标 和 顶点坐标映射关系 详解:blog.csdn.net/xipiaoyouzi…
  15. www.khronos.org/registry/EG… OpenGL中FrameBuffer使用:blog.csdn.net/wl_soft50/a…

1.4 高级版本

进阶版本中处理的都是Java层数据,有时候我们要编码mp3,opus等,手机硬件编码器(就是MediaCodec)不支持,我们需要引入编解码器库(lame,opus),这些库都是c/cpp实现,我们要经过jni封装,但是jni是有消耗的,那么我们可以不可以直接在c/cpp层实现采集,编码,播放呢? 当然是YES,下面我们再来了解一下jni层的API:

  1. 图像采集: 图像采集可以使用Java Camera,通过给Camera Surface,Surface再给jni的MediaCodec,也可以试试<camera/NdkCameraManager.h>
  2. 声音采集: 了解一下<SLES/OpenSLES_Android.h> , <SLES/OpenSLES.h>, opensl的文档太粗陋,给你一份Android官方demo:github.com/android/ndk…
  3. 编解码: 了解一下<media/NdkMediaCodec.h>
  4. 封装(复用)器: <media/NdkMediaMuxer.h>
  5. 解封装(解复用)器: <media/NdkMediaExtractor.h>
  6. 图像渲染: ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include下的EGL, GLES, GLES2, GLES3等

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果了解到这,那么恭喜你,可以继续学习一些其他库了:

  1. lamemp3:Android只支持mp3解码,不支持mp3编码,幸好有lame:官网, 使用示例 文章介绍: 带你写一个Mp文件解析器-Mp3文件结构全解析(一),带你写一个Mp文件解析器-Mp3文件结构全解析(二)
  2. opus: 实时语音场景的首选是opus,但是Android还是只能解码不能编码,索性移步:官网,文章介绍Opus从入门到精通(一):简介,Opus从入门到精通(二):编解码器使用, Opus从入门到精通(三)手撸一个Opus编码程序,Opus从入门到精通(四)Opus解码程序实现,Opus从入门到精通(五)OggOpus封装器全解析,学习到这应该不再需要demo了,自己动手来一个吧
  3. aac: Android支持了aac硬件编解码,但是出于编码效率以及低端手机考虑,了解一下FAAC
  4. x264: Android默认支持了h264的编解码,但也是出于编码效率及低端手机考虑,了解一下x264
  5. ffmpeg: 现在终于可以了解下传说中的ffmpeg了,音视频界的万能神器.

1.5 终极阶段

现在你可以更深入的了解声音的本质,特性,图像的压缩原理等等,去理解时域与频域,去学习charlesliuyx.github.io/2018/02/18/…,这个时候可以把高等数学和线性代数翻出来了.

2.媒体部分

传输部分我们音视频领域主要用到的应用层协议:

  • http
  • rtmp
  • rtc

2.1基于http的音视频传输

Android上面的系统播放器MediaPlayer默认支持http的,可以传入一个远程的mp4地址给MediaPlayer播放.但是这种只能实现点播,如果要在http上实现直播的话,了解一下HLS以及HttpFLV:www.jianshu.com/p/32417d8ee…

2.2 rtmp

rtmp是adobe的产物,主要用于直播场景,主播一路上行,观众多路下行

具体资源,文章里都有介绍了

2.3 rtc

rtmp实现了直播,但要互动直播就需要rtc了.现在好多都是基于webrtc的二次开发.

3.资源整理

3.1 摄像头及录制相关

  • github.com/aserbao/And… : 自定义Android相机(仿抖音),其中功能包括视频人脸识别贴纸,分段录制,回滚删除,倒计时录制,视频裁剪,视频帧处理,获取视频第一帧,关键帧,视频旋转,滤镜添加,水印添加,Gif合成到视频,文字转视频,图片转视频,音视频合成,音频变声处理,SoundTouch,Fmod音频处理。
  • github.com/CJT2325/Cam… : 仿微信拍照Android控件(轻触拍照,长按摄像)
  • github.com/wuhaoyu1990… : Real-time Filter Camera&VideoRecorder And ImageEditor With Face Beauty For Android—包含美颜等40余种实时滤镜相机,可拍照、录像、图片修改,吸取了gpuimage很多滤镜
  • github.com/android/cam… : 谷歌官方demo

3.2 webrtc

  1. Pion WebRtc(github.com/pion/webrtc ):Pure Go implementation of the WebRTC API
  2. WebRtc 学而思镜像(gitlab.com/webrtc-mirr…):
  3. WebRtc声网镜像(webrtc.agora.io/mirror/)
  4. Flutter-p2p-engine(gitee.com/cdnbye/flut…):Flutter视频/直播APP省流量&加速,基于webrtc
  5. Android-p2p-engine(gitee.com/cdnbye/andr…):传输能力基于WebRTC Datachannel,可以与CDNBye的Web端插件互联互通
  6. UnityRenderStreaming(github.com/Unity-Techn…):Streaming Server for unity
    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

总结

Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

上面分享的字节跳动公司2021年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

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

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

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

urd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Github下载地址:https://github.com/XLAccount/MiaoBo 项目详解地址:http://www.code4app.com/blog-843201-350.html 快速集成RTMP的视频推流教程:http://www.code4app.com/blog-843201-315.html ffmpeg常用命令操作:http://www.code4app.com/blog-843201-326.html #关于IJKMediaFramework/IJKMediaFramework.h找不到的问题,下载后直接拉到项目中即可 下载地址:https://pan.baidu.com/s/1boPOomN 密码::9yd8 #BUG修复: 解决登录程序偶尔崩溃,修复轮播图片和页面控制器叠加等问题,修复新浪授权登录 (2016.9.7) 解决程序运行中偶尔崩溃问题,解决连续下拉刷新崩溃问题,优化代码 (2016.9.8) 优化直播页面,减少不必要的性能消耗,增加用户体验 (2016.9.11) 适配5s以上的机型除了6sPlus和6Plus延迟较大外,其余延迟都较小,网速好的话可以忽略不计 (2016.9.12) 新版本极大优化程序性能,修复关注数据异常等小问题,重新布局热门页面,减少因反复加载带来的性能消耗 (2016.9.13) 增加个人中心页面,采用下拉放大图片 ➕ 波纹效果 (2016.9.14) ![image text](https://github.com/XLAccount/ALLGIFS/blob/master/psb.gif) 展示图片 ![image](https://github.com/XLAccount/ALLGIFS/blob/master/psb-1.gif) 展示图片 ![image text](https://github.com/XLAccount/ALLGIFS/blob/master/psb-2.gif) 展示图片 ![image text](https://github.com/XLAccount/ALLGIFS/blob/master/psb-3.gif) 展示图片 感谢大神Monkey_ALin http://www.jianshu.com/users/9723687edfb5/latest_articles 的demo支持

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值