我们要做一款播放器首先是要对以上知识要了解的。
公司的业务涉及最多的是rtsp这块。服务器端为rtsp流媒体服务器,客户端也就是播放器库采用FFMpeg进行解码、OPenGL ES进行YUV视频数据渲染。
播放器库与服务器端进行交互,涉及到RTSP协议的请求,传输层协议采用的TCP、UDP协议,所以要对TCP连接的三次握手要熟悉,这其中也就涉及到网络编程中的SOCKET编程知识了,BSD socket编程是需要掌握的。
播放器库对从服务器上请求到的音频、视频rtp包,要进行解包,就是去掉一些协议的头获取到音视频数据段。获取到这些数据后,不能直接播放,需
要进行解码操作。视频解码出来一般为Planar 4:2:0 YUV格式。要显示YUV视频图像就需要利用OPenGL ES进行渲染了。
播放器在工作时,视频数据要进行解码放入数据缓存区,数据缓存区的解码后的数据被取出交给OpenGL进行渲染,所以多线程是必不可少的环节
了。开辟2个线程,一个线程进行解码处理,另一个线程进行视频数据的渲染。多线程中常使用的是POSIX thread多线程编程。
虽然开发的iOS播放器库,但是底层的东西大部分是c语言的东西,比如用到开源库FFMpeg,以及一些上层的对FFMpeg的封装,数据缓存区,所以c语言和数据结构的基础要扎实,什么函数指针,内存分配与管理,数据结构中的单链表那得玩得比较溜。
总结一下,需要具备的知识有
rtsp、sdp、tcp、udp、ip协议(rtsp的DESCRIBE、OPTION、SETUP、PLAY、PAUSE、TEARDOWN;tcp连接的三次握手/断开的四次握手)
socket(bsd socket)
多线程(posix thread)
opengl es
FFmpeg(知道用它来解码)
YUV420(知道它的原理与格式)
音视频同步(时间戳的处理)
C语言指针(void *、函数指针、回调函数)
内存管理(堆区、栈区、静态区、内存对齐)
数据结构(单链表)