iOS视频直播用到的协议
一 、流媒体
1 - 伪流媒体
1.1 扫盲:边下载边播放
1.2 伪流媒体:视频不是实时播放的,先把视频放在数据库,再供客户端访问,比如:优酷,爱奇艺等
1.3 特点:
边下边存,文件会保存.
遵守了 HTTP 协议,但是没有遵守 RTMP 和 HLS 协议
能够实现快进和快退的功能
实现简单,成本低
2 实时流媒体
2.1 真正的流媒体,边下边播,但不会保存下载的文件
2.2 特点:
下载的文件不会保存
遵守了 RTMP 或者 HLS 协议
只能实现实时播放,不能快进或者快退
实现成本比较高,实现复杂
3 常见的流媒体协议: HLS(苹果基于 HTTP 开发的流媒体协议),RTMP(Adobe 的私有协议),MMS (微软).
HLS协议
1 HLS: HTTP Live Streaming 是苹果公司实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,为iOS设备提供音视频直播和点播方案.2 直播原理:通过相关设备采集摄像头的视频和麦克风的音频,并实时进行 H264视频编码和 AAC 音频音频编码,并按照 HLS协议规范,转换为标准的 TS文件以及m3u8(是一个地址,里面记录了服务器多对应的文件)索引文件.
3 HLS 点播:就是对 HTTP 进行分段播放,不同的就是在于对 HTTP 进行的分段非常小,因此可以说, HLS 点播的重点就是对 HTTP 进行分段.(现在的分段技术比较常见不在赘述)
4 HLS 直播原理:和其他的常见的直播协议(如: RTMP,RTSP,MMS)不同, 遵守HLS 协议的直播在客户端接收到的并不是完整的数据流. 即HLS 协议的服务器将最新获取到的片段进行分割为小片段,客户端获取服务器刚编好的最新的片段进行播放.这样服务器端不断的获取新的数据进行分割成新的片段,客户端不断的从服务器端获取最近的片段进行播放.由此可以说 HLS 是以点播的形式实现的直播.
5 HLS 的特点:由于数据是通过 HTTP 传输的,所以不用考虑防火墙和代理的问题,由于分割的时长很短,所以客户端可以很快的实现码率切换,以适应不同的带宽.HLS 协议的延迟一般会高于其他协议的流媒体直播.
6 HLS 实现步骤采取视频源和音频源数据对原始数据尽心 H264和 ACC 编码视频和音频数据封装为 MPEG-TS 包 HLS 分段生成策略以及 m3u8索引文件 HTTP 传输协议
注:需要说明的是 HLS 分段策略的分段时长以10S 为最好.
二 、RTMP 协议
1 RTMP 实时消息传输协议,是现在比较常用的协议
2 RTMP使用原理:首先推流到 RTMP 服务器,然后再有 RTMP 服务器提供 RTMP 视频服务.
注:需啊说明的是:RTMP 也提供 HLS, 将音视频切位 ts 流,然后用户可以直接播放 m3u8流媒体.
3 RTMP协议规定
3.1 建立一个网络连接
3.2 建立一个网络流(发送多媒体的通道)
注:只能建立一个网络连接,但是可以建立多个网络流
4 RTMP 协议使用步骤
4.1 握手:RTMP 协议都是以握手开始的
客户端先发送 C0,C1两个数据块,服务器收到 C1或者 C2块的时候开始发送 S0和 S1
客户端收齐 S0和 S1的时候开始发送 C2,当服务器收齐 C0和 C1的时候开始发送 S2
当客户端收到 S2同时服务器收到 C2 的时候,握手完成
4.2 建立连接:建立客户端和服务器端的网络连接
> 客户端发送命令消息中的”connect”,到服务器,请求与一个服务器应用实例建立连接
> 服务器接收到请求后,发送确认消息,同时连接到请求中的连接实例
> 服务器发送设置带宽协议消息到客户端
> 客户端接收到 设置带宽 消息之后,发送确认消息到服务器
> 服务器发送用户控制消息中的”stream”消息到客户端
> 服务器发送消息命令中的”结果”消息到客户端
4.3 建立流:建立客户端和服务器端的”流连接”
> 客户端发送消息命令中的”创建流”到服务器
> 服务器接收到”创建流”命令后,发送”结果”命令到客户端
4.4 播放传输音视频数据
> 客户端发送”播放”命令到服务器
> 服务器收到消息后,发送 设置消息大小协议消息
> 服务器发送” streambegin”,告知客户端流 ID
> 若播放成功的话,服务器发送”响应状态”到客户端.告知客户端播放成功
> 服务器发送客户端要播放是数据
流媒体的播放
1 HLS 的流媒体通过AVPlayer/AVPlayerViewController 和 MPMviePlayerController/MPMoviePlayerViewController 来实现.
2 RTMP 的流媒体要用第三方框架实现 如 FFMpeg ,IJKPlayer和 VLC 等
3 常用的流媒体框架:百度/阿里/腾讯/网易/斗鱼直播伴侣/七牛云等
iOS视频直播用到的协议的更多相关文章
- 最近这么火的iOS视频直播
快速集成iOS基于RTMP的视频推流 http://www.jianshu.com/p/8ea016b2720e iOS视频直播初窥:高仿<喵播APP> http://www.jiansh ...
- iOS视频直播初窥:高仿<喵播APP>
视频直播初窥 视频直播,可以分为 采集,前处理,编码,传输, 服务器处理,解码,渲染 采集: iOS系统因为软硬件种类不多, 硬件适配性比较好, 所以比较简单. 而Android端市面上机型众多, 要 ...
- Android&iOS视频直播之旅
现在的移动互联网时代,大家的网速真是越来越快,高带宽的WIFI和覆盖率极大的4G,4G+把手机观看视频直播推上了风口浪尖,越来越多的应用在玩手机视频直播,我们做的应用里也要嵌入视频直播. 这篇文章里我 ...
- iOS视频直播
视频直播技术点 视频直播,可以分为 采集,前处理,编码,传输, 服务器处理,解码,渲染 采集: iOS系统因为软硬件种类不多, 硬件适配性比较好, 所以比较简单. 而Android端市面上机型众多, ...
- IOS 视频直播/智能家居(一行行敲代码,从零开始)lesson:1整体架构
本文转载至 http://blog.csdn.net/u014011807/article/details/47144027 前段时间由于工作需要做了一个视频直播/智能家居类的应用.算是对iOS音视频 ...
- iOS 视频直播
ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijk ...
- iOS 视频直播弹幕的实现
弹幕,并不是一个多么复杂的功能. 1.弹幕的实现性分析 首先,从视觉上明确当前弹幕所具有的功能 从屏幕右侧滑入左侧,直至完全消失 不管是长的弹幕,还是短的弹幕,速度一致(可能有的需求是依据弹幕长度,调 ...
- iOS直播-播放基于RTMP协议的视频
iOS直播-播放基于RTMP协议的视频 流媒体协议介绍 1. 伪流媒体: 渐进式下载 : 边下边存, 文件会保存 使用http协议,也能够实现视频播放, 也能快进快退等, 体验上跟流媒体很像. 优酷, ...
- 超强教程:如何搭建一个 iOS 系统的视频直播 App?
现今,直播市场热火朝天,不少人喜欢在手机端安装各类直播 App,便于随时随地观看直播或者自己当主播.作为开发者来说,搭建一个稳定性强.延迟率低.可用性强的直播平台,需要考虑到部署视频源.搭建聊天室.优 ...
随机推荐
- EOJ 3.30 A. 打工时不可能打工的【贪心】
[链接]:https://acm.ecnu.edu.cn/contest/59/problem/A/ A. 打工时不可能打工的 Time limit per test: 2.0 seconds Mem ...
- SpringBoot第十一篇:SpringBoot+MyBatis+Thymelaf实现CRUD
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10936304.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言 总结前面几 ...
- python测试网络可达性的方法
1.ping连通性测试 #!/usr/bin/env python #-*- coding: utf-8 -*- import os,sys,re import subprocess def NetC ...
- Windows网络编程 2 【转】
Windows网络编程使用winsock.Winsock是一个基于Socket模型的API,在Windows系统中广泛使用.使用Winsock进行网络编程需要包含头文件Winsock2.h,需要使用库 ...
- 【温故知新】——Bootstrap响应式知识点复习
前言:本文是自己在学习课程中的课程笔记,这里用来温故知新的,并非本人原创. 开发工具 1.记事本,Editplus,... ... 2.Sublime,Dreamweaver 3.Webstorm = ...
- java 环境变量配置 Mac
大家在windows里面配置JDK环境变量很容易,但是如果要在mac里面配置JDK环境变量和windows里面有所不同,具体如下: 第一: mac OS里面自带jdk,不过是1.6的版本,现在很多人使 ...
- java类中,成员变量赋值第一个进行,其次是静态构造函数,再次是构造函数
如题是结论,如果有人问你Java类的成员初始化顺序和初始化块知识就这样回答他.下面是代码: package com.test; public class TestClass{ // 成员变量赋值第一个 ...
- Kali Linux 2.0安装光盘分享
Kali Linux 2.0安装光盘分享 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I ...
- js 查找一串字符串中一段字符
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【Excle数据透视】如何用含有单元格的数据来创建数据透视
取消合并单元格,填充相同内容项,然后创建数据透视表. 如下图:需要使用数据创建数据透视表 步骤一 开始→格式刷,然后对单元格区域G2:G15使用格式刷功能,保留合并单元格格式 步骤二 选中A2:A18 ...