前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

音视频零基础到岗位开发实战训练大纲-项目编码篇

qiguaw 2024-09-03 17:41:10 资源文章 22 ℃ 0 评论

音视频训练营大纲-项目编码篇

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和功能难免有所差异,出于避免功能交互耦合问题,播放器封装一定要支持用户自定义控制器。

窗口切换无缝衔接、悬浮窗切换、自定义手势识别器目前是关注的几个点。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表