腾讯云如何获取推流URL

快速获得地址?

如果您是想要生成一组URL用于测试,那您只需要打开直播控制台>>直播码接入>>推流生成器,点击生成推流地址按钮,即可生成一个推流URL和三种不同播放协议的播放URL。

使用 RTMP SDK DEMO 可以快速测试推流URL和播放URL的有效性。

后台自动拼装?

推流URL

实际产品中,您不可能为每一个主播手工创建推流和播放URL,而是要由您的服务器自行拼装,只要符合腾讯云标准规范的URL 就可以用来推流,如下是一条标准的推流URL,它由三个部分组成:
url

  • 直播码
    也叫房间号,推荐用随机数字或者用户ID,注意一个合法的直播码需要拼接 BIZID 前缀。

  • txTime
    何时该URL会过期,格式是十六进制的UNIX时间戳,比如 5867D600 代表 2017年1月1日0时0点0分过期。 我们的客户一般会将 txTime 设置为当前时间 24 小时以后过期,过期时间不要太短,当主播在直播过程中遭遇网络闪断时会重新恢复推流,如果过期时间太短,主播会因为推流 URL 过期而无法恢复推流。

  • txSecret
    防盗链签名,防止攻击者伪造您的后台生成推流URL,计算方法参考防盗链的计算

  • 示例代码
    直播控制台>>直播码接入>>推流生成器页面下半部分有示例代码(PHP和Java两个版本)演示如何生成防盗链地址。

播放URL

播放URL的拼接跟推流URL一样简单,只是需要把子域名从 livepush 改成 liveplay

防盗链的计算?

安全防盗链指的是推流和播放URL中的 txSecret 字段,它的作用是防止攻击者伪造您的后台生成推流URL,或者非法盗取您的播放地址为自己谋利。

安全原理

为了不让攻击者可以伪造您的服务器生成推流URL,我们需要您现在直播管理控制台配置 防盗链加密KEY,由于攻击者无法轻易获得加密KEY,也就无法伪造出有效的推流URL,如下图所示:

计算过程

  • step1 : 交换秘钥
    首先,您需要在官网的控制台,协商一个加密密钥,这个加密密钥用于在您的服务器上生成防盗链签名,由于腾讯云跟您持有同样的密钥,所以您生成的防盗链签名,腾讯云是可以进行解密确认的。

    加密秘钥分为推流防盗链KEY播放防盗链KEY,前者用于生成推流防盗链URL,后者用于生成播放防盗链URL。目前在直播管理控制台上可以自助配置推流防盗链KEY,如下图:

    默认不开播放防盗链

    由于播放防盗链KEY的配置需要同步到几千台CDN集群,同步周期一般都很长,不适合调试期频繁修改。如果您需要配置播放防盗链,可以通过客服电话联系我们,正常流程一般需要 1 - 3 天完成全集群的同步。

  • step2 : 生成txTime
    签名中明文部分为txTime,含义是该链接的有效期,比如现在我当前的时间是2016-07-29 11:13:45,而且期望新生成的URL是在 24 小时后即作废,那么txTime就可以设置为 2016-07-30 11:13:45。

    不过这么长一串时间字符串放在URL里显然 “不太经济”,实际使用中,我们是把 2016-07-30 11:13:45 转换成Unix时间戳,也就是1469848425 (转换方式各种后台编程语言都由直接可用的时间函数来处理),然后转换成16进制以进一步压缩字符长度,也就是 txTime = 1469848425(十六进制) = 579C1B69(十六进制)。

    我们的客户一般会将 txTime 设置为当前时间 24 小时以后过期,过期时间不要太短,当主播在直播过程中遭遇网络闪断时会重新恢复推流,如果过期时间太短,主播会因为推流 URL 过期而无法恢复推流。

  • step3 - 生成txSecret
    txSecret的生成方法是 = MD5(KEY+ stream_id + txTime),这里的 KEY 就是您在 step1 中配置的加密KEY,stream_id在本例中为 8888_test001,txTime为刚才计算的 579C1B69,MD5 即标准的MD5单向不可逆哈希算法。

  • step4 - 合成防盗链地址
    现在我们有了推流(或者播放)URL,有了用来告知腾讯云该URL过期时间的txTime,有了只有腾讯云才能解密并且验证的txSecret,就可以拼合成一个防盗链的安全URL了。

示例代码

直播控制台>>直播码接入>>推流生成器页面下半部分有示例代码(PHP和Java两个版本)演示如何生成防盗链地址。

### 腾讯云 Java 实现拉和点播回调 #### 拉实现 对于拉操作,在Java中可以通过使用腾讯云提供的SDK来简化开发过程。首先,需要引入依赖项: ```xml <dependency> <groupId>com.qcloud</groupId> <artifactId>vod-sdk-java</artifactId> <version>LATEST_VERSION</version> </dependency> ``` 创建一个用于获取直播的方法如下所示[^2]: ```java import com.tencent.cloud.live.model.LivePlayAuthKeyRequest; import com.tencent.cloud.live.service.LiveService; public class LiveStreamPull { private static final String SECRET_ID = "your_secret_id"; private static final String SECRET_KEY = "your_secret_key"; public void getLiveStreamUrl() { LiveService liveService = new LiveService(SECRET_ID, SECRET_KEY); LivePlayAuthKeyRequest request = new LivePlayAuthKeyRequest(); request.setChannelId("channel-id"); try { String playInfo = liveService.getPlayInfo(request).toString(); System.out.println(playInfo); } catch (Exception e) { e.printStackTrace(); } } } ``` 此方法通过`getPlayInfo()`函数返回播放地址。 #### 实现 针对功能,则需构建RTMP URL并利用第三方库(如FFmpeg)完成实际送工作。下面展示了一个简单的例子说明如何生成URL: ```java import com.tencent.cloud.live.model.LivePushAuthKeyRequest; import com.tencent.cloud.live.service.LiveService; public class LiveStreamPush { private static final String SECRET_ID = "your_secret_id"; private static final String SECRET_KEY = "your_secret_key"; public void generateRtmpUrl(){ LiveService liveService = new LiveService(SECRET_ID,SECRET_KEY); LivePushAuthKeyRequest req=new LivePushAuthKeyRequest(); req.setChannelId("channel-id"); try{ String rtmpUrl=liveService.getPushUrl(req); System.out.println(rtmpUrl); }catch(Exception ex){ ex.printStackTrace(); } } } ``` 这里调用了`getPushUrl()`接口获得可用于的RTMP链接。 #### 点播回调处理 当涉及到点播服务中的事件通知机制时,可以设置HTTP回调地址接收来自腾讯云的通知消息。为了验证请求确实来自于腾讯服务器端,建议对接收到的数据包签名进行校验。以下是处理此类回调的一个基本框架: ```java @WebServlet("/vod/callback") public class VodCallbackServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { BufferedReader reader=req.getReader(); StringBuilder sb=new StringBuilder(); String line=null; while((line=reader.readLine())!=null){ sb.append(line); } // 对接收到的消息体做进一步解析与业务逻辑处理... JSONObject jsonObject = JSON.parseObject(sb.toString()); String sign=jsonObject.getString("Sign"); // 获取签名参数 boolean isValid=checkSignature(sign,jsonObject); // 验证签名有效性 if(isValid){ // 处理成功后的响应给客户端 PrintWriter out = resp.getWriter(); out.print("{\"code\":0,\"msg\":\"success\"}"); out.flush(); out.close(); }else{ throw new SecurityException("Invalid signature!"); } } private boolean checkSignature(String sign,JSONObject json){ // 实现具体的签名算法对比逻辑 return true; } } ``` 上述代码片段展示了如何搭建一个能够监听来自腾讯云VOD系统的回调的服务端程序,并包含了初步的安全性考量——即对传入数据的有效性和来源合法性进行了简单检验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值