七牛云实时音视频 相关配置(直播空间创建,推流域名绑定)生成视频播放文件
-
1.创建连麦应用(创建一个音视频会话的应用)
直播空间可以先不关联 ,等一切配置好后 再回过头配置。 -
2.创建一个直播空间进行推流操作,
需要一个必须在中国大陆地区完成 ICP 备案和 公安部备案 的域名。
并且会给你生成一些列的推流需要用到的二级域名,你需要创建出来 并且配置cname。
再进行直播空间配置,设置推流文件的储存空间,
配置直播空间需要一个存储空间位置,那就在七牛云的对象储存再创建一个储存空间即刻。
-
3.储存空间的文件想要有一个外网访问链接,则需要配置一个外链域名(二级域名即刻)。并解析好cname。
此时 空间即可使用,上传一个文件。再用外链访问测试。 -
4.配置实时音视频应用直播空间。
配置推流
${roomName}为魔法变量,也就是说 你进行客户端推流时,会自动以房间名称作为流名称创建一个直播流进行推流操作。-
5.具体操作
5.1生成视频会话房间
accessKey,secretKey:你创建好你的七牛云账号后在个人中心 密钥管理里面可以获取到
appId:你创建的实时音视频的连麦应用名称
//生成申请方和会诊方的roomToken Auth auth = Auth.create(accessKey, secretKey); RtcRoomManager rmanager = new RtcRoomManager(auth); String applyRoomToken = ""; String diaRoomToken = ""; String pushStreamToken1 = ""; String pushStreamToken2 = ""; String roomName = ""; //获取今天已经存在会诊房间数量 try { String format = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); roomName = "hzRoom-" + format;//房间名称 applyRoomToken = rmanager.getRoomToken(appId,roomName,"user1",remoteDiagnoseRequest.getValidTime().getTime(), "user"); diaRoomToken = rmanager.getRoomToken(appId, roomName, "user2", remoteDiagnoseRequest.getValidTime().getTime(), "user"); } catch (Exception e) { e.printStackTrace(); throw new PublicException("新增失败,生成会诊房间令牌异常!"); }
5.2 前端接入,通过roomToken 加入视频会话
推流以客户端为主
官方文档:https://doc.qnsdk.com/rtn/web/docs/merge_stream_track
5.3 推流后是在你配置好的储存空间生成一些列的**.ts**切片文件。
你需要调用官方提供的api,地址:https://developer.qiniu.com/pili/api/2777/save-the-live-playback
示例:
hubName :是你实时音视频云关联的直播空间名称
/** * * @param startTime 视频开始的时间 * @param endTime 视频结束的时间 * @param roomName 你创建的视频会话房间名称 * @return 返回一个视频外链访问地址 * @throws Exception */ private String uploadDiaVideo(Date startTime, Date endTime, String roomName) throws Exception { CloseableHttpClient client = null; CloseableHttpResponse response = null; String fname = hubName + "." + roomName + "/" + StringUtil.getUUID() + ".m3u8"; String roomNameBase64=Base64.getEncoder().encodeToString(roomName.getBytes()); String url = "http://pili.qiniuapi.com/v2/hubs/" + hubName + "/streams/" + roomNameBase64 + "/saveas"; Auth auth = Auth.create(accessKey, secretKey); ObjectMapper objectMapper = new ObjectMapper(); Map<String, Object> data = new HashMap<String, Object>(); data.put("start", startTime.getTime() / 1000); data.put("end", endTime.getTime() / 1000); // data.put("expireDays", 2); data.put("fname", fname); String accToken = (String) auth.authorizationV2(url, "POST", JSON.toJSONString(data).getBytes(), "application/json").get("Authorization"); System.out.println("accToken------------------->" + accToken); try { HttpPost httpPost = new HttpPost(url); httpPost.setHeader(HTTP.CONTENT_TYPE, "application/json"); httpPost.setHeader("Authorization", accToken); httpPost.setEntity(new StringEntity(JSON.toJSONString(data), ContentType.create("text/json", "UTF-8"))); client = HttpClients.createDefault(); response = client.execute(httpPost); HttpEntity entity = response.getEntity(); String result = EntityUtils.toString(entity); } finally { if (response != null) { response.close(); } if (client != null) { client.close(); } } return videos2AccessUrl + fname; }生成视频封面图片
-
其他:生成视频封面文件
/**
*
* @param startTime
* @param roomName
* @return
* @throws Exception
*/
private String uploadDiaVideoCover(Date startTime, String roomName) throws Exception {
CloseableHttpClient client = null;
CloseableHttpResponse response = null;
String roomNameBase64 = Base64.getEncoder().encodeToString(roomName.getBytes());
String url = "http://pili.qiniuapi.com/v2/hubs/" + hubName + "/streams/" + roomNameBase64 + "/snapshot";
String fname = hubName + "." + roomName + "/" + StringUtil.getUUID() + ".jpg";
Auth auth = Auth.create(accessKey, secretKey);
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> data = new HashMap<String, Object>();
data.put("time", startTime.getTime() / 1000);
data.put("deleteAfterDays", 0);
data.put("fname", fname);
String accToken = (String) auth.authorizationV2(url, "POST", JSON.toJSONString(data).getBytes(), "application/json").get("Authorization");
System.out.println("accToken------------------->" + accToken);
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader(HTTP.CONTENT_TYPE, "application/json");
httpPost.setHeader("Authorization", accToken);
try {
httpPost.setEntity(new StringEntity(objectMapper.writeValueAsString(data), ContentType.create("text/json", "UTF-8")));
client = HttpClients.createDefault();
response = client.execute(httpPost);
HttpEntity entity = response.getEntity();
} finally {
if (response != null) {
response.close();
}
if (client != null) {
client.close();
}
}
return videos2AccessUrl + fname;
}