IPC设备(网络摄像机)可通过RTMP协议连接到物联网平台,使用物联网智能视频服务(企业版)提供的视频直播、传输、存储、回放等服务,便于您对视频设备进行集中管理、远程控制和AI分析。本文介绍IPC设备通过RTMP协议接入物联网平台场景下,如何添加摄像头设备接入物联网智能视频服务。
前提条件
步骤一:添加RTMP设备
登录智能视频服务控制台。
在智能视频服务控制台左上角选择目标实例。
在左侧导航栏,单击设备管理。
在设备管理页面,单击添加设备。
在添加设备对话框中,选择设备类型为RTMP设备。
配置设备信息,单击确认。
参数
描述
产品类型
选择摄像头。
产品
选择已创建的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分钟。
设备描述
描述设备信息,方便您识别和管理设备。
可选:添加RTMP设备成功后,在设备管理页面,单击对应操作列的连接配置,可修改收流KEY和URL有效期。
重要每天最多执行两次修改操作。
执行结果
添加RTMP设备成功后,在设备管理页面,已添加的RTMP设备状态为未激活,设备名称列显示收流域名。
添加RTMP设备成功后,登录物联网平台控制台,在对应实例中指定的摄像头产品下会自动创建对应设备,设备名称为已设置的DeviceName。
重要RTMP设备的添加与删除需要在智能视频服务控制台上操作,请勿在物联网平台控制台维护,否则会引起设备状态混乱。
步骤二:获取设备接入的收流地址
此功能方便您在做测试时使用,无需编写代码即可快速生成所需的URL进行测试。
实际业务场景中您也可通过算法自行生成URL,具体内容,请参见附录:使用算法生成RTMP协议的收流URL或播流URL。
根据添加RTMP设备的认证信息和已设置的收流KEY生成收流地址。
在设备管理页面,单击对应操作列的
。在URL生成对话框的收流URL页签,完成码流选择,单击生成。
在URL地址对话框,单击复制,获取收流URL并保存。
收流地址格式为:
rtmp://${host}/live/${streamName}_${streamType}?auth_key=${value}
。参数
说明
${host}
RTMP收流域名。可在智能视频服务控制台的服务概览页面,单击右上角的查看开发配置,查看RTMP收流域名。
${streamName}
流名称。
${streamType}
流类型。
0:代表主码流、高清流。
1:代表辅码流、低清流。
${value}
auth_key
值,由系统内部根据超时时间、流ID通过加密算法自动生成。
步骤三:在设备端完成RTMP向云端推流
用户需自行在设备端根据已获取的收流地址,完成RTMP向物联网智能视频服务的云端推流。RTMP推流成功后,设备管理页面的RTMP设备显示在线。
RTMP向云端推流的示例
您可通过以下方式进行RTMP推流测试:
使用OBS工具:
其中Server输入
rtmp://${host}/live/
,Stream Key输入${streamName}_${streamType}?auth_key=${value}
。使用
ffmpeg
命令:ffmpeg -re -i ./1.flv -c copy -f flv "rtmp://*****"
其中
rtmp://*****
为已获取的收流地址。
后续操作
在智能视频服务控制台的设备管理页面,可以查看视频设备的实时监控和云端录像,也可以生成视频播放地址,用于在应用端进行视频播放。具体内容,请参见设备管理。
使用HTTP协议调用物联网智能视频服务(企业版)的云端API,开发场景功能。如果您将设备的RTMP流状态变更信息发送到服务端,可采用AMQP协议进行接收。更多信息,请参见云端SDK概述和AMQP服务端订阅。
开发应用端,即实际观看视频的应用程序。阿里云提供直播与点播播放器,支持Android、iOS、Windows、Mac及Web版本的应用SDK。详细信息,请参见应用端开发概述。
您可以通过调用接口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即可。
参数 | 说明 |
| RTMP收流域名。可在智能视频服务控制台的服务概览页面,单击右上角的查看开发配置,查看RTMP收流域名。 |
| 添加RTMP设备时,设置的流名称。 |
| RTMP流类型。
|
| 收流或播流的鉴权Key。 |
| 收流URL或播流URL的超时时间,需要小于或等于在智能视频服务控制台配置的鉴权Key有效期。 |
| URL的参数列表。支持参数:
|