最近公司要开发一个直播功能,这个任务很快的就分配到了我的身上,领导决定让我们使用腾讯云直播减少一部分的开发量。
看了文档也研究了好几天。大致的功能就是用户使用手机或者电脑或者其他的电子设备工具将信息推送到腾讯云直播服务器上,开发接入将腾讯云的用户直播信息拉取到电子设备上观看。这就是一整套的直播功能,具体还有弹幕啊连麦啊聊天啊等等,我们后面再讲
我大致总结了下:
第一步:推流地址 腾讯会送一个体验版的给开发者测试,后期是不可以继续使用的,这就意味着我们需要申请一个推流域名,当然这个域名没啥要求(可以使用二级域名都无所谓的,但是需要指向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,配合接入一下。这样一个简单的直播就搞定了。
接下来我们需要为这个直播完善一些功能有聊天室、弹幕、连麦。在下篇文章总结一下
只要用自己账号登录下,刷新下这个地址就可以了,好多的参考语言,腾讯都给写好了,我们只要拿过来调用下即可,超级简单的哦