添加IPC设备

IPC设备(网络摄像机)可通过RTMP协议连接到物联网平台,使用物联网智能视频服务(企业版)提供的视频直播、传输、存储、回放等服务,便于您对视频设备进行集中管理、远程控制和AI分析。本文介绍IPC设备通过RTMP协议接入物联网平台场景下,如何添加摄像头设备接入物联网智能视频服务。

前提条件

  1. 已开通智能视频服务

  2. 已创建产品

步骤一:添加RTMP设备

  1. 登录智能视频服务控制台

  2. 在智能视频服务控制台左上角选择目标实例。

  3. 在左侧导航栏,单击设备管理

  4. 设备管理页面,单击添加设备

  5. 添加设备对话框中,选择设备类型RTMP设备

  6. 配置设备信息,单击确认

    image.png

    参数

    描述

    产品类型

    选择摄像头

    产品

    选择已创建的IPC设备产品。新创建的设备将继承该产品定义好的功能和特性。

    收流KEY

    设置RTMP收流KEY,用于生成IPC设备收流地址的鉴权Key。

    系统已随机生成10位字符串作为默认的KEY值。您可以修改默认值,支持英文字母和数字,长度限制为8~16位。

    流名称

    设置RTMP流名称。流名称前缀linkvisual_实例ID_为固定值不可修改删除,添加设备成功后,其中的实例ID会自动替换为当前实例的真实ID值。

    流名称后缀支持英文字母、数字和中划线(-),长度限制为4~32位。

    DeviceName

    设置设备名称。 设备名称在产品内具有唯一性。支持英文字母、数字、短划线(-)、下划线(_)、at(@)、英文句号(.)和英文冒号(:),长度限制为4~32个字符。

    URL有效期

    设置收流地址的有效期限。

    系统默认有效期为60分钟,可设置范围为1分钟~240分钟。

    设备描述

    描述设备信息,方便您识别和管理设备。

  7. 可选:添加RTMP设备成功后,在设备管理页面,单击对应操作列的连接配置,可修改收流KEYURL有效期

    重要

    每天最多执行两次修改操作。

    image.png

执行结果

  • 添加RTMP设备成功后,在设备管理页面,已添加的RTMP设备状态为未激活设备名称列显示收流域名。

    image.png

  • 添加RTMP设备成功后,登录物联网平台控制台,在对应实例中指定的摄像头产品下会自动创建对应设备,设备名称为已设置的DeviceName

    重要

    RTMP设备的添加与删除需要在智能视频服务控制台上操作,请勿在物联网平台控制台维护,否则会引起设备状态混乱。

    image.png

步骤二:获取设备接入的收流地址

说明

此功能方便您在做测试时使用,无需编写代码即可快速生成所需的URL进行测试。

实际业务场景中您也可通过算法自行生成URL,具体内容,请参见附录:使用算法生成RTMP协议的收流URL或播流URL

根据添加RTMP设备的认证信息和已设置的收流KEY生成收流地址。

  1. 设备管理页面,单击对应操作列的更多 > URL生成

  2. URL生成对话框的收流URL页签,完成码流选择,单击生成

    image.png

  3. URL地址对话框,单击复制,获取收流URL并保存。

    image.png

    收流地址格式为:rtmp://${host}/live/${streamName}_${streamType}?auth_key=${value}

    参数

    说明

    ${host}

    RTMP收流域名。可在智能视频服务控制台服务概览页面,单击右上角的查看开发配置,查看RTMP收流域名

    ${streamName}

    流名称。

    ${streamType}

    流类型。

    • 0:代表主码流、高清流。

    • 1:代表辅码流、低清流。

    ${value}

    auth_key值,由系统内部根据超时时间、流ID通过加密算法自动生成。

步骤三:在设备端完成RTMP向云端推流

用户需自行在设备端根据已获取的收流地址,完成RTMP向物联网智能视频服务的云端推流。RTMP推流成功后,设备管理页面的RTMP设备显示在线

image.png

RTMP向云端推流的示例

您可通过以下方式进行RTMP推流测试:

  • 使用OBS工具:

    image.png

    其中Server输入rtmp://${host}/live/Stream Key输入${streamName}_${streamType}?auth_key=${value}

  • 使用ffmpeg命令:

    ffmpeg -re -i ./1.flv -c copy -f flv "rtmp://*****"

    其中rtmp://*****为已获取的收流地址。

后续操作

  1. 智能视频服务控制台设备管理页面,可以查看视频设备的实时监控和云端录像,也可以生成视频播放地址,用于在应用端进行视频播放。具体内容,请参见设备管理

  2. 使用HTTP协议调用物联网智能视频服务(企业版)的云端API,开发场景功能。如果您将设备的RTMP流状态变更信息发送到服务端,可采用AMQP协议进行接收。更多信息,请参见云端SDK概述AMQP服务端订阅

  3. 开发应用端,即实际观看视频的应用程序。阿里云提供直播与点播播放器,支持Android、iOS、Windows、Mac及Web版本的应用SDK。详细信息,请参见应用端开发概述

  4. 您可以通过调用接口QueryDevice获取上文已接入的RTMP产品下的设备列表,并通过调用接口BatchQueryVisionDeviceInfo查询RTMP设备详情及流状态。

附录:使用算法生成RTMP协议的收流URL或播流URL

如果您不在智能视频服务控制台生成收流URL或播流URL,阿里云提供Python语言的算法Demo供您使用。代码示例如下:

#!/usr/bin/env python

import re
import time
import hashlib
import datetime
def md5sum(src):
    m = hashlib.md5()
    m.update(src)
    return m.hexdigest()
def a_auth(scheme, host, streamName, streamType, key, expire, args):
    path = "%s_%s" %(streamName, streamType)
    rand = "0"      # "0" by default, other value is ok
    uid = "0"       # "0" by default, other value is ok
    sstring = "%s-%s-%s-%s-%s" %(path, expire, rand, uid, key)
    hashvalue = md5sum(sstring.encode('utf-8'))
    auth_key = "%s-%s-%s-%s" %(expire, rand, uid, hashvalue)
    auth_args = ""
    if args:
        auth_args = "auth_key=%s&%s" %(auth_key, args)
    else:
        auth_args = "auth_key=%s" %(auth_key)

    if scheme == "rtmp":
        return "rtmp://%s/live/%s?%s" %(host, path, auth_args)
    elif scheme == "flv":
        return "https://%s/live/%s.flv?%s" %(host, path, auth_args)
    else:
        return ""

def main():
    scheme = "rtmp"                 # support rtmp/flv
    host = "example.aliyundoc.com"  #example host
    streamName = "test"             #
    streamType = 0                      # 0 or 1, 0:main stream, 1:sub stream
    key = "<input private key>"             # replace, private key of authorization
    expire = int(time.time()) + 1 * 3600                   # expiration     time: 1 hour after current itme
    #args = ""
    args = "ForceIFrame=1&CacheDuration=5000"   #  only support ForceIFrame and CacheDuration, https://help.aliyun.com/document_detail/107885.html
    authurl = a_auth(scheme, host, streamName, streamType, key, expire, args)
    print("authurl : %s\n" % authurl)
if __name__ == "__main__":
    main()

实际应用中替换main()中的以下参数值,运行Demo即可。

参数

说明

host

RTMP收流域名。可在智能视频服务控制台服务概览页面,单击右上角的查看开发配置,查看RTMP收流域名

streamName

添加RTMP设备时,设置的流名称。

streamType

RTMP流类型。

  • 0:代表主码流、高清流。

  • 1:代表辅码流、低清流。

Key

收流或播流的鉴权Key。

expire

收流URL或播流URL的超时时间,需要小于或等于智能视频服务控制台配置的鉴权Key有效期

args

URL的参数列表。支持参数:

  • ForceIFrame:是否给设备下发强制I帧指令:

    • 1:下发。

    • 0(默认):不下发。

  • CacheDuration:视频缓存数据时长,取值范围为0~10000,单位为毫秒,默认值为0。