基本概念

本文档中会经常提到如下几个角色。

开发者是直播云服务的使用者,因此直播云服务的客户等同于开发者。 用户是开发者所推出产品的直接使用者,也是云直播云服务的间接使用者。 一个客户可以在其账号下创建一个或多个直播类应用,这些直播类应用互相独立,产生的费用由这个客户统一付账。

如上所述每个客户在直播云上都有一个登录账号,这个账号可以在直播云上创建多个独立的直播应用,直播云会给每个应用分配一个字符串作为这个应用的服务码,这个服务码唯一标识了相应的应用,同时直播云对应这个服务码会生成一个共享密钥,在访问直播云API时需要通过服务码和共密钥进行签名。详细见安全机制

直播云是一个视频处理平台,完成视频数据的接收、处理、转发、存储、分发等核心功能。

在本文档中提及的视频是一个统称,当文档中没有特别说明时,提及的视频即包含视频(图像)数据,也包含音频数据。如果只包含数据数据则会称作“仅视频”,如果只包含音频数据时会称作“仅音频”

流一般指通过网络传输的有序数据序列。如直播流,点播流。

一般来说容器格式表示视频数据的打包或者存储格式,如mp4文件,mp3文件,rtp包等。

编码格式一般指音频、视频数据的压缩方式,如h264, mpeg4, mp3, mpeg2,aac, amr等。

流传输协议一般有http, rtsp, rtmp等。

例如,我们说现在比较常见的m3u8视频,其视频单元的容器格式是mpeg2ts, 视频编码一般为h264, 音频编码一般为aac, 传输协议为HTTP.

如果请求发起的方向与音视频流的方向一致,我们称之为推。 如果请求发起的方向与音视频流的方向相反,我们称之为拉。

上图为拉流输入模式。由直播云向视频源发起请求,音视频流的方向是由视频源流向直播云。支持拉流输入的协议有 RTMP, RTSP, HTTP。

这种应用模式一般有:

  • 将支持RTSP输出的摄像头接入到直播云
  • 对外部HTTP服务上的源文件进行转码或视频处理
  • 将外部RTMP服务器上的直播源接入到直播云

    通过创建任务API接口可以创建拉流输入任务

上图为直播源向直播云推流输入的模型示意图, 直播云建立服务并监听端口,直播源主动发起连接请求,音视频流的由直播源流向直播云,支持推流输入的协议有rtmp, xvs-tcp(直播云私有协议)

这种应用模式一般有:

  • 使用沃安直播云Android和iOS SDK的APP发起直播。
  • 将专业摄像机或医学影像设备的图像经编码器处理后输入至直播云。
  • 通过沃安提供的网页RTMP插件推流直播。
  • 使用支持RTMP标准输出的设备(摄像头,编码器)或RTMP直播软件向直播云推流。

上图为直播云向其他视频服务器流推流输出的示意图, 其他服务器建立服务监听端口等待连接,直播云主动发起连接请求,并将输出直播音视频流推向其他服务器。推流输出的协议有 RTMP, RTSP

这种应用场景比较少见,推流输出一般是用于将直播流输出到其他视频服务器,如Red5.

上图为拉流输出模型示意图,播放器播放直播云的输出音视频流都是以拉流输出的形式完成的。直播云建立服务,监听端口,播放器在获取直播地址后主动建立连接,直播音视频流由直播云流向播放器。支持拉流输出的协议有:. RTMP, HTTP(包括HTTP+FLV和HTTP+M3U8), RTSP

直播云管理的核心单元是任务,一个任务又包含以下几个关键元素:

  • 服务码 标识此任务属于哪个应用
  • 输入流,直播或转码的输入源,一般一个任务就是一个输入,但在合流的任务中可能会有多个输入流
  • 输出流,一个可能存在多个输出流。例如一个直播任务,同时需要输出RTMP和m3u8两种格式时,则这个任务就有两个输出流,关于输出流格式的详细说明,请参考下面的输出格式标签

通过API对任务的操作有:

  • 业务服务器可以通过API查询任务列表
  • 业务服务器可以通过API来中止任务
  • 业务服务器可以通过API来创建一个任务, 通过API创建的任务的输入都是以拉流的形式存在的。

正如前面任务概念中所说,一个直播或转码任务可以同时以多种格式或协议输出,而且每个客户的输出可能都是不一样的,因此直播云可以给每个客户定义一组输出格式,客户可以选择同时输出的所有格式,也可以选择其中的某一个或几个格式输出,每一个输出格式都有一个标签来标识,在选择输出格式时即以标签名称来匹配。

举例来说,下面是某个客户在直播云的输出格式定义:

<root> 
  <output tag="flv_output"> 
    <extension>flv</extension>  
    <codec-a>aac</codec-a>  
    <codec-v>h264</codec-v>  
    <size>vga</size> 
  </output>  
  <output tag="flv_output"> 
    <extension>flv</extension>  
    <codec-a>aac</codec-a>  
    <codec-v>h264</codec-v>  
    <size>qvga</size> 
  </output>  
  <output tag="m3u8_output"> 
    <extension>m3u8</extension>  
    <codec-a>aac</codec-a>  
    <codec-v>h264</codec-v> 
  </output> 
</root>

上面的xml字串,定义了三种输出,分别为

序号 格式标签 格式 音频编码 视频编码 其他
1 flv_output flv aac h264 画面大小vga
2 flv_output flv aac h264 画面大小qvga
3 m3u8_output m3u8 aac h264 画面大小与视频源一致

在创建直播任务时,应用则可以根据需要选择输出那种格式,如果不指定或指定flv_output,m3u8_output,则同时输出1,2,3这三种格式,如果指定flv_output则同时输出1,2两种格式,如果指定m3u8_output,则输出格式3

输出格式的配置即以上xml中内容不需要应用关心,只需要向直播云的客服说明需求,由直播云管理人员为应用创建,并建立相应的输出标签。应用只需要根据情况使用标签文本即可。