本文为您介绍直播推/拉流地址的生成方式及适用场景。
使用场景 手动拼接 :适合业务批量生成推拉流地址,使用视频直播提供的规则,无需调用接口,即可使用直播服务。地址生成器生成 :适合生成单个直播流,无需代码基础,直接页面操作即可。使用 API 生成 :适合于在应用程序中集成直播功能实现自动生成直播地址的场景。
背景信息
直播地址信息说明 直播地址通常由域名、AppName 和 StreamName 组成。如果您开启了 URL 鉴权,还包含鉴权信息。
在同一域名空间下,使用相同的 AppName 和 StreamName 生成推流地址和拉流地址,观众可通过该拉流地址播放对应的推流内容。使用其他 AppName 和 StreamName 组合生成新地址,不会使已有地址失效。
直播地址参数说明如下表所示。
参数 说明 域名
已添加的域名,生成推流地址时使用推流域名,生成拉流地址时使用拉流域名。
说明
如需使用拉流地址播放指定推流地址的直播内容,推流域名和拉流域名必须属于同一域名空间。
AppName
直播流的 AppName 标识。
说明
如需使用拉流地址播放指定推流地址的直播内容,推流地址和拉流地址需使用相同的 AppName。
StreamName
直播流的 StreamName 标识。
说明
如需使用拉流地址播放指定推流地址的直播内容,推流地址和拉流地址需使用相同的 StreamName。 开启 URL 鉴权后,源流拉流地址、转码流拉流地址和 ABR 拉流地址用于鉴权计算的 StreamName 取值如下:
源流地址:
对于适用于 Web 拉流 SDK 的 RTM 拉流地址,用于鉴权计算的 StreamName 为 {StreamName}_autortm,例如 test_autortm。 对于其他源流拉流地址,用于鉴权计算的 StreamName 为 {StreamName},例如 test。 转码流地址:
对于适用于 Web 拉流 SDK 的 RTM 拉流地址,用于鉴权计算的 StreamName 为 {StreamName}{转码流后缀}_autortm,例如 test_hd_autortm。其中,{转码流后缀} 为转码配置中的转码流后缀。 对于其他转码流拉流地址,用于鉴权计算的 StreamName 为 {StreamName}{转码流后缀},例如 test_hd。 ABR 地址:
对于 HLS-ABR 地址,用于鉴权计算的 StreamName 为 {StreamName},例如 test。 对于 DASH-ABR 地址,用于鉴权计算的 StreamName 为 {StreamName}_abr,例如 test_abr。 对于适用于 iOS、Android 拉流 SDK 及其他播放器的 RTM-ABR 地址,用于鉴权计算的 StreamName 为 {StreamName}{子流后缀},例如 test_uhd。其中,{子流后缀} 为您 ABR 配置中的子流后缀。 对于适用于 Web 拉流 SDK 的 RTM-ABR 地址,用于鉴权计算的 StreamName 为 {StreamName}{子流后缀}_autortm,例如 test_uhd_autortm。 鉴权信息 参考配置 URL 鉴权 了解 URL 鉴权组成并拼接鉴权信息。
直播地址组成规则 不同的传输协议对应不同的地址格式,其组成规则如下:
RTMP 推流地址:rtmp://{推流域名}/{AppName}/{StreamName}?{鉴权信息},例如 rtmp://push.example.com/live/test?volcTime=1779888879&volcSecret=ff360d9438****99923713c2b24f7d3。如使用 OBS 推流,可使用 rtmp://{推流域名}/{AppName}/ 作为服务器地址,{StreamName}?{鉴权信息} 作为推流码。说明
如需生成 RTMPS 推流地址,可将生成的 RTMP 地址的 rtmp:// 替换为 rtmps://。
TS over SRT 推流地址:srt://{推流域名}:9000?streamid=#!::h={推流域名},r={AppName}/{StreamName},m=publish,{鉴权信息},例如 srt://push.example.com:9000?streamid=#!::h=push.example.com,r=live/test,m=publish,volcTime=1779888879,volcSecret=ff360d9438****099923713c2b24f7d3。 RTMP over SRT 推流地址:rtmp://{推流域名}:1999/{AppName}/{StreamName}?{鉴权信息},例如 rtmp://push.example.com:1999/live/test?volcTime=1779888879&volcSecret=ff360d9438****99923713c2b24f7d3。 RTM 推流地址:http(s)://{推流域名}/{AppName}/{StreamName}.sdp?{鉴权信息},例如 https://push.example.com/live/test.sdp?volcTime=1779888879&volcSecret=ff360d943867bc****23713c2b24f7d3。 WebTransport 推流地址:https://{推流域名}/{AppName}/{StreamName}?{鉴权信息},例如 https://push.example.com/live/test?volcTime=1779888879&volcSecret=ff360d94386****99923713c2b24f7d3。 注意
如需使用 WebTransport 推流地址、HTTPS 推流地址,或在浏览器环境下推送 RTM 流,必须先开启推流域名的 HTTPS 安全加密。详见配置 HTTPS 安全加密 。 如需包含鉴权信息,必须先开启推流域名的 URL 鉴权。详见配置 URL 鉴权 。 以上示例中的 volcTime、volcSecret 为鉴权信息参数,具体参数含义、取值等,详见配置 URL 鉴权 。
RTMP 拉流地址:rtmp://{拉流域名}/{AppName}/{StreamName}?{鉴权信息},例如 rtmp://pull.example.com/live/test?auth_key=1779891783-0-0-a808d5b3****d47e28fdafb87a65ce9a。说明
如需生成 RTMPS 拉流地址,可将生成的 RTMP 地址的 rtmp:// 替换为 rtmps://。
FLV 拉流地址:http(s)://{拉流域名}/{AppName}/{StreamName}.flv?{鉴权信息},例如 https://pull.example.com/live/test.flv?auth_key=1779891783-0-0-e1f5a2a****4b5fe21cb3efdc89af901。 HLS 拉流地址:http(s)://{拉流域名}/{AppName}/{StreamName}.m3u8?{鉴权信息},例如 https://pull.example.com/live/test.m3u8?auth_key=1779891783-0-0-cd9bdb2b6****5e9f6f27c180a13a652。 适用于客户端拉流 SDK(即 iOS、Android、React Native、Flutter、uni-app 拉流 SDK)以及其他播放器的 RTM 拉流地址:http(s)://{拉流域名}/{AppName}/{StreamName}.sdp?{鉴权信息},例如 https://pull.example.com/live/test.sdp?auth_key=1779891783-0-0-873bca4ce****e85f357be5434067b70。 适用于 Web 拉流 SDK 的 RTM 拉流地址:http(s)://{拉流域名}/{AppName}/{StreamName}_autortm.sdp?{鉴权信息},例如 https://pull.example.com/live/test_autortm.sdp?auth_key=1779891783-0-0-cd9bdb2b6****5e9f6f27c180a13a652。开启拉流域名的 URL 鉴权后,用于鉴权计算的 StreamName 为 {StreamName}_autortm,例如 test_autortm。使用该地址播放时,系统会进行以下自动处理:
系统会自动检测直播流是否包含 B 帧。
如果直播流包含 B 帧:系统会通过转码移除 B 帧,并收取标准转码费用。 如果直播流不包含 B 帧:系统会复制源流视频,不收取视频转码费用。 系统会自动检测音频编码方式是 AAC 还是 Opus。
如果音频编码方式是 AAC:系统会将音频转码为 Opus。如果未涉及视频转码,则收取纯音频转码费用。详见纯音频转码 。 如果音频编码方式是 Opus:系统会复制源流音频,不收取纯音频转码费用。 DASH 拉流地址:http(s)://{拉流域名}/{AppName}/{StreamName}/index.mpd?{鉴权信息},例如 https://pull.example.com/live/test/index.mpd?auth_key=1779891783-0-0-873bca4ce****e85f357be5434067b70。 注意
如需使用 HTTPS 拉流地址或在浏览器环境下播放 RTM 流,必须先开启拉流域名的 HTTPS 安全加密。详见配置 HTTPS 安全加密 。 如需包含鉴权信息,必须先开启拉流域名的 URL 鉴权。详见配置 URL 鉴权 。 以上示例中的 auth_key 为鉴权信息参数,具体参数含义、取值等,详见配置 URL 鉴权 。 如果无法使用适用于 Web 拉流 SDK 的 RTM 拉流地址,请创建工单 联系技术支持团队。
其中,{转码流后缀} 为转码配置中的转码流后缀,例如 _hd、_sd。
RTMP 拉流地址:rtmp://{拉流域名}/{AppName}/{StreamName}{转码流后缀}?{鉴权信息},例如 rtmp://pull.example.com/live/test_hd?auth_key=1779891783-0-0-a808d5b3****d47e28fdafb87a65ce9a。说明
如需生成 RTMPS 拉流地址,可将生成的 RTMP 地址的 rtmp:// 替换为 rtmps://。
FLV 拉流地址:http(s)://{拉流域名}/{AppName}/{StreamName}{转码流后缀}.flv?{鉴权信息},例如 https://pull.example.com/live/test_hd.flv?auth_key=1779891783-0-0-e1f5a2a****4b5fe21cb3efdc89af901。 HLS 拉流地址:http(s)://{拉流域名}/{AppName}/{StreamName}{转码流后缀}.m3u8?{鉴权信息},例如 https://pull.example.com/live/test_hd.m3u8?auth_key=1779891783-0-0-cd9bdb2b6****5e9f6f27c180a13a652。 适用于客户端拉流 SDK(即 iOS、Android、React Native、Flutter、uni-app 拉流 SDK)以及其他播放器的 RTM 拉流地址:http(s)://{拉流域名}/{AppName}/{StreamName}{转码流后缀}.sdp?{鉴权信息},例如 https://pull.example.com/live/test_hd.sdp?auth_key=1779891783-0-0-873bca4ce****e85f357be5434067b70。 适用于 Web 拉流 SDK 的 RTM 拉流地址:http(s)://{拉流域名}/{AppName}/{StreamName}{转码流后缀}_autortm.sdp?{鉴权信息},例如 https://pull.example.com/live/test_hd_autortm.sdp?auth_key=1779891783-0-0-873bca4ce****e85f357be5434067b70。开启拉流域名的 URL 鉴权后,用于鉴权计算的 StreamName 为 {StreamName}{转码流后缀}_autortm,例如 test_hd_autortm。该地址会保留原始转码配置,并额外进行以下处理。使用该地址播放时,转码费用按原始转码配置对应的规格计费。
系统会自动检测直播流是否包含 B 帧。
如果直播流包含 B 帧:系统会通过转码移除 B 帧,其他配置保持原始转码配置不变。 如果直播流不包含 B 帧:系统会按原始转码配置进行转码。 系统会自动检测音频编码方式是 AAC 还是 Opus。
如果音频编码方式是 AAC:系统会将音频转码为 Opus,其他配置保持原始转码配置不变。 如果音频编码方式是 Opus:系统会复制音频,不进行音频转码,其他配置保持原始转码配置不变。 DASH 拉流地址:http(s)://{拉流域名}/{AppName}/{StreamName}{转码流后缀}/index.mpd?{鉴权信息},例如 https://pull.example.com/live/test_hd/index.mpd?auth_key=1779891783-0-0-873bca4ce****e85f357be5434067b70。 注意
如需使用 HTTPS 拉流地址或在浏览器环境下播放 RTM 流,必须先开启拉流域名的 HTTPS 安全加密。详见配置 HTTPS 安全加密 。 如需包含鉴权信息,必须先开启拉流域名的 URL 鉴权。详见配置 URL 鉴权 。开启 URL 鉴权后,除适用于 Web 拉流 SDK 的 RTM 拉流地址外,用于鉴权计算的 StreamName 为 {StreamName}{转码流后缀}。例如,地址为 https://pull.example.com/live/test_hd.m3u8 时,用于鉴权计算的 StreamName 为 test_hd。对于适用于 Web 拉流 SDK 的 RTM 拉流地址,用于鉴权计算的 StreamName 为 {StreamName}{转码流后缀}_autortm,例如 test_hd_autortm。 以上示例中的 auth_key 为鉴权信息参数,具体参数含义、取值等,详见配置 URL 鉴权 。 如果无法使用适用于 Web 拉流 SDK 的 RTM 拉流地址,请创建工单 联系技术支持团队。
其中,{子流后缀} 为 ABR 配置中的子流后缀,例如 _uhd、_hd,用于指定 RTM-ABR 地址的起播档位。
HLS-ABR 拉流地址:http(s)://{拉流域名}/{AppName}/{StreamName}/abr.m3u8?{鉴权信息},例如 https://pull.example.com/live/test/abr.m3u8?auth_key=1779891783-0-0-cd9bdb2b6****5e9f6f27c180a13a652。开启拉流域名的 URL 鉴权后,用于鉴权计算的 StreamName 为 {StreamName},例如 test。 DASH-ABR 拉流地址:http(s)://{拉流域名}/{AppName}/{StreamName}_abr/index.mpd?{鉴权信息},例如 https://pull.example.com/live/test_abr/index.mpd?auth_key=1779891783-0-0-873bca4ce****e85f357be5434067b70。开启拉流域名的 URL 鉴权后,用于鉴权计算的 StreamName 为 {StreamName}_abr,例如 test_abr。 RTM-ABR 拉流地址:
适用于 iOS、Android 拉流 SDK 及其他播放器的 RTM-ABR 地址:http(s)://{拉流域名}/{AppName}/{StreamName}{子流后缀}.sdp?rtmabr=true&{鉴权信息},例如 https://pull.example.com/live/test_uhd.sdp?rtmabr=true&auth_key=1782838680-0-0-1da010c****8e2207e0dbb974cc3e17a。开启拉流域名的 URL 鉴权后,用于鉴权计算的 StreamName 为 {StreamName}{子流后缀},例如 test_uhd。 适用于 Web 拉流 SDK 的 RTM-ABR 地址:http(s)://{拉流域名}/{AppName}/{StreamName}{子流后缀}_autortm.sdp?rtmabr=true&{鉴权信息},例如 https://pull.example.com/live/test_uhd_autortm.sdp?rtmabr=true&auth_key=1782838680-0-0-1da010c****8e2207e0dbb974cc3e17a。开启拉流域名的 URL 鉴权后,用于鉴权计算的 StreamName 为 {StreamName}{子流后缀}_autortm,例如 test_uhd_autortm。该地址会保留原始 ABR 配置,并额外进行以下处理。使用该地址播放时,转码费用按原始 ABR 配置对应的规格计费。
系统会自动检测子流是否包含 B 帧。
如果子流包含 B 帧:系统会通过转码移除 B 帧,其他配置保持原始 ABR 配置不变。 如果子流不包含 B 帧:系统会按原始 ABR 配置进行转码。 系统会自动检测音频编码方式是 AAC 还是 Opus。
如果音频编码方式是 AAC:系统会将音频转码为 Opus,其他配置保持原始 ABR 配置不变。 如果音频编码方式是 Opus:系统会复制源流音频,不进行音频转码,其他配置保持原始 ABR 配置不变。 注意
如需使用 HTTPS 拉流地址或在浏览器环境下播放 RTM 流,必须先开启拉流域名的 HTTPS 安全加密。详见配置 HTTPS 安全加密 。 如需包含鉴权信息,必须先开启拉流域名的 URL 鉴权。详见配置 URL 鉴权 。 以上示例中的 auth_key 为鉴权信息参数,具体参数含义、取值等,详见配置 URL 鉴权 。 如果无法使用适用于 Web 拉流 SDK 的 RTM-ABR 地址,请创建工单 联系技术支持团队。
前提条件 已添加推流域名和拉流域名,并完成域名的 CNAME 配置,参见添加域名 和配置 CNAME 。 如需以下功能,请完成配置 HTTPS 安全加密 。
使用视频直播控制台提供的在线推流工具 使用 WebTransport 协议推流 使用视频直播控制台提供的在线播放工具 使用 HTTPS 推流地址或拉流地址 在浏览器环境下推送或播放 RTM 流 如需对推流地址或拉流地址进行 URL 鉴权,请完成配置 URL 鉴权 。 如需生成转码流的拉流地址,请完成转码配置 。 如需生成指定协议类型的 ABR 拉流地址,请先完成 ABR 配置 ,并确保已选择对应的协议类型。 如需生成加密流的拉流地址,请完成加密配置 。
方法一:手动拼接 根据直播地址组成规则 ,您可以:
方法二:通过地址生成器生成 登录视频直播控制台 ,左侧导航栏选择直播工具 > 地址生成器 ,或直接进入地址生成器 。 根据页面提示选择地址类型 和域名 ,并填写自定义的 AppName、自定义的 StreamName 和过期时间。参数 说明 地址类型
选择待生成的地址类型。
推流地址 :主播端使用推流地址将直播流推送至视频直播中心。拉流地址 :观众端使用拉流地址将直播流从视频直播中心拉取到客户端播放。域名
根据地址类型,选择推流域名或拉流域名。
说明
如需使用拉流地址播放指定推流地址的直播内容,推流域名和拉流域名必须属于同一域名空间。
AppName
填写直播流地址的 AppName 字段取值,默认使用 live,支持由大小写字母(A - Z、a - z)、数字(0 - 9)、下划线(_)、短横线(-)和句点(.)组成,长度为 1 到 30 个字符。
说明
如需使用拉流地址播放指定推流地址的直播内容,推流地址和拉流地址需使用相同的 AppName。
StreamName
填写直播流地址的 StreamName 字段取值,支持由大小写字母(A - Z、a - z)、数字(0 - 9)、下划线(_)和短横线(-)组成,长度为 1 到 100 个字符。
说明
如需使用拉流地址播放指定推流地址的直播内容,推流地址和拉流地址需使用相同的 StreamName。
过期时间
选择生成地址的过期时间。该时间会作为 URL 鉴权参数中的时间戳(timestamp)使用,地址的实际失效时间 = 此处配置的时间 + 所选域名 URL 鉴权配置中的有效时长。仅当所选域名已开启 URL 鉴权时,才可设置过期时间。有关如何开启 URL 鉴权和配置有效时长,详见配置 URL 鉴权 。
对于 RTMP、FLV 等用于长时间直播推流或拉流的协议,仅新发起的推流或拉流请求会因地址失效而失败。如果在地址失效前已发起推流或拉流,则可继续推流或拉流。如果生成地址后不是立即使用,请确保实际推拉流开始时地址仍有效。 对于 HLS 和 DASH 拉流协议,用户会不断地发起新的拉流请求,以获取后续分段内容。为避免直播中途播放失败,请确保观众观看期间地址始终有效。
单击生成推流地址 或生成拉流地址 ,在生成结果中获取推流地址和拉流地址。
推流地址 :支持生成带鉴权信息的推流地址。当前通过地址生成器可生成的推流协议有 RTMP 、TS over SRT 、RTMP over SRT 、RTM 和 WebTransport 。说明
如果您使用 OBS 通过 RTMP 协议推流,可在生成结果中获取 OBS 推流地址 和 OBS 串流密钥 。其中,OBS 推流地址 即 OBS 中填写的服务器 ,OBS 串流密钥 即 OBS 中填写的推流码 。 如需包含鉴权信息,必须先开启推流域名的 URL 鉴权。详见配置 URL 鉴权 。 拉流地址 :支持生成带鉴权信息的源流拉流地址、转码流拉流地址和 ABR 拉流地址。当前通过地址生成器可生成的拉流协议有 RTMP 、FLV 、HLS(M3U8) 、RTM 和 DASH 。在源流地址 页签下,您可以获取以下两类 RTM 拉流地址:
RTM Web SDK 播放地址 :适用于 Web 拉流 SDK。使用该地址播放时,系统会进行以下自动处理:
系统会自动检测直播流是否包含 B 帧。
如果直播流包含 B 帧:系统会通过转码移除 B 帧,并收取标准转码费用。 如果直播流不包含 B 帧:系统会复制源流视频,不收取视频转码费用。 系统会自动检测音频编码方式是 AAC 还是 Opus。
如果音频编码方式是 AAC:系统会将音频转码为 Opus。如果未涉及视频转码,则收取纯音频转码费用。详见纯音频转码 。 如果音频编码方式是 Opus:系统会复制源流音频,不收取纯音频转码费用。 RTM 地址 :适用于客户端拉流 SDK,即 iOS、Android、React Native、Flutter、uni-app 拉流 SDK,以及其他播放器。 在转码流地址 页签下,您可以通过选择转码流后缀 来获取不同的转码流地址。您还可以获取以下两类 RTM 拉流地址:
RTM Web SDK 播放地址 :适用于 Web 拉流 SDK。该地址会保留原始转码配置,并额外进行以下处理。使用该地址播放时,转码费用按原始转码配置对应的规格计费。
系统会自动检测直播流是否包含 B 帧。
如果直播流包含 B 帧:系统会通过转码移除 B 帧,其他配置保持原始转码配置不变。 如果直播流不包含 B 帧:系统会按原始转码配置进行转码。 系统会自动检测音频编码方式是 AAC 还是 Opus。
如果音频编码方式是 AAC:系统会将音频转码为 Opus,其他配置保持原始转码配置不变。 如果音频编码方式是 Opus:系统会复制音频,不进行音频转码,其他配置保持原始转码配置不变。 RTM 地址 :适用于客户端拉流 SDK,即 iOS、Android、React Native、Flutter、uni-app 拉流 SDK,以及其他播放器。 在 ABR多码率地址 页签下,您可以获取 HLS-ABR 地址。如果 ABR 配置中已选择 RTM-ABR ,您还可以选择起播档位(子流后缀),获取对应的 RTM-ABR 地址。
RTM Web SDK 播放地址 :适用于 Web 拉流 SDK。该地址会保留原始 ABR 配置,并额外进行以下处理。使用该地址播放时,转码费用按原始 ABR 配置对应的规格计费。
系统会自动检测子流是否包含 B 帧。
如果子流包含 B 帧:系统会通过转码移除 B 帧,其他配置保持原始 ABR 配置不变。 如果子流不包含 B 帧:系统会按原始 ABR 配置进行转码。 系统会自动检测音频编码方式是 AAC 还是 Opus。
如果音频编码方式是 AAC:系统会将音频转码为 Opus,其他配置保持原始 ABR 配置不变。 如果音频编码方式是 Opus:系统会复制源流音频,不进行音频转码,其他配置保持原始 ABR 配置不变。 RTM 地址 :适用于客户端拉流 SDK,即 iOS、Android 拉流 SDK,以及其他播放器。 说明
如需包含鉴权信息,必须先开启拉流域名的 URL 鉴权。详见配置 URL 鉴权 。 如果无法获取 RTM Web SDK 播放地址 ,请创建工单 联系技术支持团队。 您还可以:单击前往在线拉流 图标,在控制台的 Web 拉流 页面进行在线拉流。 单击前往在线推流 图标,在控制台的 Web 推流 页面进行在线推流。 单击复制 图标,复制地址。 单击二维码图标,查看二维码。 单击页面右上方的历史记录 ,查看历史生成的地址记录。
方法三:调用 API 生成 (可选)调用添加或更新推拉流鉴权 接口,为域名开启并配置鉴权密钥。 调用生成推流地址 接口生成推流地址。 调用生成拉流地址 接口生成拉流地址。
地址生成代码示例 本节为您提供基于 Go、Python、Java、PHP 语言生成带鉴权的 RTMP 推流地址的原生代码示例。您可以根据地址拼接规则,自行实现其他协议地址的生成。
package main
import (
"crypto/md5"
"fmt"
)
func main() {
fmt.Println(GenAuthUrl("testDomain", "testApp", "testStream", "testsecretKey", 1636963457))
}
func GenAuthUrl(domain, app, stream, secretKey string, volcTime int64) string {
src := fmt.Sprintf("/%s/%s%s%d", app, stream, secretKey, volcTime)
sign := fmt.Sprintf("%x", md5.Sum([]byte(src)))
return fmt.Sprintf("rtmp://%s/%s/%s?volcTime=%d&volcSecret=%s", domain, app, stream, volcTime, sign)
}
import hashlib
def GenAuthUrl(domain, app, stream, secretKey, volcTime):
src = "/%s/%s%s%d" % (app, stream, secretKey, volcTime)
sign = hashlib.md5(src.encode("utf8")).hexdigest()
return "rtmp://%s/%s/%s?volcTime=%d&volcSecret=%s" % (domain, app, stream, volcTime, sign)
if __name__ == '__main__':
print(GenAuthUrl("testDomain", "testApp", "testStream", "testsecretKey", 1636963457))
package demo;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Demo1 {
public static void main(String[] args) throws NoSuchAlgorithmException {
System.out.println((GenAuthUrl("testDomain", "testApp", "testStream", "testsecretKey", 1636963457)));
}
public static String GenAuthUrl(String domain, String app, String stream, String secretKey, int volcTime) throws NoSuchAlgorithmException {
String src = String.format("/%s/%s%s%d", app, stream, secretsecretKey, volcTime);
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] md5Bytes = md5.digest(src.getBytes(StandardCharsets.UTF_8));
String sign = "";
for (int i = 0; i < md5Bytes.length; i++) {
sign += Integer.toHexString(md5Bytes[i] | 0xFFFFFF00).substring(6);
}
return String.format("rtmp://%s/%s/%s?volcTime=%d&volcSecret=%s", domain, app, stream, volcTime, sign);
}
}
<?php
function GenAuthUrl($domain, $app, $stream, $secretKey, $volcTime){
$src = sprintf("/%s/%s%s%d", $app, $stream, $secretKey, $volcTime);
$sign = sprintf("%s",md5($src));
return sprintf("rtmp://%s/%s/%s?volcTime=%d&volcSecret=%s",$domain, $app, $stream, $volcTime, $sign);
}
echo GenAuthUrl("testDomain", "testApp", "testStream", "testsecretKey", 1636963457);