文档

直播时移

直播时移可以回看从直播开始时间到当前时间之间的直播视频。通过阅读本文,您可以了解直播时移的实现原理及请求方式。

实现原理

视频直播流会被切成TS切片,通过HLS协议向播放用户分发,用户请求的M3U8播放列表中包含不断刷新的TS切片地址。对于常规的HLS直播,TS切片地址及对应的TS文件无法保存,因此当前时间之前的视频直播内容无法进行回溯。在开启直播时移功能后,TS切片地址及对应的TS文件会分别在数据库和OSS中保存(最长配置30天,具体操作,请参见直播时移),可以回溯从直播开始时间到当前时间之间的视频。

使用限制

直播时移最大支持直播观看人数为10万人,如果需要支持更多人观看,请提交工单。关于如何提交工单,请参见联系我们

开通直播时移

需要开通直播时移功能才能使直播从开始时间到当前时间之间的视频能够进行回溯。

方式一:通过控制台操作,详见配置直播时移

方式二:通过调用OpenLiveShift接口开通。

Java sdk开通直播时移示例代码如下:

 
//需要<>内容替换成实际使用的值
DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
IAcsClient client = new DefaultAcsClient(profile);
OpenLiveShiftRequest openLiveShiftRequest = new OpenLiveShiftRequest();
openLiveShiftRequest.setDomainName("<DomainName>");
openLiveShiftRequest.setAppName("<AppName>");
openLiveShiftRequest.setStreamName("<StreamName>");
//数据保留时长,单位天,取值(1-30),默认值7
openLiveShiftRequest.setVision("<5>");
//是否忽略对应转码流生成时移数据,true/false,默认值true
openLiveShiftRequest.setIgnoreTranscode("<true>");
//
//其他业务代码
//

try {
    OpenLiveShiftResponse openLiveShiftResponse = client.getAcsResponse(openLiveShiftRequest);
    System.out.println(new Gson().toJson(openLiveShiftResponse));
    // todo something.
} catch (ServerException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (ClientException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
说明
  • AppName可以设置为星号(*),表示该配置针对于域名下所有直播流有效。

  • StreamName可以设置为星号(*),表示该配置针对于AppName下所有直播流有效。

  • 添加完成后,可调用DescribeLiveShiftConfigs查询指定域名的时移配置。

  • 使用JAVA SDK,具体请参见Java SDK使用说明

时移请求

一个完整的直播时移请求由HLS直播地址+时移参数组成,参数格式为lhs_{type}_{format}_{unit}_{zone},如下所示:

http://example.com/AppName/StreamName.m3u8?aliyunols=on&lhs_start_human_s_8=20171024160220&lhs_end_human_s_8=20171024160420
说明

aliyunols=on为固定字段。

时移请求参数详情如下所示:

参数

描述

type

时间类型。取值:

  • start:直播开始时间。

  • end:直播结束时间。

  • vodend:点播结束时间。

    说明

    设置vodend表示使用点播模式回看,一次返回指定时间段内所有的ts,包含endlist标签。

  • offset:向前偏移的时间。

format

时移的时间格式。取值:

  • unix:UNIX时间戳。

  • human:年月日时分秒。示例:20170809230130。

unit

时移的时间单位。取值:

  • s:秒。

  • ms:毫秒。

  • us:微秒。

  • ns:纳秒。

说明

您可以在控制台中查询指定域名可时移的时间和数据量。更多信息,请参见用量查询。同时,您也可以通过发送请求查询指定域名可时移的时间和数据量,详情请参见时移时间查询

zone

时区,取值:0~9,表示东*区。其中,0表示UTC时间,8表示中国时区。

说明

当format取值为unix时,zone取值为0。

时移参数示例如下所示:

  • lhs_start_human_s_8=20170809200010

  • lhs_start_unix_s_0=1502280113

  • lhs_end_human_s_8=20170809200010

  • lhs_vodend_unix_s_0=1502280113

  • lhs_offset_unix_ms_0=1800000(向前时移30分钟)

时移时间查询

直播时移时间查询请求由请求URL和参数组成。其中,请求URL格式为http://{domain}/openapi/timeline/query,示例如下所示:

//不带鉴权
http://example.com/openapi/timeline/query?aliyunols=on&app=bbb&stream=cc&format=ts&lhs_end_unix_s_0=1513334270&lhs_start_unix_s_0=1513334255
//带鉴权
http://example.com/openapi/timeline/query?auth_key=1606204918-0-0-3e898a5f491fedb113d17aad7c091dde&aliyunols=on&app=zzb-test&stream=zzb-shiyi&format=ts&lhs_start_unix_s_0=1606200900&lhs_end_unix_s_0=1606202520

名称

描述

请求方式

GET

URL

请求URL,例如:http://{domain}/openapi/timeline/query,其中,{domain}为您的播流域名。

参数

  • aliyunols(required):on。(固定字段)

  • app(required):应用名。

  • stream(required):流名。

  • format(required):指定查询TS或FLV格式的时移数据。

  • lhs_start_unix_s_0(required):开始时间的时间戳。单位:秒。

  • lhs_end_unix_s_0(required):结束时间的时间戳。单位:秒。

说明

如果您开启了CDN的鉴权,需要加上对应的鉴权参数auth_keyauth_key可以由控制台生成或通过代码自行拼接,详情请参见配置URL鉴权鉴权代码示例

返回示例如下所示:

{
  "retCode": 0,
  "description": "success",
  "content": {
    "current": 1514269063,
    "timeline": [
      {
        "start": 1514269054,
        "end": 1514269058
      },
      {
        "start": 1514269058,
        "end": 1514269062
      }
    ]
  }
}

参数

描述

current

当前系统时间,播放器可以基于这个字段对时。

timeline

有效的时移时间段,包含开始和结束时间戳。

start

有效片段的开始时间(UNIX时间戳),单位:秒。

end

有效片段的结束时间(UNIX时间戳),单位:秒。