Android硬编码
掌握Android的硬编码,学会使用MediaCodec、MediaMuxer、MediaExtractor完成视频解码。重点从android DSP芯片角度知道什么手机好、什么时候性能差,数字信号处理的本质在android上的性能测试分析。
兼容性测试Android音频从硬件到应用的架构分析
1、视频文件分离操作(MP4文件通道抽取)、视频信息桢获取、核心API源码解析
2、完成视频剪切
3、利用MediaPlayAPI完成一个初具雏形的播放器
4、解码器、解码流程的整理和总结
5、完成多段视频拼接合成(借助mp4parser)
6、使用MediaCodec录制一段绘制到Surface上的数据
7、seek&解码失败经常失败的分析
8、完成视频指定位置的视频预览
编解码实践
目前花椒已经完成整站点的H265技术替换,主流的技术主要是H264和H265,Android从5.0已经就支持HEVC的硬解,目前很多手机也支持了,包括海思芯片。
https://x265.com/hevc-video-files/
核心编码
1、阅读毕厚杰老师的书籍
2、码流格式分析,C++完成NAL解析输出
3、解码原理
4、专用芯片型和可编程型特点(丢帧)
5、开源的视频编解码器(CODEC)
6、Android使用ffmpeg和MediaCodec解码h265裸流
7、OpenMAX学习、海思安防SDK参考、OpenMAX数据结构学习、组建学习、思想升华
8、MediaCodec API,完成视频 H.264 的硬编、硬解,在Surface上完成影射
9、兼容性测试
WebRTC
完成WebRTCSDK开发,主要需求和做的事情如下:
NodeJS+java搭建后台会议室Coturn转发服务器搭建和bug修改Nginx配置和优化1对1语音/视频、多对多语音/视频业务开发增加权限管理功能支持Camera切换、免提、静音监测、音视频切换(视频切到音频)完成一个完成的VOIP流程(振铃、呼叫、拨打)SDK封装核心业务,对外暴露接口AGC、FEC等算法优化【本文推荐】:C++音视频资料、技术视频,内容包括(音视频开发基础,大厂面试题,FFmpeg ,WebRTC ,rtmp ,hls ,rtsp ,ffplay ,流媒体服务器),莬費分享,如有需要的可以加君羊领取哦!
~学习交流君羊666064665点击加入领取资料FFmpeg
完成一款播放器SDK的开发,考虑到项目的目的是为了学习知识、为了让项目区别于培训机构的demo,我希望是有血有肉有业务的,能在架构上考虑的丰富一些。我们实践的项目架构采用:NDK+OpenGLES+FFmpeg+OpenSLES作为基础的骨干架构,核心编解码全部采用C++实现。
核心编码
1、设计模式使用(门面+构建者+观察者+多线程生产消费+ring buffer+...)
2、支持硬解和软解
3、支持网络流媒体4、支持NDK Neno特性
5、支持音频自动对焦、传感器方向切换、复杂手势支持、清晰度切换、无缝切换UI等
6、Android使用ffmpeg和MediaCodec解码h265裸流
7、支持exoplayer内核
8、MediaCodec API,完成视频 H.264 的硬编、硬解,在Surface上完成影射
9、完成自己手动解码+线程管理+C实现Render
JNI使用的库:
GLESv2 EGL OpenSLES android avcodec avformat avutil swscale swresample opencv_java4 jnigraphics
OpenGL
主要是掌握OpenglES基本的编码套路、掌握类似抖音的实时滤镜特效、贴纸、模型加载、美颜美妆的处理思路,在这里我们不做算法,主要是把算法工程师的算法在工程上实现出来。
核心编码
1、《图像视频滤镜与人像美颜美妆算法详解》元旦带读,增强基础理论
2、人脸姿态校正算法、红眼计算
3、腾讯TCNN人脸检测学习和使用
4、美颜、贴纸、滤镜处理
5、AI深度学习算法仿真
RTMP推流
主要是针对一些公司还在做直播业务打造的实战,我在5年前做过大量的直播项目,包括自研和使用七牛云、腾讯的SDK。在这里我们主要关注的是编码,因为当你完成上面的项目的时候,剩下的就是把音频和视频合成RTMP流数据通过网络推送给Server了。
核心编码
1、Camera封装(卡顿、掉帧、角度问题)和录制视频
2、AAC音频编码
3、h264和aac合流Rtmp
4、RTMP 服务器搭建,采用Nginx完成
5、LibRtmp推流
通过对主流的28款app业务分析,可以梳理出以下业务,这也是我们的目标和学习途径,通过调研、模拟、仿写经典的业务,来掌握常用的音视频框架、方案设计、功能设计等。下面是主流的业务梳理,后续也添加到我们编码实践中。
主流业务梳理【爱奇艺】Android视频点播边播边缓存方案 实现思路:socket读取http协议请求+本地代理通道。【剪映】的视频剪辑工具 实现思路:采用opengl,用glsurfaceview承载渲染。【优酷】AndroidHLS分片视频边下边播 实现思路:未知 猜测是文件切割,多线程下载【抖音】直播秒开优化方案 实现思路:猜测应该是GOP播放+DNS前提预加载+FIFO【抖音】抖音的动效 实现思路:着色器编程实现【唱吧】视频裁剪、滤镜、特效、视频预览 实现思路:没有用FFmpeg,猜测是本地的硬解,可以用Android的本地硬解处理【西瓜视频】变速播放 实现思路:FFmpeg中的libavfilter实现【Soul】萝莉变音 实现思路: Fmod VS SoundTouch 没有时间逆向猜测是用的这其中的一种播放器架构设计实现业务层面思考MediaPlayer+SurfaceView+MediaController可以实现和扩展,也可以Android做UI层和业务逻辑控制,C做解码处理,surface做数据的播放,也可以整合三方的库做多库的切换。我们采用自己实现编解码。
UI层交互思考播放器在不同场景下,UI和功能难免有所差异,出于避免功能交互耦合问题,播放器封装一定要支持用户自定义控制器。
窗口切换无缝衔接、悬浮窗切换、自定义手势识别器目前是关注的几个点。