腾讯视频直播01-直播常见协议和集成sdk

2021-07-29 14:54:21 浏览数 (1)

直播流程

播放流程:获取流 → 解码 → 播放录制播放路程:录制音频视频 → 剪辑 → 编码 → 上传服务器,别人播放直播过程:采集 → 处理 → 编码 → 推流 → CDN分发 → 拉流 → 解码 → 播放

直播基础知识

①直播常见的协议有三种:RTMP、FLV和 HLS

  • RTMP(RealTime Messaging Protocol,实时消息传输协议)Adobe公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议,它底层基于TCP协议,延时较小大概为1~3s。
  • FLVAdobe公司主推这个协议,格式很简单,它在大部分手机浏览器上不支持,只能在手机app播放,拖动进度条反应迟钝。目前腾讯视频的直播录制,采用的就是FLV视频格式。
  • HLS(HTTP Live Streaming)是由苹果公司推出的基于HTTP的流媒体传输协议。它有个很大的有点,HTML5可以直接打开播放;这个意味着可以把一个直播链接通过微信等转发分享,不需要安装任何独立的APP,有浏览器即可,所以流行度很高。
  • RTP(Real-time Transport Protocol)用于Internet上针对多媒体数据流的一种传输层协议,实际应用场景下经常需要RTCP(RTP Control Protocol)配合来使用,可以简单理解为RTCP传输交互控制的信令,RTP传输实际的媒体数据。RTP在视频监控、视频会议、IP电话上有广泛的应用,因为视频会议、IP电话的一个重要的使用体验:内容实时性强。

直播协议

传输方式

优点

缺点

播放延迟

RTMP

TCP

能推能播,延迟低

高并发情况下不佳

1~3s

FLV

HTTP

成熟度高,延迟低,手机app游戏直播首选

必须要用app播放

2~3s

HLS

HTTP

手机浏览器支持度高

延迟非常高

10~30s

RTP

TCP/UDP

实时

实时

实时

②常见的点播协议也有三种:MP4、HLS和FLV

  • MP4非常经典的文件格式,在移动终端和PC浏览器上的支持度都很好(在IOS和大部分Android设备上,都可以使用系统浏览器进行播放,在PC上可以使用FLASH控件进行播放)。但是MP4的视频文件格式比较复杂,所以处理成本高,而且由于索引表复杂度高,导致时长稍大(比如半小时)的MP4文件在线播放时加载速度会很慢。
  • HLS苹果公司力推的标准,在移动终端的浏览器上的支持度较好,但IE的支持情况依赖FLASH的二次开发工作(建议使用腾讯视频云的FLASH播放器控件)。其精简的m3u8的索引结构可以规避MP4的索引慢问题,如果是用于点播,是非常不错的选择。
  • FLVAdobe公司所推的标准,目前直播平台最常用的封装格式,在PC端有FLASH的强力支持,但在移动终端只有APP实现播放器才有可能支持(或者使用本播放器),大部分手机端浏览器均不支持。目前腾讯视频云的直播录制,采用的就是FLV视频格式。

点播协议

优点

缺点

MP4

手机浏览器支持度高

格式过于复杂和娇贵,容错率差,对播放器要求高

HLS

手机浏览器支持度高

大量小分片的文件组织形式,错误率和维护成本均高于单一文件

FLV

格式简单问题少

手机浏览器支持差

③常见的推流协议:虽然RTMP在直播领域不是特别流行,但是在推流服务,也就是主播->服务器这个方向上,RTMP则居于主导地位,目前国内的视频云服务都是以RTMP为主要推流协议。

  • 直播直播的视频源是实时生成的,有人推流直播才有意义。所以,一旦主播停播,直播URL也就失效了,而且由于是实时直播,所以播放器在播直播视频的时候是没有进度条的,直播中,如果用户点击暂停,其实并没有真正意义上的暂停,所谓的直播暂停,只是画面冻结和关闭声音,而云端的视频源还在不断地更新着,所以当您调用 resume 的时候,会从最新的时间点开始播放,这跟点播是有很大不同的(点播播放器的暂停和继续与播放本地视频文件时的表现相同)。
  • 推流用户将本地视频源和音频源推送到云服务器,在有些场景中也被称为“RTMP发布。说简单点, 可以理解为推流是直播的主播端,把主播端采集的音视频数据上传到腾讯云,然后粉丝通过我的房间号(房间号怎么看到?请看我的下一篇文章)进入我的直播间。
  • 点播点播的视频源是云端的一个文件,文件只要没有被提供方删除,就随时可以播放(类似优酷土豆、爱奇艺和腾讯视频), 而且由于整个视频都在服务器上,所以播放的时候是有进度条的哦。
下载SDK

腾讯提供了集成librart方式,但是有好几个版本类型的sdk,我打算把视频推流,直播,点播,短视频都写下,所以我下载全功能专业版。下载完解压之后:

文件名

说明

LiteAVSDK_Professional_4.6.4218.aar

适用于 Android Studio 用户

LiteAVSDK_Professional_4.6.4218.zip

适用于 Eclipse 用户

这里我们选择第一个aar包,放到AS中 /app/libs 目录下在工程 app 目录下的 build.gradle 中,添加引用aar包

代码语言:javascript复制
dependencies {
      compile fileTree(dir: 'libs', include: ['*.jar'])
      // 导入腾讯云直播 SDK jar
      compile(name: 'LiteAVSDK_Professional_4.6.4218', ext: 'aar')
}

在工程目录下的 build.gradle 中,添加 flatDir,指定本地仓库:

代码语言:javascript复制
 allprojects {
     repositories {
         jcenter()
         flatDir {
            dirs 'libs'
         }
    }
}

在工程目录下的 build.gradle 的 defaultConfig 里面,指定 ndk 兼容的架构:

代码语言:javascript复制
defaultConfig {
    ...
    ndk {
         abiFilters "armeabi", "armeabi-v7a"
         // 如果您使用的是商业版,只能使用 armeabi 架构,即:
        // abiFilters "armeabi",
    }  
}

然后编译下工程

集成之后,记得添加权限,这里不加了,自行去腾讯官网添加

测试下是否集成成功,在Activity添加:

代码语言:javascript复制
String versionStr = TXLiveBase.getSDKVersionStr();
Log.d("zjp", "versinoStr="   versionStr);

运行之后在 logcat 中看到当前sdk版本为:4.6.4218,跟我们上面集成的sdk版本一样,说明集成sdk成功。

0 人点赞