docker搭建RTMP直播流服务器与流管理

一、rtmp服务器搭建

环境:

ubuntu

1.先安装docker(省略)

2.下载docker容器

docker pull tiangolo/nginx-rtmp

3.运行容器(记得打开防火墙端口 1935和9090)

docker run -tid --name myrtmp -p 1935:1935 -p 9090:80 -v /opt/nginx:/etc/nginx:rw tiangolo/nginx-rtmp

4.进入到容器内部,修改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 

即可看到推流视频


版权声明:本文为xiegongmiao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。