Java 实现阿里云直播推流在线列表查询

阿里云直播推流在线列表可以通过 API 的方式进行查询获取

官网

查询推流在线列表

初始化配置

  1. Constants.ALI_ACCESS_KEY_ID 是阿里云服务密钥 id ,所有服务共用
  2. Constants.ALI_ACCESS_SECRET 是阿里云服务密钥,所有服务共用
  3. 将客户端的初始化放置在静态块中可以保证配置只初始化一次
1
2
3
4
5
6
7
8
9
10
11
12
13
private static IAcsClient iAcsClient;

static {
    // 初始化配置
    String regionId = "cn-shanghai";
    DefaultProfile profile = DefaultProfile.getProfile(regionId, Constants.ALI_ACCESS_KEY_ID, Constants.ALI_ACCESS_SECRET);

    iAcsClient = new DefaultAcsClient(profile);

    // 本地调试
    // System.setProperty("http.proxyHost", "127.0.0.1");
    // System.setProperty("http.proxyPort", "8080");
}

查询推流在线列表

  1. Constants.ALI_LIVE_PULL_URL 是阿里云直播的推流地址
  2. Constants.ALI_LIVE_APP_NAME 是阿流云直播的应用名称
    • 如果不指定,则会查询出所有的应用的推流列表
    • 只能是单纯的应用名称,和阿里云直播控制台设置的保持一直
  3. 获取到推流在线列表后,只需要进行流名称的匹配即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public Boolean checkLiveBegin(String streamName) {
    // 查询推流在线列表
    DescribeLiveStreamsOnlineListRequest listRequest = new DescribeLiveStreamsOnlineListRequest();
    listRequest.setDomainName(Constants.ALI_LIVE_PULL_URL);
    listRequest.setAppName(Constants.ALI_LIVE_APP_NAME.replace("/", ""));

    try {
        DescribeLiveStreamsOnlineListResponse response = iAcsClient.getAcsResponse(listRequest);

        // 获取当前推流列表
        List<LiveStreamOnlineInfo> onlineInfos = response.getOnlineInfo();

        for (LiveStreamOnlineInfo onlineInfo : onlineInfos) {
            if (onlineInfo.getStreamName().equals(streamName)) {
                return true;
            }
        }

    } catch (ClientException e) {
        logger.error("获取拉流信息失败!", e);
    }

    return false;
}