常见直播协议的介绍
国内常见公开的直播协议有几个:RTMP、HLS、HDL(HTTP-FLV)、RTP,我们来逐一介绍。
RTMP协议:
即Real Time Messaging Protocol,是Adobe的专利协议,现在大部分国外的CDN已不支持。在国内流行度很高。原因有几个方面:
1、开源软件和开源库的支持稳定完整。如斗鱼主播常用的OBS软件,开源的librtmp库,服务端有nginx-rtmp插件。
2、播放端安装率高。只要浏览器支持FlashPlayer就能非常简易的播放RTMP的直播,协议详解可以Google了解。相对其他协议而言,RTMP协议初次建立连接的时候握手过程过于复杂(底层基于TCP,这里说的是RTMP协议本身的交互),视不同的网络状况会带来给首开带来100ms以上的延迟。基于RTMP的直播一般内容延迟在2~5秒。
HDL(HTTP-FLV)协议:
即使用HTTP协议流式的传输媒体内容。相对于RTMP,HTTP更简单和广为人知,而且不担心被Adobe的专利绑架。内容延迟同样可以做到2~5秒,打开速度更快,因为HTTP本身没有复杂的状态交互。所以从延迟角度来看,HDL(HTTP-FLV)要优于RTMP。
HLS 协议:
即Http Live Streaming,是由苹果提出基于HTTP的流媒体传输协议。HLS有一个非常大的优点:HTML5可以直接打开播放;这个意味着可以把一个直播链接通过微信等转发分享,不需要安装任何独立的APP,有浏览器即可,所以流行度很高。社交直播APP,HLS可以说是刚需,下来我们分析下其原理 。
基于HLS的直播流URL是一个m3u8的文件,里面包含了最近若干个小视频TS(一种视频封装格式,这里就不扩展介绍)文件,如 http://www.ucloud.cn/helloworld.m3u8 是一个直播流留链接,其内容如下:
RTP协议:
即Real-time Transport Protocol,用于Internet上针对多媒体数据流的一种传输层协议。
实际应用场景下经常需要RTCP(RTP Control Protocol)配合来使用,可以简单理解为RTCP传输交互控制的信令,RTP传输实际的媒体数据。
霹雳云直播工作流模型
Client (iOS/Android/PC/Camera) 向 Server (业务逻辑服务器) 请求推流授权
Server 颁发带授权信息的 Stream 给 Client
Client 通过 RTMP 推流 给 Pili Streaming Cloud
Client 向 Server 请求播放授权
Server 向 Client 颁发播放地址
Client 调用 播放器 SDK 打开播放地址进行播放
三方交互的业务逻辑可以借鉴如下示意图进行理解:
Android端SDK
播放器 SDK
PLDroidPlayer 是一个适用于 Android 的音视频播放器 SDK,可高度定制化和二次开发,特色是支持 RTMP 和 HLS 直播流媒体、以及常见音视频文件(如 MP4、M4A )播放。
功能特性
- 基于 ijkplayer ( based on ffplay )
- Android Min API 9
- 支持 RTMP, HLS 协议
- 支持 ARMv7a
- 支持 MediaCodec 硬解码
- 提供 VideoView 控件
- 可定制化的 MediaController
- 支持 seekTo()
- 支持获取当前播放时长 getDuration()
- 支持获取当前播放的位置 getCurrentPosition()
- 支持音量控制 setVolume()
- 提供如下接口:
- OnPreparedListener
- OnCompletionListener
- OnErrorListener
- OnInfoListener
RTMP 直播推流 SDK
PLDroidCameraStreaming 是一个适用于 Android 的 RTMP 直播推流 SDK,可高度定制化和二次开发。特色是支持 Android Camera 画面捕获并进行 H.264 硬编码, 以及支持 Android 麦克风音频采样并进行 AAC 硬编码;同时,还实现了一套可供开发者选择的编码参数集合,以便灵活调节相应的分辨率和码率。借助 PLDroidCameraStreaming ,开发者可以快速构建一款类似 Meerkat 或 Periscope 的 Android 直播应用
功能特性
- 支持 MediaCodec 硬编码
- 支持 AAC 音频编码
- 支持 H264 视频编码
- 内置生成安全的 RTMP 推流地址
- 支持 RTMP 协议推流
- 支持 ARMv7a
- Android Min API 18
- 支持前后置摄像头,以及动态切换
- 支持自动对焦
- 支持闪光灯操作
- 支持纯音频推流,以及后台运行