在自己研究生毕业的时候,想着能找上一份做视频编解码的工作,可惜没有如愿,最后到了一家iOS游戏渠道公司去做游戏支付业务的SDK开发,我的iOS正式开发生涯就这么开始了。

在那家iOS游戏渠道没做上一年,就离职了,至于怎么离职的,后续文章会谈一谈,以此来梳理下自己的职业规划。说了这多了,进入正题吧,今年3月份找上了一家做音视频服务的公司,做iOS播放器的开发,职位是播放器开发工程师,就是我现在所在的公司咯。

要开发一套属于自己的播放器库,不利用移动设备上自带的播放器来播放音频、视频,要用到哪些知识点呢,下面以我熟悉公司播放器库的前提下,说一说我的看法。

任何客户端只要跟服务器打交道,少不了通讯协议。音视频这块涉及的实时流相关协议很多,有RTSP、RTMP、MMS、HLS、RTP、RTCP、SDP、TCP、UDP、HTTP等。

客户端从服务器上获取到的音视频数据,要知道容器与编码方式的区别,封装音视频数据的容器类型主要有AVI (*.avi)、MPG (*.mpg/*.mpeg/*.dat)、VOB (*.vob)、MP4、3GP、ASF (*.wmv/*.asf)
、RM (*.rm/*.rmvb)、MOV (*.mov)、MKV
、WAV、TS。

客户端从服务器上获取到了音视频数据,该如何进行解码显示,首先要知道音频、视频的的编码方式,客户端要显示音视频数据需要根据编码的方式进行相应的解码操作,目前常见的编码类型有MPEG系列、H.26X系列、微软windows media系列、Real Media系列、QuickTime系列。

上面说到了一些流媒体协议、流媒体数据的封装类型以及编码方式。而我们要做一款播放器首先是要对以上知识要了解的。

公司的业务涉及最多的是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 *、函数指针、回调函数)

内存管理(堆区、栈区、静态区、内存对齐)

数据结构(单链表)

谈一谈做iOS播放器库开发所涉及的知识点的更多相关文章

  1. iOS播放器 - AVPlayer

    之前有说到在播放器中一点点小技巧,现在正式记录一下AVPlayer. 这里主要是说明用AVPlayer做音乐播放器的功能实现,所以不介绍AVPlayer中那个图层类. 首先我们要声明一下播放器,这里有 ...

  2. C#做音乐播放器时在自动下一曲中报异常的解决办法

    ---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 在利用Media Player做音乐播放器的时 ...

  3. 使用 electron 做个播放器

    使用 electron 做个播放器 本文同步更新在:https://github.com/whxaxes/blog/issues/8 前言 虽然 electron 已经出来好长时间了,但是最近才玩了一 ...

  4. Android音乐播放器的开发实例

    本文将引导大家做一个音乐播放器,在做这个Android开发实例的过程中,能够帮助大家进一步熟悉和掌握学过的ListView和其他一些组件.为了有更好的学习效果,其中很多功能我们手动实现,例如音乐播放的 ...

  5. 笔谈kxmovie开源播放器库的使用

    开源播放器项目 kxmovie(https://github.com/kolyvan/kxmovie),现在仍然是很多刚开始接触播放器开发的程序员的参照范本.以下是我操作kxmovie项目的过程: ( ...

  6. iOS播放器 - AVAudioPlayer

    今天记录一下AVAudioPlayer,这个播放器类苹果提供了一些代理方法,主要用来播放本地音频. 其实也可以用来播放网络音频,只不过是将整个网络文件下载下来而已,在实际开发中会比较耗费流量不做推荐. ...

  7. 自定义css样式结合js控制audio做音乐播放器

    最近工作需求需要播放预览一些音乐资源,所以自己写了个控制audio的音乐播放器. 实现的原理主要是通过js调整audio的对象属性及对象方法来进行控制: 1.通过play().pause()来控制音乐 ...

  8. 用mciSendString做音乐播放器

    音乐操作类 public class clsMCI { public clsMCI() { // // TODO: 在此处添加构造函数逻辑 // } //定义API函数使用的字符串变量 [Marsha ...

  9. iOS播放器、Flutter高仿书旗小说、卡片动画、二维码扫码、菜单弹窗效果等源码

    iOS精选源码 全网最详细购物车强势来袭 一款优雅易用的微型菜单弹窗(类似QQ和微信右上角弹窗) swift, UITableView的动态拖动重排CCPCellDragger 高仿书旗小说 Flut ...

随机推荐

  1. SDM439平台出现部分机型SD卡不能识别mmc1: error -110 whilst initialising SD card【学习笔记】

    SDM439平台出现部分机型SD卡不能识别mmc1: error -110 whilst initialising SD card 打印了如下的log: - ::>[ after ms - :: ...

  2. 第2课第5节_Java面向对象编程_异常_P【学习笔记】

    摘要:韦东山android视频学习笔记  java的异常处理的原则如下: 1.我们先写一个没有对异常处理的程序,在进行除法运算的时候,除数是非零的话,运行时没有问题的,但是除数为零的时候,运行就会有问 ...

  3. 安装Rancher容器化管理平台

    卸载已有的避免冲突 yum remove docker  docker-common docker-selinux docker-engine   安装需要的软件包,yum-util 提供yum-co ...

  4. [E2E_L9]Linux命令行上传文件到百度网盘

    百度有2TB 存储空间,在有第三方服务器的情况下,很多东西不需要下载到本地,可以直接使用服务转存,这非常好. 系统环境: Linux 系统 + Python 2.7 安装软件工具:[可能会要重复装] ...

  5. asp.net core mvc 读取配置文件appsettings.json

    上一篇我们将了读取自定义配置文件.这篇我们讲一下asp.net core mvc里读取自带的配置文件 appsettings.json 首先创建个asp.net core mvc项目,项目里有Prog ...

  6. Tomcat中加载不到项目 项目构建Deployment Assembly报错:The given project is not a virtual component project

    转:   The given project is not a virtual component project The given project is not a virtual compone ...

  7. [Bayes] Concept Search and LDA

    重要的是通过实践更深入地了解贝叶斯思想,先浅浅地了解下LDA. 相关数学知识 LDA-math-MCMC 和 Gibbs Sampling LDA-math - 认识 Beta/Dirichlet 分 ...

  8. Python中解决递归限制的问题

    在做某些算法时,使用递归会出现类似下面的报错: RuntimeError: maximum recursion depth exceeded python默认的递归深度是很有限的,大概是900多的样子 ...

  9. 【tensorflow基础】Tensorpack-API

    安装 pip install tensorpack 使用 参考 1. Tensorpack: 2. Tensorpack,一个基于TensorFlow的神经网络训练界面,源码包含很多示例: 完

  10. docker安装+docker-compose

    1.docker安装 yum install -y yum-utils device-mapper-persistent-data yum-config-manager --add-repo http ...