腾讯云云直播推流配置_音视频解决方案_同尘科技

云直播 2年前 (2023-03-24) 浏览 87

为了保护直播推流的信息安全,云直播推流域名默认开启推流鉴权。您可通过推流地址详情页中的推流地址生成器,在线生成对应的推流地址。通过使用推流地址在线推流,实现直播流传输到云直播服务,即实现直播视频上传。

注意事项

云直播默认提供测试域名 xxxx.tlivepush.com,您可通过该域名进行推流测试,但不建议您在正式业务中使用这个域名作为推流域名。 生成的推流地址在设定的过期时间内均可使用,过期后需要重新生成新的推流地址。

前提条件

已开通云直播服务,并完成实名认证。

鉴权配置

1. 进入 域名管理,单击需配置的推流域名管理 进入域名详情页。 2. 单击 推流配置 ,查看 鉴权配置 标签,单击右侧的 编辑
3. 进入推流鉴权配置页,单击按钮选择开启/关闭推流鉴权。4. 修改主 KEY 和备 KEY 信息,单击 保存 即可成功生效。
说明 主 KEY 为必填、备 KEY 为选填,主备 KEY 可实现当 KEY 泄露时平滑更换 KEY 不影响业务。

推流地址生成器

操作步骤

1. 进入 域名管理 选择需配置的推流域名或单击 管理 ,进入域名详情页。2. 选择 推流配置 > 推流地址生成器 ,进行如下配置:2.1 选择过期时间,例如:2022-11-24 16:00:35。2.2 填写自定义的流名称 StreamName,例如:livetest。2.3 单击 生成推流地址 即可生成带着 StreamName 的推流地址。3. 若您的推流域名未开启推流鉴权,您还可以在 推流配置 > 推流地址解析 标签下,查看该推流域名下 RTMP、WebRTC、SRT和RTMP over SRT 这四种推流地址。替换播放地址中的 StreamName(流名称)关联推流地址,关联后即可通过播放地址查看直播画面。


推流地址说明

RTMP 推流地址格式为:

rtmp://domain/AppName/StreamName?txSecret=Md5(key+StreamName+hex(time))&txTime=hex(time)

其中:domain:直播推流域名。AppName:直播的应用名称,默认为 live,可自定义。StreamName:流名称,用户自定义,用于标识直播流。txSecret:开启推流鉴权后生成的鉴权串。txTime:推流地址设置的时间戳,是控制台推流地址的有效时间。注意若您开启了域名鉴权,txTime 即有效时间。控制台为了方便使用,设置的时间即为实际过期时间。若您开启了域名鉴权,计算推流地址时会按照公式倒推出 txTime。在过期时间前进行了推拉流,只要推拉流正常没有断开或停止,即使过期时间到了也能正常保持推拉流状态。

推流地址示例代码

腾讯云为您提供的 PHP、Java 和 Go 语言的推流地址示例代码,您可直接参考示例代码完成推流地址的接入。具体查看操作如下:1. 进入 域名管理。2. 选择推流域名或单击右侧的 管理 ,进入域名详情页。3. 选择 推流配置 ,下拉到底查看 推流地址示例代码 标签。4. 单击切换标签按钮查看 PHP、Java、Go 示例代码,如下所示:PHPJavaGO

/*** 获取推流地址* 如果不传key和过期时间,将返回不含防盗链的url* @param domain 您用来推流的域名*        streamName 您用来区别不同推流地址的唯一流名称*        key 安全密钥*        time 过期时间 sample 2016-11-12 12:00:00* @return String url*/function getPushUrl($domain, $streamName, $key = null, $time = null){    if($key && $time){          $txTime = strtoupper(base_convert(strtotime($time),10,16));          //txSecret = MD5( KEY + streamName + txTime )          $txSecret = md5($key.$streamName.$txTime);          $ext_str = "?".http_build_query(array(                "txSecret"=> $txSecret,                "txTime"=> $txTime          ));    }    return "rtmp://".$domain."/live/".$streamName . (isset($ext_str) ? $ext_str : "");}
echo getPushUrl("123.test.com","123456","69e0daf7234b01f257a7adb9f807ae9f","2016-09-11 20:08:07");
package com.test;
import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;
public class Test {
public static void main(String[] args) { System.out.println(getSafeUrl("txrtmp", "11212122", 1469762325L)); }
private static final char[] DIGITS_LOWER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
/* * KEY+ streamName + txTime */ private static String getSafeUrl(String key, String streamName, long txTime) { String input = new StringBuilder(). append(key). append(streamName). append(Long.toHexString(txTime).toUpperCase()).toString();
String txSecret = null; try { MessageDigest messageDigest = MessageDigest.getInstance("MD5"); txSecret = byteArrayToHexString( messageDigest.digest(input.getBytes("UTF-8"))); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); }
return txSecret == null ? "" : new StringBuilder(). append("txSecret="). append(txSecret). append("&"). append("txTime="). append(Long.toHexString(txTime).toUpperCase()). toString(); }
private static String byteArrayToHexString(byte[] data) { char[] out = new char[data.length << 1];
for (int i = 0, j = 0; i >> 4]; out[j++] = DIGITS_LOWER[0x0F & data[i]]; } return new String(out); }}
package a
import ( "crypto/md5" "fmt" "strconv" "strings" "time")
func GetPushUrl(domain, streamName, key string, time int64)(addrstr string){ var ext_str string if key != "" && time != 0{ txTime := strings.ToUpper(strconv.FormatInt(time, 16)) txSecret := md5.Sum([]byte(key + streamName + txTime)) txSecretStr := fmt.Sprintf("%x", txSecret) ext_str = "?txSecret=" + txSecretStr + "&txTime=" + txTime } addrstr = "rtmp://" + domain + "/live/" + streamName + ext_str return}/**domain: 123.test.com*streamName: streamname*key: 69e0daf7234b01f257a7adb9f807ae9f*time: 2022-04-26 14:57:19 CST*/func main(){ domain, streamName, key := "123.test.com", "streamname", "69e0daf7234b01f257a7adb9f807ae9f" //CST: ChinaStandardTimeUT, "2006-01-02 15:04:05 MST" must be const t, err := time.Parse("2006-01-02 15:04:05 MST", "2022-04-26 14:57:19 CST") if err != nil{ fmt.Println("time transfor error!") return } fmt.Println(GetPushUrl(domain, streamName, key, t.Unix())) return}

后续操作

生成推流地址后,可根据业务场景使用直播推流,具体操作请参见 直播推流。

对音视频的解决方案有疑惑?想了解解决方案收费? 联系解决方案专家

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠

阿里云解决方案也看看?: 点击对比阿里云的解决方案

- 0人点赞 -

发表点评 (0条)

not found

暂无评论,你要说点什么吗?