当前位置: 欣欣网 > 码农

如何搭建自己的流媒体直播带货系统

2024-02-28码农

简介

  • 直播技术 :直播技术可以分为基于传统的RTMP协议和基于HTTP的HLS协议。RTMP协议延迟较低,适合实时性要求较高的场景,而HLS协议兼容性更好,适合各种终端设备。根据需求选择适合的技术。

  • 搭建服务器环境 :选择一台性能较好的服务器,可以使用云服务器来搭建直播平台。根据直播技术的选择,配置相应的服务器环境,如安装Nginx、FFmpeg等工具。

  • 视频采集与编码 :选择合适的视频采集设备,如摄像头、视频采集卡等,并使用合适的编码器将视频流进行编码,如H.264编码。

  • 流媒体服务器搭建 :搭建流媒体服务器用于接收和分发视频流。可以使用开源的流媒体服务器软件,如Nginx-rtmp-module、FFmpeg等。

  • 视频分发与播放 :选择合适的内容分发网络(CDN)服务商,将视频流分发到全球各地的用户。同时,选择合适的播放器进行视频播放,如HLS协议可以使用HLS.js、video.js等播放器。

  • 直播平台功能开发 :根据需求开发直播平台的功能,如用户注册登录、直播间管理、礼物打赏、弹幕功能等。可以使用前端开发技术(如HTML、CSS、JavaScript)和后端开发技术(如PHP、Java、Python)进行开发。

  • 安全性保障 :确保直播平台的安全性,如用户信息加密、防止恶意攻击、防止盗播等。可以使用网络安全产品和服务进行保障。

  • 直播实时编码流

    服务器

    首先,你需要选择一台高性能的服务器来承载你的流媒体直播系统。服务器的配置应该能够满足你预计的用户量和带宽需求。

    安装流媒体服务

    流媒体服务器软件是构建直播系统的核心组件。常见的流媒体服务器软件包括Nginx-rtmp、Wowza Streaming Engine、Adobe Media Server等。根据你的需求选择一个适合的流媒体服务器软件,并按照其官方文档进行安装和配置。

    服务与模块

    Openresty下载

    wget https://openresty.org/download/openresty-1.21.4.3.tar.gz

    nginx-ts-module下载

    git clone https://github.com/arut/nginx-ts-module.git

    ffmpeg 下载安装

    相关教程请看这里

    动态编译安装

    Openresty环境配置

    apt-get install libreadline-dev libncurses5-dev libpcre3-dev \
    libssl-dev perl make build-essential

    动态编译安装

    ./configure --prefix=/opt/openresty --with-luajit --without-http_redis2_module \
    --with-http_iconv_module --add-dynamic-module=/root/nginx-ts-module
    ...
    make -j4
    ...
    sudo make install

    配置文件

    nginx.conf

    # vim /opt/openresty/nginx/conf/nginx.conf
    error_log logs/error.log;
    pid logs/nginx.pid;
    load_module "/opt/openresty/nginx/modules/ngx_http_ts_module.so"; # 加载模块
    events {
    }
    http {
    server {
    listen 8777;
    location / {
    root html;
    }
    location /publish/ {
    ts;
    ts_hls path=/var/media/hls segment=10s;
    ts_dash path=/var/media/dash segment=10s;
    client_max_body_size 0;
    }
    location /play/ {
    add_header Cache-Control no-cache;
    add_header 'Access-Control-Allow-Origin''*' always;
    add_header 'Access-Control-Expose-Headers''Content-Length,Content-Range';
    add_header 'Access-Control-Allow-Headers''Range';
    types {
    application/x-mpegURL m3u8;
    application/dash+xml mpd;
    video/MP2T ts;
    video/mp4 mp4;
    }
    alias /var/media/;
    }
    }
    }







    流媒体存放文件夹建立

    cd /var & mkdir media
    cd media & mkdir hls & mkdir dash

    FFmpeg推流

    推流是将视频数据从采集设备(如摄像头)发送到流媒体服务器的过程。你可以使用专业的推流软件(如OBS Studio、FFmpeg等)或者编写自己的推流脚本来实现推流功能。

    ffmpeg -re -i rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid -bsf:v h264_mp4toannexb \
    -c copy -f mpegts http://127.0.0.1:8777/publish/sintel

    我这里由于端口被占用,使用的是: 8777 端口

    公网 rtmp 测试地址

    邓紫棋 多美丽mv (非常流畅秒开级别,强烈推荐)
    地址:rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid (可用)
    伊拉克 Al Sharqiya 电视台 (有卡顿延迟)
    地址:rtmp://ns8.indexforce.com/home/mystream (可用)
    韩国GOOD TV (不推荐太卡,很慢)
    地址:rtmp://mobliestream.c3tv.com:554/live/goodtv.sdp (可用)

    客户端播放

    <!DOCTYPE html>
    <htmllang="en">
    <head>
    <metacharset="UTF-8">
    <title>开源技术小栈流媒体直播系统</title>
    </head>
    <body>
    <h1>开源技术小栈 | 流媒体直播系统</h1>
    <scriptsrc="http://cdn.dashjs.org/latest/dash.all.min.js"></script>
    < style>
    video {
    width1024px;
    height600px;
    }
    </ style>
    <div>
    <videodata-dashjs-playerautoplaysrc="http://127.0.0.1:8777/play/dash/sintel/index.mpd"controls></video>
    </div>
    </body>
    </html>

    播放效果

    OBS 推流

    如果不使用 ffmpeg 直接拉流到 http://127.0.0.1:8777/publish/sintel 服务的解决方案是什么?答案是:OBS

    OBS Studio 是 Windows 系统端开源的推流软件,编码使用H264(X264)和AAC ,它一款非常好用的开源直播推流软件,为用户提供了视频、文本、图像等的捕获录制功能。基于GPU的高性能游戏流媒体游戏捕获。支持DirectShow的捕获设备(摄像头,采集卡,等),双线性或lanczos3重采样。当然选择它主要是开源,免费。

    解决方案

    nginx-rtmp-module下载

    git clone https://github.com/arut/nginx-rtmp-module.git

    安装 nginx-ts-module 模块一样动态编译安装既可以,最后别忘记了的在配置文件 load nginx-rtmp-module.so 文件

    # vim /opt/openresty/nginx/conf/nginx.conf
    error_log logs/error.log;
    pid logs/nginx.pid;
    load_module "/opt/openresty/nginx/modules/ngx_rtmp_module.so"# 加载rtmp模块
    ...

    推流顺序

    OBS => nginx-rtmp => nginx-ts

    通过以上我们可以不直接使用ffmpeg 去推流了,而是在Windows端口可以通过OBS很简单的去推流了

    安全性和稳定性优化

    为了保证直播系统的安全性和稳定性,你可以采取一些措施,如设置访问权限、使用SSL证书加密传输、配置负载均衡等。