ARM技术论坛
直播中

dutong0321

3年用户 663经验值
擅长:模拟技术 嵌入式技术 接口/总线/驱动 光电显示 控制/MCU RF/无线
私信 关注

【悟空派H3开发板免费体验】03.在悟空派上搭建RTMP服务器并实现RTSP转RTMP流

最近,公司需要一个RTSP转RTMP的需求,从网络上面看了一下,一个基本上都在300以上了,但是对于悟空派来讲只需要几个命令的事不就完事了,而且这么牛的能耗比真的太赞了。如果再搭建个RTMP直播平台,那么服务能力就更加强悍了,而且也可以实现将视频流保留下来。

搭建RTMP服务器

之前曾再其他帖子里介绍过SRS的服务器搭建,这次决定采用nginx来进行服务器的搭建,SRS的优势在于易部署,基于docker基本上几行命令就完事了,但在实际使用中,我一般采用nginx+rtmp比较多一些。我以前也写过在服务器上面搭建RTMP服务器的文章,但是好多年前与现在还是有所不同的,也不要担心在悟空派上编译会需要很长时间,那就太小看悟空派的能力了,那就开始吧。

wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -xzvf nginx-1.24.0.tar.gz 
git clone https://github.com/arut/nginx-rtmp-module.git

我们需要先把nginx和nginx-rtmp模块下载下来,并解压。

sudo apt-get install gcc make
sudo apt-get install libpcre3 libpcre3-dev openssl libssl-dev zlib1g zlib1g-dev
cd nginx-1.24.0
./configure --prefix=/usr/local/nginx  --add-module=../nginx-rtmp-module  --with-http_ssl_module
make
sudo make install

然后,安装一些必须的模块,进行配置,我们将nginx安装到了/usr/local/nginx下面,然后make编译,最后安装就完成了。

接下来就要,配置一下nginx的文件了。

sudo vim /usr/local/nginx/conf/nginx.conf

下面是我的文件配置;

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

rtmp {
        server {
                listen 8910;
                application rtmplive {
                        live on;
                        hls on;
                        hls_path /tmp/app;
                        hls_fragment 5s;
                        hls_playlist_length 30s;
                        recorder all {
                                record all;
                                record_suffix .flv;
                                record_path /home/tong/record/;
                        }
                }
        }
}

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8300;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /hls {
             # 此处是为了跨域读取视频
             add_header 'Access-Control-Allow-Origin' '*';
             alias /tmp/app;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \\.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \\.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

关键是10-26行、52行以及64-68行,注意配置的文件路径要存在。

然后,sudo /usr/local/nginx/sbin/nginx完事。

接下来就开始测试一下吧,在主机上面输入推流命令

ffmpeg -re -i zcxj10620230524182320.flv -acodec copy -vcodec copy -f flv rtmp://192.168.1.173:8910/rtmplive/cctv

成功开始推流:
321.png

推流结束后,然后使用VLC进行查看。
320.png

ffmpeg的RTSP转换和推流

因为要使用ffmpeg,所以我们的第一步就是要安装好ffmpeg。

sudo apt install ffmpeg

安装完毕后,就可以直接进行推流了,千万不要进行转码。

ffmpeg -re -i rtsp://admin:a1234567@192.168.1.66:554/h264/ch1/sub/av_stream -acodec copy -vcodec copy -f flv rtmp://192.168.1.173:8910/rtmplive/cctv

322.png

然后我们打开VLC进行查看,可以看到也是没有问题的。
323.png

当然,将本地文件推流到例如某音、某频号、某站都是没问题的。

因为没有使用软编码,所以CPU占用率也是极低,性能方面不用担心,别说1080P,4K应该也是没有问题的!
image.png

更多回帖

发帖
×
20
完善资料,
赚取积分