首先是官网的文档地址 云直播 新手指南
可以发现它这个主要是按流量和功能收费的 价格总览
流量这里还只收下行的费用,就是只收观看消耗的流量费
其它的收费就是一些增值业务费 (包括直播转码、直播录制、直播截图、直播审核、智能鉴黄、实时监播、移动直播连麦、直播时移、拉流转推、延时播放),这些不用就不收费
好了我们来看下怎么用
首先我们需要申请一个账号,有账号的直接登录没有的注册一个
登录成功后进控制台
直接搜云直播
选域名管理,注意这里需要两个域名,一般申请两个二级域名就可以了,比如拉流域名pull.test.com和推流域名push.test.com,大家自己申请,也可以申请试用域名(找客服帮你弄就可以了)
推流地址就是指录制视频的地址
拉流地址就是观看视频的地址
注意有任何不懂的看右下角有个客服头标,顾客是上帝,他们基本能解决你使用上的所有问题
域名配置好后点后面的管理
我这是拉流地址的配置,主要就是访问控制这一块,就是配置你视频观看地址安全的,你可以根据需要选择配置,这块都是免费的放心配没关系,特别是第一项Key鉴权,就是俗称的防盗链,为了防止有人恶意使用地址建议配置选上,记录下面那个key,后面会用到
这里也可以直接生成播放地址的
然后是推流地址配置,一样的我们把鉴权配置开启,也是为了防止有人盗用地址等问题
这里也可以直接生成推流地址的
注意:只要StreamName一样那么推流和拉流就是同一个视频,如果推流的时候两个流都往一个StreamName上推只会显示第一个流的视频
我们先测试一下刚才生成的地址,大家刚才没有保存没关系,重新生成一个就好了,地址生成没有使用不收费,因为没有产生流量
注意我们尽量用webrtc流,据文档写的这个速度快支持更大的并发
我们去常用工具测试推流地址(就是用刚才上面生成的推流地址放到3所示位置),点开始推流
我们再把刚才的拉流地址放到下面这个页面里点播放 (注意拉流地址的StreamName要和推流地址一样) 视频播放器
可以看到画面就说明刚才生成的推流地址和拉流地址可用
当然这是在控制台操作,我们需要把这个功能对接到系统里面才行,不过也很简单,就是简单的字符串拼接
直接上代码
import lombok.extern.log4j.Log4j2;
import lombok.extern.slf4j.Slf4j;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@Slf4j
@Log4j2
public class TencentYunLiveUtil {
//========================推流配置
/**
* 推流防盗链的key 控制台获取
*/
public static final String PUSH_KEY = "111111111111111111111111111111111";
/**
* 推流地址 控制台配置
*/
public static final String PUSH_URL = "webrtc://push.test.co";
//========================拉流配置
/**
* 拉流防盗链的key 控制台获取
*/
public static final String PLAY_KEY = "1111111111111111111111";
/**
* 拉流地址 控制台配置
* 可将rtmp切换为webrtc,这个更快支持高并发
*/
public static final String PLAY_URL = "webrtc://pull.test.co";
/**
* APP名称 自定义的,默认为live
*/
public static final String APP_NAME = "123";
public static String getPushUrl(String streamName, Date time) {
StringBuffer urlSB = new StringBuffer();
urlSB.append(PUSH_URL);
urlSB.append("/");
urlSB.append(APP_NAME);
urlSB.append("/");
urlSB.append(streamName);
urlSB.append("?");
urlSB.append("txSecret=");
urlSB.append(MD5Util.getMD5Str(PUSH_KEY + streamName + to16Hex(time)));
urlSB.append("&");
urlSB.append("txTime=");
urlSB.append(to16Hex(time));
return urlSB.toString();
}
public static String getPlayUrl(String streamName, Date time) {
StringBuffer urlSB = new StringBuffer();
urlSB.append(PLAY_URL);
urlSB.append("/");
urlSB.append(APP_NAME);
urlSB.append("/");
urlSB.append(streamName);
urlSB.append("?");
urlSB.append("txSecret=");
urlSB.append(MD5Util.getMD5Str(PLAY_KEY + streamName + to16Hex(time)));
urlSB.append("&");
urlSB.append("txTime=");
urlSB.append(to16Hex(time));
return urlSB.toString();
}
/**
* 将传入的时间转换为 16进制
*
* @param date
* @return
*/
public static String to16Hex(Date date) {
Long aLong = date.getTime() / 1000;
String hexString = Long.toHexString(aLong);
return hexString.toUpperCase();
}
public static void main(String[] args) {
// 将字符串日期转换成date
String str = "2024-03-09 12:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String pushUrl = null;
try {
pushUrl = getPushUrl("456", sdf.parse(str));
} catch (ParseException e) {
throw new RuntimeException(e);
}
System.out.println(pushUrl);
String playUrl = null;
try {
playUrl = getPlayUrl("456", sdf.parse(str));
} catch (ParseException e) {
throw new RuntimeException(e);
}
System.out.println(playUrl);
}
}
运行一下
可以看到我们在生成的地址中加了个日期,这个日期就是当前这个链接的有效期,过了这个时间那么这个链接就会失效,但是要注意的是如果推流不结束是不会中断的