IOS 视频直播/智能家居(一行行敲代码,从零开始)lesson:1整体架构
前段时间由于工作需要做了一个视频直播/智能家居类的应用。算是对iOS音视频专栏中流媒体处理做了一次小结。这里想把整个开发流程纪录下来,一方面是和大家共同探讨学习,另一方面也可以方便自己以后查漏补缺。
整个开发没有借助任何第三方框架,所有流媒体协议都是一行行敲上去的,为什么呢?呵呵 授之以鱼不如授之以渔!
下面开始先了解下整个软件的架构。
前端我们在IOS audio&video 专栏中已经介绍的非常详细了,包括摄像头、音视频的各种处理都做了详细的分析。后端我们也在IOS audio&video 专栏的FFmpeg中、高级使用中也做了详细的介绍,这里也不再讨论。下面就网络部分做详细的分析。
(1)RTCP
RTCP:RTP Control Protocol,实时传输控制协议,一般和RTP配合使用,主要用于数据传输的监视,控制功能。同时RTCP是基于UDP传输的。RTCP传输的这些信息非常重要,主要包括:时间戳(用于同步)、序列号(用于丢包和重排序检测)、以及负载格式(用于说明数据的编码格式)。简单概括一下,就是用于QoS反馈和同步媒体流。与RTP比较而言,其带宽一半占用只有RTP的5%左右。非常小。
根据不同的使用状态,RTCP分为下面几种情况:
直播、智能家居类项目只要用到发送端报告,这里我们会在后面的代码中详细分析。
(2)RTP
Real-time Transport Protocol,实时传输协议,一般用于多媒体数据的传输。音视频主要通过这个协议传输,它是建立在UDP协议上的,效率更高但允许丢包。所以在媒体重组时需要做不少工作。RTP协议包格式如下:
(3)SDP
我们先来看看抓包的网络请求过程:
服务器响应数据。我们关心的部分:RTSP
response=RTSP/1.0 200 OK
CSeq: 1
Content-base: rtsp://192.168.36.168/
Date: 2015年7月29日 GMT+8下午2:52:00
Content-Type:application/sdp
Content-Length:424
SDP部分:
v=0
o=-1804289383 1804289383 IN IP4 192.168.36.168
s=Livestream from iOS
c=INIP4 0.0.0.0
t=00
a=control:*
m=video0 RTP/AVP 96
b=TIAS:85528
a=maxprate:9.0000
a=control:streamid=1
a=rtpmap:96H264/90000
a=mimetype:string;"video/H264"
a=framesize:96720-480
a=Width:integer;720
a=Height:integer;480i
a=fmtp:96packetization-mode=1;profile-level-id=64001e;sprop-parameter-sets=Z2QAHqxWwLQ9pqAgICBA,KO4CPLA=
可以很清晰的看到RTSP协议是包含两部分的,第一部分为rtsp传输协议,另一部分是SDP协议。SDP准确的说其实不能算是传输层协议,而要规划到会话层协议部分。SDP(SessionDescription Protocol)是服务器端生成的描述媒体文件的编码信息以及所在服务器的链接等信息的文件,客户端通过它来设置播放软件的参数。
(4)RTSP
有了以上的分析,我们基本了解了整个结构,那么还剩下最后一部分,RTSP协议。实时流传输协议,是TCP/IP协议体系中的一个应用层协议。和Http协议类似。至于协议的具体结构我们放在后面和代码一起讲。
下面看看一个RTSP流媒体交互的简单过程:这是一个比较典型的请求过程:
1. Client->Server:OPTION request //询问S有哪些方法可用
1. Server->Client:OPTION response //S回应信息中包括提供的所有可用方法
2. Client->Server:DESCRIBE request //要求得到S提供的媒体初始化描述信息
2. Server->Client:DESCRIBE response //S回应媒体初始化描述信息,主要是sdp
3. Client->Server:SETUP request //设置会话的属性,以及传输模式,提醒S建立会话
3. Server->Client:SETUP response //S建立会话,返回会话标识符,以及会话相关信息
4. Client->Server:PLAY request //C请求播放
4. Server->Client:PLAY response //S回应该请求的信息
Server->Client:发送流媒体数据
5. Client->Server:TEARDOWN request //C请求关闭会话
5. Server->Client:TEARDOWN response //S回应该请求
IOS 视频直播/智能家居(一行行敲代码,从零开始)lesson:1整体架构的更多相关文章
- 最近这么火的iOS视频直播
快速集成iOS基于RTMP的视频推流 http://www.jianshu.com/p/8ea016b2720e iOS视频直播初窥:高仿<喵播APP> http://www.jiansh ...
- iOS视频直播初窥:高仿<喵播APP>
视频直播初窥 视频直播,可以分为 采集,前处理,编码,传输, 服务器处理,解码,渲染 采集: iOS系统因为软硬件种类不多, 硬件适配性比较好, 所以比较简单. 而Android端市面上机型众多, 要 ...
- iOS 视频直播
ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijk ...
- Android&iOS视频直播之旅
现在的移动互联网时代,大家的网速真是越来越快,高带宽的WIFI和覆盖率极大的4G,4G+把手机观看视频直播推上了风口浪尖,越来越多的应用在玩手机视频直播,我们做的应用里也要嵌入视频直播. 这篇文章里我 ...
- iOS视频直播
视频直播技术点 视频直播,可以分为 采集,前处理,编码,传输, 服务器处理,解码,渲染 采集: iOS系统因为软硬件种类不多, 硬件适配性比较好, 所以比较简单. 而Android端市面上机型众多, ...
- iOS视频直播用到的协议
一 .流媒体 1 - 伪流媒体 1.1 扫盲:边下载边播放1.2 伪流媒体:视频不是实时播放的,先把视频放在数据库,再供客户端访问,比如:优酷,爱奇艺等 1.3 特点: 边下边存,文件会保存.遵守了 ...
- iOS 视频直播弹幕的实现
弹幕,并不是一个多么复杂的功能. 1.弹幕的实现性分析 首先,从视觉上明确当前弹幕所具有的功能 从屏幕右侧滑入左侧,直至完全消失 不管是长的弹幕,还是短的弹幕,速度一致(可能有的需求是依据弹幕长度,调 ...
- 视频直播SDK-ios版
IOS视频直播接入说明 一.名词解释 分辨率:用于计算机视频处理的图像,以水平和垂直方向上所能显示的像素数来表示分辨率.常见视频分辨率的有1080P即1920x1080,720P即1080x720,6 ...
- 超强教程:如何搭建一个 iOS 系统的视频直播 App?
现今,直播市场热火朝天,不少人喜欢在手机端安装各类直播 App,便于随时随地观看直播或者自己当主播.作为开发者来说,搭建一个稳定性强.延迟率低.可用性强的直播平台,需要考虑到部署视频源.搭建聊天室.优 ...
随机推荐
- Linux 安装 Oracle 11g R2
一.安装环境 Linux服务器:Centos 6.4 64位 Oracle服务器:Oracle11gR2 64位 二.系统要求 Linux安装Oracle系统要求 系统要求 说明 内存 必须高于1G的 ...
- 第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表、课程章节表、课程视频表、课程资源表
第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表.课程章节表.课程视频表.课程资源表 创建名称为app_courses的 ...
- e866. 确定可用外观
UIManager.LookAndFeelInfo[] info = UIManager.getInstalledLookAndFeels(); for (int i=0; i<info.len ...
- Maven使用国内镜像
^_^ <mirrors> <!-- mirror | Specifies a repository mirror site to use instead of a given re ...
- Python——hmac
该模块在Python中实现 RFC 2104 中规范的 HMAC 算法. 目录 一.HMAC 对象 1. HMAC.update() 2. HMAC.digest() 3. HMAC.hexdiges ...
- Python资料收藏(杂乱版)
http://blog.csdn.net/vagrxie/article/category/343814 http://blog.sina.com.cn/s/articlelist_280149524 ...
- R语言igraph 包-构建网络图
igaph 是一个项目,目标是建立一条简单,易用的网络分析工具,有 R, python, C/C++ 等语言的具体实现: 项目主页: http://igraph.org/ 在R语言中,对应的就是 ig ...
- Linux 下 CPU 使用率与机器负载的关系与区别
原文链接: http://blog.chinaunix.net/uid-28541347-id-4926054.html 当我们使用top命令查看系统的资源使用情况时会看到load average, ...
- Java多线程——Lock&Condition
Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象.两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象. package ...
- 安卓开发笔记——ListView加载性能优化ViewHolder
在前不久做安卓项目的时候,其中有个功能是爬取某网站上的新闻信息,用ListView展示,虽然做了分页,但还是觉得达不到理想流畅效果. 上网查阅了些资料,发现一些挺不错的总结,这里记录下,便于复习. 当 ...