rtmp协议

iOS - 直播总结(理论到实践)

坚强是说给别人听的谎言 提交于 2020-01-19 01:05:59
一、直播原理及流程 1.一个完整直播app原理 直播原理 :把主播录制的视频,推送到服务器,在由服务器分发给观众观看。 直播环节 :推流端(采集、美颜处理、编码、推流)、服务端处理(转码、录制、截图、鉴黄)、播放器(拉流、解码、渲染)、互动系统(聊天室、礼物系统、赞) 2.直播app实现流程 1.采集、2.滤镜处理、3.编码、4.推流、5.CDN分发、6.拉流、7.解码、8.播放、9.聊天互动 直播流程.png 3.直播app架构 直播架构.png 4.直播app技术点 二、直播基础知识介绍: 1.采集视频、音频 * 1.1 采集视频、音频编码框架 * AVFoundation :AVFoundation是用来播放和创建实时的视听媒体数据的框架,同时提供Objective-C接口来操作这些视听数据,比如编辑,旋转,重编码 * 1.2 视频、音频硬件设备 * CCD :图像传感器: 用于图像采集和处理的过程,把图像转换成电信号。 拾音器 :声音传感器: 用于声音采集和处理的过程,把声音转换成电信号。 音频采样数据 :一般都是PCM格式 视频采样数据 : 一般都是 YUV ,或 RGB 格式,采集到的原始音视频的体积是非常大的,需要经过压缩技术处理来提高传输效率 2.视频处理(美颜,水印) 视频处理原理 :因为视频最终也是通过GPU,一帧一帧渲染到屏幕上的,所以我们可以利用OpenGL

音视频之——FFmpeg教程(二)——Windows10下搭建nginx-rtmp流媒体服务器

送分小仙女□ 提交于 2020-01-16 14:17:14
前言 前一篇我们知道了如何 配置FFmpeg开发环境 ,接下来,就开始简单的推流吧。说到推流前,我们要知道常用的几个直播推流协议。 直播推流协议 在搭建服务之前先了解下目前主流的几个直播协议: RTMP: 实时消息传输协议,Real Time Messaging Protocol,是 Adobe Systems 公司为 Flash 播放器和服务器之间音频、视频和数据传输开发的开放协议。协议基于 TCP,是一个协议族,包括 RTMP 基本协议及 RTMPT/RTMPS/RTMPE 等多种变种。RTMP 是一种设计用来进行实时数据通信的网络协议,主要用来在 Flash/AIR 平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。这种方式的实时性比较强,基本能保证延迟在1-2s内,是现在国内直播主要采用的方式之一;不过使用这种协议,就必须安装flash,而H5、IOS、Android并不能原生支持flash,因此这种协议能流行多久,就不得而知了,毕竟移动端才是现在的主流。 HLS: hls是Apple推出的直播协议,是通过视频流切片成文件片段来直播的。客户端首先会请求一个m3u8文件,里面会有不同码率的流,或者直接是ts文件列表,通过给出的ts文件地址去依次播放。在直播的时候,客户端会不断请求m3u8文件,检查ts列表是否有新的ts切片。这种方式的实时性较差

hls 协议

家住魔仙堡 提交于 2020-01-16 11:28:50
HTTP Live Streaming (缩写是 HLS )是一个由苹果公司提出的基于Http协议的的 流媒体网络传输协议 。是苹果公司 QuickTime X 和 iPhone 软件系统的一部分。 它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的 extended M3U (m3u8) playlist 文件,用于寻找可用的媒体流 。 HLS协议的优点: 1.跨平台性:支持iOS/Android/浏览器,通用性强。 2.穿墙能力强:由于HLS是基于HTTP协议的,因此HTTP数据能够穿透的防火墙或者代理服务器HLS都可以做到,基本不会遇到被防火墙屏蔽的情况。 3.切换码率快(清晰度):自带多码率自适应,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。 3.负载均衡:HLS基于无状态协议(HTTP),客户端只是按照顺序使用下载存储在服务器的普通TS文件,做负责均衡如同普通的HTTP文件服务器的负载均衡一样简单。 HLS的缺点: 1.实时性差:苹果官方建议是请求到3个片之后才开始播放

前段播放 流媒体(RTMP,RTSP,HLS)

一个人想着一个人 提交于 2020-01-14 08:57:01
前言 最近项目需要流媒体的播放,后端一共提供了 三种流数据(RTSP,RTMP,HLS),在不同的场景可能会使用到不同方式播放,就需要做到适配, 支持所有的流数据播放。花了一段时间研究,在这里和大家分享一下,还有些遗留问题,看大家有没有好的方法。 RTSP 简介 这种协议流数据前段播放,没有特别好的解决方法,需要在本机装一个vlc 插件,依靠这个插件才能让 RTSP 协议 在网页上能播放,但是目前高版本的 Chrome 浏览器不支持 NPAPI 插件,也就是说高版本的 Chrome 浏览器还是不能播放(46 以上的版本都不行)。 html code <object type='application/x-vlc-plugin' id='vlc' width="200" height="500" events='True' pluginspage="http://www.videolan.org" codebase="http://downloads.videolan.org/pub/videolan/vlc-webplugins/2.0.6/npapi-vlc-2.0.6.tar.xz"> <param name='mrl' value='rtsp://***********************/Streaming/Channels/1' /> <param name=

从0到1打造直播 App

 ̄綄美尐妖づ 提交于 2020-01-06 05:43:10
转自http://dev.qq.com/topic/5811d42e7fd6ec467453bf58 概要 分享内容: 互联网内容载体变迁历程,文字——图片/声音——视频——VR/AR——…….。从直播1.0秀场时代(YY),2.0游戏直播(斗鱼、虎牙、熊猫)到如今全民直播3.0泛生活娱乐时代(映客、花椒),国外直播app(Meerkat 、Periscope),随着VA/AR/MR提出的沉浸式视听体验,直播4.0时代很快就能到来。 在这个全民娱乐的时代,直播已经火得不要不要的,各大公司都有自己的直播产品。本文主要从直播的一些基本知识,一步步打造直播app。直播那么火的背后有什么样的技术支撑呢? 先将这些APP按照视频网站按照视频网站、弹幕视频、直播平台、在线秀场、移动短视频、移动直播来划分类别。再按照内容和社交这个维度来进行区分,可以明显看出视频网站、弹幕网站和直播平台更偏内容,他们对内容的需求更加高,用户在上面进行社交沉淀相对比较浅。 而后面三者更加偏向社交,他们强调人而不强调内容。所以短期内不会有大的竞争关系,只是前三类、后三者之间的竞争会出现。 大体框架 大体框架 基本是下图这个套路: 录制->编码->网络传输->解码->播放 以上为直播的整体流程,根据该流程分为以下技术点: 怎样录制直播视频 怎样实时上传直播视频 怎样播放直播视频 直播间的用户是如何交互 一

rtmp直播拉流客户端EasyRTMPClient设计过程中时间戳问题汇总

不羁的心 提交于 2020-01-02 00:52:17
EasyRTMPClient 简介 EasyRTMPClient是EasyDarwin流媒体团队开发、提供的一套非常稳定、易用、支持重连接的RTMPClient工具,以SDK形式提供,接口调用非常简单。该EasyRTMPClient库未使用或参考现有的任何RTMP库,完全由EasyDarwin团队自主实现,因此,EasyRTMPClient更易于维护,稳定性、可扩展性得以提升,同时,本RTMP库全平台支持(包括windows/linux 32&64,ARM各平台,android, ios)! 相关连接 EasyRTMPClient调用示例地址: https://github.com/EasyDSS/EasyRTMPClient 由EasyDarwin团队推出的 RTMP协议教程: 初级部分 进阶部分 高级部分:时间原因,暂未推出; 谈谈RTMP时间戳的形式 RTMP时间戳基本概念 RTMP消息包一共分成三种类型。一类是命令(通知)消息,一类是音频消息,一类是视频消息。在实际开发过程中,我们主要关心的是音频和视频消息包的时间戳。RTMP消息分为块头和消息头,而RTMP消息包的时间戳主要存储于消息头域中的,用三个字节以大端序来存储,如果时间戳超过0xFFFFFF时,则将消息包域的时间戳域设成0xFFFFFF,然后在消息包域和负载之间会插入四节来表示时间戳

rtmp直播拉流客户端EasyRTMPClient设计过程中时间戳问题汇总

对着背影说爱祢 提交于 2020-01-02 00:52:03
EasyRTMPClient 简介 EasyRTMPClient是EasyDarwin流媒体团队开发、提供的一套非常稳定、易用、支持重连接的RTMPClient工具,以SDK形式提供,接口调用非常简单。该EasyRTMPClient库未使用或参考现有的任何RTMP库,完全由EasyDarwin团队自主实现,因此,EasyRTMPClient更易于维护,稳定性、可扩展性得以提升,同时,本RTMP库全平台支持(包括windows/linux 32&64,ARM各平台,android, ios)! 相关连接 EasyRTMPClient调用示例地址: https://github.com/EasyDSS/EasyRTMPClient 由EasyDarwin团队推出的 RTMP协议教程: 初级部分 进阶部分 高级部分:时间原因,暂未推出; 谈谈RTMP时间戳的形式 RTMP时间戳基本概念 RTMP消息包一共分成三种类型。一类是命令(通知)消息,一类是音频消息,一类是视频消息。在实际开发过程中,我们主要关心的是音频和视频消息包的时间戳。RTMP消息分为块头和消息头,而RTMP消息包的时间戳主要存储于消息头域中的,用三个字节以大端序来存储,如果时间戳超过0xFFFFFF时,则将消息包域的时间戳域设成0xFFFFFF,然后在消息包域和负载之间会插入四节来表示时间戳

HTTP,RTMP,RTSP网络协议区别

寵の児 提交于 2019-12-20 02:17:03
三种协议一般从4各方面区分,1.是否流媒体协议 2.传输格式流 3.是否共有协议 4.TCP通道 1.流媒体协议:RTMP协议,RTSP协议 ,适用于做直播。非流媒体协议:HTTP协议,适用于做点播。 3.传输格式流:RTMP协议一般传输的是 flv,f4v 格式流,RTSP协议一般传输的是 ts、mp4 格式的流,HTTP协议没有特定的传输流。 3.是否共有协议:RTMP协议是 Adobe 的私有协议,未完全公开。HTTP协议与RTSP协议是共有协议,并有专门机构做维护。. 4.TCP 通道数:RTMP协议一般在 TCP 1个通道上传输命令和数据,HTTP协议与RTSP协议一般需要 2-3 个通道,命令和数据通道分离。 来源: CSDN 作者: Slc_Jack 链接: https://blog.csdn.net/slc685375/article/details/103605751

RTMP流前端实现

一曲冷凌霜 提交于 2019-12-15 02:13:11
1.rtmp协议简介 (转载) (1)是流媒体协议。 (2)RTMP协议是 Adobe 的私有协议,未完全公开。 (3)RTMP协议一般传输的是 flv,f4v 格式流。 (4)RTMP一般在 TCP 1个通道上传输命令和数据。 2.引入video.js 元素目前只支持三种视频格式:MP4、WebM、Ogg,RTMP传输的视频流是基于flash的,所以需要使用 video.js 来实现,由于6以上的版本不支持flash(感觉主要是chrome即将放弃flash),这里使用的是5.x的版本 3.Demo <!DOCTYPE html> < html > < head > 来源: CSDN 作者: MikeZhang93 链接: https://blog.csdn.net/MikeZhang93/article/details/103458042

网页直播/点播播放器支持http-flv/rtmp/m3u8等播放流媒体音视频播放器EasyPlayer-RTMP-iOS使用YUV渲染画面的方法

时光怂恿深爱的人放手 提交于 2019-12-12 17:05:19
背景分析 RTMP协议是应用层协议,是要靠底层可靠的传输层协议(通常是TCP)来保证信息传输的可靠性的。在基于传输层协议的链接建立完成后,一个RTMP协议的流媒体推流需要经过以下几个步骤:握手,建立连接,建立流,推流。RTMP连接都是以握手作为开始的。建立连接阶段用于建立客户端与服务器之间的“网络连接”;建立流阶段用于建立客户端与服务器之间的“网络流”;推流阶段用于传输视音频数据。 EasyPlayer-RTMP播放器是一套RTMP专用的播放器,包括有:Windows、Android、iOS三个平台,区别于市面上大部分的通用播放器,EasyPlayer-RTMP系列始于成熟的商业项目,得到了各行各业(尤其是安防行业)的广泛应用,EasyPlayer-RTMP更加精炼、更加专注,具备非常低的延时,非常高RTMP协议兼容性,编码数据解析等方面,都有非常大的优势,尤其是在有特殊参数/私有自定义字段的情况下,非常容易进行定制和兼容。 EasyPlayer-RTMP-iOS-工作流程 EasyPlayer-RTMP-Android-工作流程 EasyPlayer-RTMP-iOS如何使用YUV渲染画面? 分析问题 解码后获取的视频帧,需要分解成Y、U、V的值,再送到OpenGL去渲染。 解决问题 解码后获取的视频帧的数据,添加到KxVideoFrameYUV,并通过(instancetype