在自己研究生毕业的时候,想着能找上一份做视频编解码的工作,可惜没有如愿,最后到了一家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. Spring 事务模板方法设计模式

    接上一篇文章 上一篇讲到了doGetTransaction方法 一.模板方法设计模式 这里涉及到了一个经典的设计模式:模板方法 如下图: AbstractPlatformTransactionMana ...

  2. gogs 邀请协作者 500错误

    触发原因: 对db文件的user表删了某个用户导致 解决: 注册个新用户,把id改成原来的id(默认都会自增长)

  3. v-if和v-for一起使用的几个方法

    方法一(推荐): 不带if <ul> <li v-for="(item, index) in list" :key="index" > ...

  4. Ingress-nginx 部署使用

    Ingress-nginx 部署使用   一.Ingress 简介 在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的.为了使外部的应用能够访问集群内 ...

  5. PostgreSQL中的索引(一)

    引言 这一系列文章主要关注PostgreSQL中的索引. 可以从不同的角度考虑任何主题.我们将讨论那些使用DMBS的应用开发人员感兴趣的事项:有哪些可用的索引:为什么会有这么多不同的索引:以及如何使用 ...

  6. openresty开发系列33--openresty执行流程之2重写赋值阶段

    openresty开发系列33--openresty执行流程之2重写赋值阶段 一)重写赋值阶段 1)set_by_lua 语法:set_by_lua $res <lua-script-str&g ...

  7. python问题集

    1.selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in P ...

  8. TeslaManage 运行日志

    “TeslaManage.exe”(Win32): 已加载“F:\TeslaManageProject\TeslaManage\x64\Debug\TeslaManage.exe”.已加载符号.“Te ...

  9. harbor镜像仓库-https访问配置

    1. 证书的生成 在测试或开发环境中,您可以选择使用自签名证书,而不是来自受信任的第三方CA的证书.以下内容将向您展示如何创建自己的CA,并使用您的CA签署服务器证书和客户端证书.   1.1 生成c ...

  10. 【Python学习之一】Python安装、IDE安装配置

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python2.X python3.X 所谓安装Python,安装的是 ...