前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[保姆级教程]SRS直播服务器搭建兼ffmpeg推流+obs在线直播+集成

[保姆级教程]SRS直播服务器搭建兼ffmpeg推流+obs在线直播+集成

原创
作者头像
yimi233
修改2022-10-12 19:35:54
7.8K4
修改2022-10-12 19:35:54
举报
文章被收录于专栏:ACfoxACfox

前言

最近一星期一直在研究直播原理和推流操作,网上的教程十分零散,你会发现每个搜索页面点进去都是同个文章,这... 经过我独立研究和网上学习,终于终于走完了基本的直播推流操作。我将互联网零散的知识和自己的理解全部集成在这。此文章为原创,当中会引用不少大佬伟大的项目

感谢以下伟大的项目

https://github.com/ossrs/srs

https://github.com/bilibili/flv.js

https://github.com/FFmpeg/FFmpeg

此教程在一台德国HZ 2C8G 的vps模拟 OS:centos 7

准备硬件要求

一台服务器 配置需求:CPU:1核心以上 内存:2G以上 硬盘:10G以上 宽带:双向5M以上(如果是国外尽量100M以上)

选要

推流服务器:CPU:1核心以上(推荐2核心以上)内存:2G以上 硬盘:20G以上 宽带:上行5M以上(国外尽量100M以上)

一台电脑,可以用于测试obs直播和性能调试

一台中转服务器(主要应用于国外主服务器线路不佳中转流量):CPU:1核心以上 内存:256M以上 宽带:5M以上精品回国线路(cn2-gt cn2-gia)

安装SRS直播服务器

安装docker环境

代码语言:javascript
复制
yum install docker

安装screen

代码语言:javascript
复制
yum install screen

创建screen

代码语言:javascript
复制
screen -S live

PS:如果像返回主root,按ctrl+A+D 即可,返回此窗口运行以下命令

代码语言:javascript
复制
screen -r live

运行SRS

代码语言:javascript
复制
docker run -p 1935:1935 -p 1985:1985 -p 8080:8080 ossrs/srs:3

说明:1935端口为直播推流点 1985端口为控制台 8080端口后面会说到,是直链m3u8和flv输出点

如果你的vps在国内,可能会下载比较慢,可以参考此命令

代码语言:javascript
复制
docker run registry.cn-hangzhou.aliyuncs.com/ossrs/srs:3

具体可看 https://github.com/ossrs/srs-docker#srs3

PS:记得在宝塔或者防火墙等地方开放端口,如果报错,可能需要重启docker

代码语言:javascript
复制
systemctl restart docker

这时最简单最便捷的方法安装完成了,当然你想折腾,可以去github看官方编译步骤 https://github.com/ossrs/sr

如果你不需要ffmpeg自动推流本地视频,你到此就可以结束了

以下为连接方式

rtmp推流连接:rtmp://ip:1935/live/ livestream为密匙

rtmp拉流:rtmp://ip:1935/live/livestream

m3u8直链提取:http://ip:8080/live/livestream.m3u8

flv直链提取:http://ip:8080/live/livestream.flv

播放需要特殊播放器,网页播放下面会讲

安装ffmpeg

运行以下命令

代码语言:javascript
复制
    wget http://www.ffmpeg.org/releases/ffmpeg-3.4.2.tar.gz
    tar -zxvf ffmpeg-3.4.2.tar.gz
    cd ffmpeg-3.4.2
    ./configure
    make
    make install

过程较久,如果报错以下

yasm/nasm not found or too old. Use –disable-yasm for a crippled build.

需要安装yasm,运行以下命令

代码语言:javascript
复制
    wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz&&tar -zxvf yasm-1.3.0.tar.gz&&cd yasm-1.3.0&&./configure&&make&&make install

然后继续安装即可

利用ffmpeg推流到服务器

运行以下命令

代码语言:javascript
复制
ffmpeg -re -i 视频位置 -vcodec copy -acodec copy -f flv -y rtmp://ip:1935/live/livestream

其中可以自己调整,然后用播放器拉流看,会发现成功了,如图

obs直播

下载obs

windows: https://cdn-fastly.obsproject.com/downloads/OBS-Studio-25.0.8-Full-Installer-x64.exe

Mac: https://cdn-fastly.obsproject.com/downloads/obs-mac-25.0.8.dmg

linux: https://obsproject.com/wiki/install-instructions#linux

安装完后自动会设置为中文,如图设置推流

在马赛克地方填入服务器rtmp,上面提到了,密匙也说了,填进去就行了,可以在输出地输入合适码率,根据实际应用和服务器状况调整

在这仅作个简单的推流操作,具体obs操作可以看b站up的教程

如何在web播放

这里自研出集成flv.js html单页

可以直接播放flv流直播源

参考 https://github.com/bilibili/flv.js

请下载此文件放在根目录 flv.js文件夹内

https://pro-file.xiaoheiban.cn/202008/b15118b0-da9a-4c31-8821-14c848a177c3.zip

列出代码

代码语言:javascript
复制
    <!DOCTYPE html><html><head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    <title>ACfox 直播间</title>
    <style>
        .mainContainer {            display: block;            width: 1024px;            margin-left: auto;            margin-right: auto;
        }        .urlInput {            display: block;            width: 100%;            margin-left: auto;            margin-right: auto;            margin-top: 8px;            margin-bottom: 8px;
        }        .centeredVideo {            display: block;            width: 100%;            height: 576px;            margin-left: auto;            margin-right: auto;            margin-bottom: auto;
        }        .controls {            display: block;            width: 100%;            text-align: left;            margin-left: auto;            margin-right: auto;
        }    </style></head><body>
    <div class="mainContainer">
        <video id="videoElement" class="centeredVideo" controls autoplay width="1024" height="576">Your browser is too old which doesn't support HTML5 video.</video>
    </div>
    
    
    <script src="./flv.js/flv.min.js"></script>
    <script>
        var player = document.getElementById('videoElement');        if (flvjs.isSupported()) {            var flvPlayer = flvjs.createPlayer({                type: 'flv',                "isLive": true,
                url: 'xxxx',//这里填你的直播源flv格式

            });
            flvPlayer.attachMediaElement(videoElement);
            flvPlayer.load(); 
            flv_start();
        }        function flv_start() {
            player.play();
        }        function flv_pause() {
            player.pause();
        }        function flv_destroy() {
            player.pause();
            player.unload();
            player.detachMediaElement();
            player.destroy();
            player = null;
        }        function flv_seekto() {
            player.currentTime = parseFloat(document.getElementsByName('seekpoint')[0].value);
        }    </script></body></html>

保存为html文件即可。可以实现免flash播放

推流中转配置

此中转针对国外网络环境不好的状况。中转的服务器可以配置低点,但是网络要好,可以尝试试试gia bgp 香港 台湾地区的nat机

使用nginx转发

安装完nginx后,在配置文件中加入

代码语言:javascript
复制

    stream {
        server {
            listen xxxx;
            proxy_connect_timeout 5s;
            proxy_timeout 20s;
            proxy_pass ip:port;
        }
    }

端口号与你的直播拉流端口对应,如:一台直播服务器ip为9.9.9.9的 flv m3u8端口号为8080 转发到中转机9090端口,那代码为

代码语言:javascript
复制
    stream {
            server {
                listen 9090;
                proxy_connect_timeout 5s;
                proxy_timeout 20s;
                proxy_pass 9.9.9.9:8080;
            }
    }

注意记得开放端口,开放安全组

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 准备硬件要求
  • 安装SRS直播服务器
  • 安装ffmpeg
  • obs直播
  • 如何在web播放
  • 推流中转配置
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档