美文网首页Android开发经验谈Android开发Android技术知识
腾讯视频直播01-直播常见协议和集成sdk

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

作者: Jsonjia | 来源:发表于2018-05-29 10:54 被阅读23次
    直播流程

    播放流程:获取流 → 解码 → 播放
    录制播放路程:录制音频视频 → 剪辑 → 编码 → 上传服务器,别人播放
    直播过程:录制音视频 → 编码 → 流媒体传输 → 服务器 → 流媒体传输到其他app → 解码 → 播放

    直播基础知识

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

    • RTMP(RealTime Messaging Protocol,实时消息传输协议)
      Adobe公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议,它底层基于TCP协议,延时较小大概为1~3s。
    • FLV
      Adobe公司主推这个协议,格式很简单,它在大部分手机浏览器上不支持,只能在手机app播放,拖动进度条反应迟钝。目前腾讯视频的直播录制,采用的就是FLV视频格式。
    • HLS(HTTP Live Streaming)
      是由苹果公司推出的基于HTTP的流媒体传输协议,它是将视频分成5-10秒的视频小分片,然后用m3u8索引表进行管理,由于客户端下载到的视频都是5-10秒的完整数据,故视频的流畅性很好,但也同样引入了很大的延迟(HLS的一般延迟在10-30s左右),HTML5可以直接打开播放。
    直播协议 优点 缺点 播放延迟
    RTMP 能推能播,延迟低 高并发情况下不佳 1~3s
    FLV 成熟度高,延迟低,手机app游戏直播首选 必须要用app播放 2~3s
    HLS 手机浏览器支持度高 延迟非常高 10~30s

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

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

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

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

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

    截图.png
    文件名 说明
    LiteAVSDK_Professional_4.6.4218.aar 适用于 Android Studio 用户
    LiteAVSDK_Professional_4.6.4218.zip 适用于 Eclipse 用户

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

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

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

     allprojects {
         repositories {
             jcenter()
             flatDir {
                dirs 'libs'
             }
        }
    }
    

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

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

    然后编译下工程

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

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

    String versionStr = TXLiveBase.getSDKVersionStr();
    Log.d("zjp", "versinoStr=" + versionStr);
    
    截图.png

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

    相关文章

      网友评论

        本文标题:腾讯视频直播01-直播常见协议和集成sdk

        本文链接:https://www.haomeiwen.com/subject/qiwrjftx.html