最近公司要開發一個直播功能,這個任務很快的就分配到了我的身上,領導決定讓我們使用騰訊雲直播減少一部分的開發量。
看了文檔也研究了好幾天。大致的功能就是用戶使用手機或者電腦或者其他的電子設備工具將信息推送到騰訊雲直播服務器上,開發接入將騰訊雲的用戶直播信息拉取到電子設備上觀看。這就是一整套的直播功能,具體還有彈幕啊連麥啊聊天啊等等,我們後面再講
我大致總結了下:
第一步:推流地址 騰訊會送一個體驗版的給開發者測試,後期是不可以繼續使用的,這就意味着我們需要申請一個推流域名,當然這個域名沒啥要求(可以使用二級域名都無所謂的,但是需要指向CNAME。域名解析地址一致就可以了)
第二步:拉流地址 這個騰訊就沒給測試域名了,你需要和推流地址差不多的操作方式弄好就行
CNAME配置好之後需要等十多分鐘才生效,不要着急哦!
第三步:就涉及到開發了,我也是在網上找了很多參考文檔,試了好多次。大致需要的功能就是,首先需要創建一個直播間
我這邊大致列舉了一些功能:標題、描述、聊天室id(後面再講)、推流地址、拉流地址、直播狀態。下面是直播間表結構
package cn.fht.carsys.domain.tencentlive;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date;
/**
* 2020/4/10
* 直播間表
*/
public class LiveRoom implements Serializable{
private Long id ;//精品直播主鍵
private String roomTitle ;//直播間標題
private String roomDesc ;//直播間描述/簡介
private String chatroomId ;//聊天室ID
private String pushUrl ;//推流地址
private String pullUrl ;//HTTP拉流地址
private String pullRtmpUrl ;//RTMP拉流地址
private String videoUrl ;//錄播視頻url
private Integer status ;//直播狀態:0-初始化 1-直播中 2-已結束
@Temporal(TemporalType.TIMESTAMP)
private Date createTime ;//創建時間
@PrePersist
private void PrePersist(){
if (this.status == null){
this.status = 0 ;
}
if (this.createTime == null ) {
this.createTime = new Timestamp(System.currentTimeMillis());
}
}
}
然後向手機端提供了直播申請接口
/**
* 直播申請地址
* @param request
* @return
*/
@SystemControllerLog(modelName = "LiveBroadcast.getPushUrl", systemLogType = SystemLogType.CONTROLLER, description = "獲取直播推流地址和拉流地址")
@RequestMapping(value = "/tokenCheck/getPushUrl")
@ResponseBody
public Result getPushUrl(HttpServletRequest request ){
AppLoginInfo appLoginInfo = (AppLoginInfo) request.getAttribute("appLoginInfo");//獲取用戶對象
LiveRoom liveRoom = (LiveRoom) _JsonUtils.toObj(request.getAttribute("jsonParamEntity") + "", LiveRoom.class);
Users users = usersService.findByName(appLoginInfo.getAccount()) ;
if (users == null ){
return ResultUtil.showError(DealLiveBroadcastResultEnum.FAIL_NULLUSERID_MESSAGE);
}
String pushUrl = TecentCloudUtils.getPushUrl(users.getUserID()+"");//推流地址
String pullUrl = TecentCloudUtils.getPullUrl(users.getUserID()+"");//app的拉流
String pullRtmpUrl = TecentCloudUtils.getPullRtmpUrl(users.getUserID()+"");//PC的拉流
liveRoom.setPushUrl(pushUrl);//推流地址
liveRoom.setPullUrl(pullUrl);//app拉流地址
liveRoom.setPullRtmpUrl(pullRtmpUrl);//pc拉流地址
liveRoom.setChatroomId("");//聊天室ID
liveRoom.setVideoUrl("");//錄播視頻url
LiveRoom DB_one = liveRoomService.save(liveRoom) ;
if (DB_one == null ){
return ResultUtil.showError(DealLiveBroadcastResultEnum.FAIL_SAVE) ;
}
return ResultUtil.showSuccess(DealLiveBroadcastResultEnum.SUCCESS_SAVE,DB_one) ;
}
service層的接口
@Resource
private LiveRoomRepository liveRoomRepository ;
public LiveRoom save(LiveRoom liveRoom){
LiveRoom DB = findByUserId(liveRoom.getUserId()) ;
if (DB == null ){
return liveRoomRepository.save(liveRoom) ;
}
return DB ;
}
public LiveRoom findById(Long id) {
return liveRoomRepository.findOne(id) ;
}
public LiveRoom findByUserId(Long userId) {
String query = "AND_EQ_L_userId@"+userId ;
return liveRoomRepository.findOne(Specifications.get(query,LiveRoom.class) );
}
有需要其他接口的自己補充,這個時候就需要手機端看一下 直播 SDK,配合接入一下。這樣一個簡單的直播就搞定了。
接下來我們需要爲這個直播完善一些功能有聊天室、彈幕、連麥。在下篇文章總結一下
只要用自己賬號登錄下,刷新下這個地址就可以了,好多的參考語言,騰訊都給寫好了,我們只要拿過來調用下即可,超級簡單的哦