本次文章主要是给大家分享音视频的入门学习路线,虽然我之前写过,但是这次我会结合最新接触到不同层次的人来做一个总结分享!当然还是以入门为主,技术点都是当下企业要求必须要掌握的!
事先说明一下,文章当中难免有不足之处,还望大家多多指正!
一、学习音视频的门槛高不高?
毋庸置疑,在音视频行业是有技术门槛的,同时学习资料(包括书籍之类的,非常少!)非常少,可以说,市面上系统的音视频书籍非常少,不信大家可以自行去各个网站搜索一下。
不止是书籍方面,连可用的工具都非常少。。。。
总之学习资料这块对新人来说,非常不友好!
二、嵌入式音视频该怎么学习?
我个人认为,首先你得先对基本的音视频理论知识有基本的了解和掌握,比如说:
- 1、什么是像素点、分别率?
- 2、什么是帧率、码率?
- 3、什么是rgb、yuv、pcm?
我这只是简单的列举了几个例子,这里面在工作当中会涉及到实际的工程问题,所以不展开讲,只是告诉你这些是必须要掌握的基础知识点。
接下来呢,我想说的是,毕竟我们光学习理论肯定是不行的,特别是我们搞嵌入式的,必须要和硬件打交道,所以你必须要准备一块开发板才行;市面上,我个人比较推荐的芯片平台是:
- 1、瑞芯微
- 2、海思
相对来说的话,海思的学习资料多点,不过瑞芯微的对ai这块给的案例不错,有非常多的识别算法模型!
本篇文章,我以我手上有的瑞芯微开发板为例,来给大家讲讲如何学习?
首先,我们肯定是看sdk下面官方提供的文档:
因为我们重点是在音视频,所以我们重点先放在多媒体框架上,不同的芯片平台都会有一个自己封装的多媒体框架(简称mpp):
mpp平台的展开:
这块你可以结合手册去自己总结一下流程:编码-音频和视频处理-解码!
然后手册很多的接口,不用每个都看,这个时候,你可以结合官方给的mpp源码去学习,不过我这里比较先推荐的是官方给的实际工程demo去编译烧写到开发板里面去,看看实际效果:
比如上面的这个编码案例,同时这个又可以通过rtsp协议发送码流给客户端,所以你可以借助vlc或者ffmpeg去进行拉流,就可以实时看到摄像头采集的画面了;然后你再去仔细学习里面的代码,这样你就可以快速的掌握编码流程;看代码时候,可以结合刚才的手册去看,每个接口都可以在手册上找到,所以我刚才说,这些接口你不用去死记硬背,完全没有必要!
在这个编码案例当中,你在看的时候呢,你可以去修改一些参数,比如上面说的码率大小或者帧率大小,修改完之后呢,再去验证一下,画面会不会有什么变化,如果有变化的话,通过这种实操性的实验,你就能很快的掌握一些基础理论知识,也不用去死记硬背!
再深入一点,你可以去适配一下不同的sensor,这块就涉及到一点驱动的知识,只要适配过一次,基本下次你就有经验了;而且平时的开发过程中,我们会经常接触到以下以下功能需求:
- osd叠加显示
- 移动侦测
- 智能编码
- 抓拍
- 缩放显示
- 隐私遮挡
这些官方都有给案例,我们可以从案例去掌握,然后再到实际开发当中结合业务去变通就行了。
三、还有哪些音视频知识点需要掌握?
1、流媒体协议:
面试或者实际工作当中,接触比较多的流媒体传输码流协议:
- rtsp
- rtmp
那我们该怎么去学习这些协议呢?
相信大部分人,一开始可能是先看理论知识,也就是看一些博客;恩,从我个人的角度来看,这个没有错的,但同时,我相信大部分刚开始学习的人,看完之后,还是一头雾水,或者你还是没有掌握到学习一个陌生的传输协议的共性:
- 也就是协议头+协议体
恩,有了这个共性后,你可能还是雾水,因为一个协议里面,太多的知识点了,何况你是第一次学习,很陌生。
我们平时开发,对新东西的掌握,都是经历一个折腾期,才会领悟的更深。
所以对于我们学习的时候来说,特别是流媒体传输协议,我更加推荐抓包去学习传输协议,比如上面的编码rtsp代码案例,你可以用wireshark去抓包分析,比如:
ffplay拉流:
开始抓包分析:
- rtsp的交互请求过程:
- rtp传输码流过程:
- rtcp传输信息记录:
通过这样的实操分析实验,这会让你对rtsp协议理解的更深一点。
最后就是代码实现这个过程,网上可以找到很多代码,自己去参考用c语言去实现,当然rfc3550手册里面有给demo:
https://www.rfc-editor.org/rfc/rfc3550
以上是我对流媒体传输协议学习的一个经验分享!
2、封装容器和h264:
这里我给一些常见的封装容器去学习:
- flv
- mp4
- ts
然后是对码流进行编码和解码处理,这个肯定要先学习h264,这里主要是要掌握:
- 什么是I、B、P帧?
- NALU的码流结构
- rtp对h264的打包方式的实现掌握,也就对h264裸流数据进行打包处理
我这里有很多细节没有说哈,这个只是给大家总结要重点要掌握的知识提纲
3、多媒体开源库:
- ffmpeg
- gstreamer
这里我更推荐学习ffmpeg,具体如何学习,今天这里一下讲不完,后面我会专门出一篇文章,来讲解如何学习ffmpeg!
4、v4l2:
如果你对底层的东西比较感兴趣的话,也可以学习Linux内核里面的v4l2:
最后:
这篇文章,我还没有展开讲解音频有关的东西,个人建议,你只要掌握了视频的学习方法,音频学习方法是类似了,自然就会有自己的学习方法!
好了,今天的分享就到这里了。文章难免有不足之处!
同时有任何问题,也可以与笔者交流,共同进步! 本文来自“txp玩Linux”,感兴趣的朋友可以加他微信
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。