一、rtmp服务器搭建
环境:
ubuntu
1.先安装docker(省略)
2.下载docker容器
docker pull tiangolo/nginx-rtmp3.运行容器(记得打开防火墙端口 1935和9090)
docker run -tid --name myrtmp -p 1935:1935 -p 9090:80 -v /opt/nginx:/etc/nginx:rw tiangolo/nginx-rtmp4.进入到容器内部,修改nginx配置
docker exec -ti myrtmp /bin/bash
apt-get install vim
vim nginx.config若没有vim命令:
则在容器中安装vim
apt-get install vim如果报错:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package vim
这个时候需要跟新apt-get: 然后进行安装
apt-get update修改nginx配置如下:
worker_processes auto;
rtmp_auto_push on;
events {}
rtmp {
server {
listen 1935;
listen [::]:1935 ipv6only=on;
application live {
live on;
record off;
}
application hls {
live on;
hls on;
hls_path temp/file; #视频流存放地址
hls_fragment 3s;
hls_playlist_length 3s;
hls_continuous on; #连续模式
hls_cleanup off; #对多余的切片进行删除。
hls_nested on; #嵌套模式。
}
}
on_publish http://ip:port/dc-user-backend/liveBroadcastManage/c/liveBroadCastUrl/startPush; # 开始推流回调地址,修改自己ip和端口号即可
on_publish_done http://ip:port/dc-user-backend/liveBroadcastManage/c/liveBroadCastUrl/endPush; # 开始结束推流回调地址
}
说明
on_publish是推流开始时的回调地址
on_publish_done是推流结束时的回调地址
完成配置重启容器:
docker restart myrtmp另外,特殊做法也可以将3,4,5步结合在一起:运行以下命令,然后直接修改映射到服务器地址/opt/docker-nginx-rtmp/myrtmp/etc/nginx的nginx.conf文件配置,就可达到修改容器中nginx.conf文件配置的目的
docker run -tid --name myrtmp -p 1936:1935 -p 9097:80 tiangolo/nginx-rtmp #先生成容器
mkdir -p /opt/docker-nginx-rtmp/myrtmp/etc/nginx #生成容器配置文件映射目录
#将容器中的路径下/etc/nginx配置文件nginx.conf复制到服务器的映射路径下
docker cp myrtmp:/etc/nginx/nginx.conf /opt/docker-nginx-rtmp/myrtmp/etc/nginx/nginx.conf
docker stop myrtmp #停止运行容器
docker rm myrtmp #删除原来的容器
#创建新容器
docker run -tid --name myrtmp -p 1936:1935 -p 9097:80 -v /opt/docker-nginx-rtmp/myrtmp/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:rw tiangolo/nginx-rtmp以上命令也就是将配置容器nginx.conf配置文件映射到宿主机路径下。在映射步骤中,就是先保证宿主机映射路径下存在nginx.conf文件,否则报错。
5.回调接口服务代码:
/**
* obs开始推流(nginx回调接口)
* @param liveBroadcast 直播id
* @return
*/
@PostMapping("/c/liveBroadCastUrl/startPush")
public BaseResponse startPush(String liveBroadcastId) {
// 获取不到直播liveBroadcastId,不允许推流
if(StringUtils.isEmpty(liveBroadcastId)){
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletResponse response = requestAttributes.getResponse();
response.setStatus(500);
return null;
}
//获取到的liveBroadcastId,在已有的创建房间上不存在的不容许推流,代码省略
log.info("{} start liveBroad",liveBroadcastId);
// 结束推流修改直播推流状态
return liveBroadcastService.startPush(liveBroadcastId,1);
}
/**
* obs结束推流(nginx回调接口)
* @param liveBroadcast 直播id
* @return
*/
@PostMapping("/c/liveBroadCastUrl/endPush")
public BaseResponse endPush(String liveBroadcastId) {
log.info("{} end liveBroad", liveBroadcastId);
// 结束推流,修改推流状态
return liveBroadcastService.endPush(liveBroadcastId,0);
}6.直播表建表脚本,创建直播代码略
DROP TABLE IF EXISTS `t_live_broadcast`;
CREATE TABLE `t_live_broadcast` (
`id` varchar(11) NOT NULL COMMENT '直播服务id',
`name` varchar(11) NOT NULL COMMENT '直播服务名称',
`sys_user_id` bigint(20) NOT NULL COMMENT '用户id',
`service_status` int(1) DEFAULT '1' COMMENT '直播状态: 0--异常,1--正常',
`stream_status` int(1) DEFAULT '0' COMMENT '推流状态: 0--未推流,1--推流中',
`stream_address` varchar(255) DEFAULT NULL COMMENT '推流地址',
`stream_token` varchar(255) DEFAULT NULL COMMENT '推流token',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`creator` varchar(30) DEFAULT 'system' COMMENT '创建者',
`modifier` varchar(30) DEFAULT 'system' COMMENT '修改者',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='直播服务表';例如创建直播如下:
![]()
推流数据如下:
直播服务id:ZB-91511655
name:直播服务cc
推流地址:rtmp://127.0.0.1:1935/hls
推流token(推流密钥):aaaa?liveBroadcastId=ZB-91511655
二、推流使用obs的方式推流
本地下载安装obs
打开obs,设置如下图

服务器地址:填推流地址:rtmp://127.0.0.1:1935/hls
串流密钥填上推流token(推流密钥):例如aaaa?liveBroadcastId=ZB-91511655
然后在obs上设置需要的推流来源

最后:选择开始推流
三、拉流使用VLC的方式
本地安装VLC,略
安装好后:在VLC上如下设置,即可拉取观看的流,选择媒体,然后选择打开网络串流,输入网络地址url即可:
rtmp://42.194.251.162:1935/hls/aaaa?liveBroadcastId=123
或者
rtmp://42.194.251.162:1935/hls?liveBroadcastId=123

即可看到推流视频