Ubuntu系统使用Nginx搭建RTMP服务器实现推流

环境:
推流端 rockpi s 主控rk3308 运行ubuntu系统
服务端 ubuntu
播放器 VLC播放器

服务端安装依赖:

apt-get install build-essential libpcre3 libpcre3-dev libssl-dev

创建nginx编译目录:

mkdir my_nginx_rtmp
cd my_nginx_rtmp/

下载 nginx与nginx-rtmp-module包:

wget http://nginx.org/download/nginx-1.21.6.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip

解压缩:

tar -xf nginx-1.21.6.tar.gz
unzip master.zip

编译带nginx-rtmp模块的nginx:

cd nginx-1.21.6/
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master
make j4 && make install

检查nginx是否安装完成:

/usr/local/nginx/sbin/nginx -v

将nginx添加到环境变量中:

sudo vi ~/.bashrc

在最后添加:
export PATH=$PATH:/usr/local/nginx/sbin/

添加完成执行source命令:
source ~/.bashrc

修改nginx的配置文件:

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

在最后添加:
rtmp {
        server {
                listen 1935;
                chunk_size 4096;
 
                application live {
                        live on;
                        record off;
                }
        }
}

启动ngnix:

nginx

查看nginx启动情况:

(base) rog@i7:~$ ps -ef | grep nginx | grep -v grep
rog      1312637    2257  0 15:51 ?        00:00:00 nginx: master process nginx
rog      1314761 1312637  0 16:01 ?        00:00:06 nginx: worker process

查看端口:

(base) rog@i7:~$ netstat -anp | grep nginx
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:1935            0.0.0.0:*               LISTEN      1312637/nginx: mast
tcp        0      0 0.0.0.0:80            0.0.0.0:*               LISTEN      1312637/nginx: mast
tcp        0      0 192.168.110.30:1935     192.168.110.114:10441   ESTABLISHED 1314761/nginx: work
unix  3      [ ]         STREAM     CONNECTED     22049699 1312637/nginx: mast
unix  3      [ ]         STREAM     CONNECTED     22049700 1312637/nginx: mast

端口80是HTTP服务的默认监听端口,端口1935正是RTMP服务器的默认监听端口

遇到的问题:

 如果缺少zlib库,执行:
sudo apt-get install zlib1g-dev 

找不到openssl库,在 ~/.bashrc中添加openssl库位置
export LD_LIBRARY_PATH=/home/rog/anaconda3/lib:$LD_LIBRARY_PATH   
source ~/.bashrc

执行nginx如果出现如下错误,修改配置文件/usr/local/nginx/conf/nginx.conf将端口号改到1024以后的端口例如8090。
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)  

测试:
测试视频下载地址:https://www.yingshiguang.com/

ffmpeg -re -i test2.mp4 -vcodec h264 -f flv rtmp://192.168.110.30:1935/live/1          ## X64 端本地推流
ffmpeg -re -i test.mp4 -c copy -f flv rtmp://192.168.110.30:1935/live/1                ## ARM 端推流

ffmpeg -re -i /dev/video0 -vcodec h264 -f flv rtmp://192.168.110.30:1935/live/1        ## 摄像头推流
ffmpeg -i /dev/video0 -vcodec libx264 -acodec aac -tune zerolatency -f flv rtmp://192.168.110.30:1935/live/1

部分参数解释:
-tune zerolatency  //设置零延时
-preset ultrafast  //--preset的参数主要调节编码速度和质量的平衡,有ultrafast(转码速度最快,视频往往也最模糊)、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo这10个选项,从快到慢

播放器使用VLC:
播放地址同推流地址一样

在这里插入图片描述
使用opencv拉流

import cv2
import time


def main():
    cap = cv2.VideoCapture("rtmp://192.168.110.30:1935/live/1")
    #cv2.namedWindow("video",1)
    cv2.namedWindow("video",cv2.WINDOW_KEEPRATIO)

    while True:
        ret, frame = cap.read()
        width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
        if width == 0:
            print("拉流失败,正在重试")
            time.sleep(1)
            cap = cv2.VideoCapture("rtmp://192.168.110.30:1935/live/1")
            continue
        cv2.imshow("video",cv2.resize(frame,(1500, 900),interpolation = cv2.INTER_CUBIC))
        #cv2.imshow("video",frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cap.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
      main()

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu使用FFmpeg实现摄像头推流服务器的步骤如下: 1. 首先,确保你已经按照\[1\]中提供的链接编译安装了支持h264的FFmpeg源码。 2. 确认你的摄像头可以在Ubuntu上正常工作,并且已经安装了相应的驱动程序。 3. 使用FFmpeg命令行工具来采集摄像头视频并编码为RTMP流。你可以使用以下命令: ``` ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset ultrafast -tune zerolatency -f flv rtmp://your_server_url ``` 这个命令中,`/dev/video0`是你的摄像头设备路径,`libx264`是视频编码器,`ultrafast`是编码速度的预设值,`zerolatency`是为了实现低延迟,`rtmp://your_server_url`是你的服务器地址。 你可以根据需要调整命令中的参数,比如视频分辨率、帧率等。 4. 运行上述命令后,FFmpeg会开始采集摄像头视频并将其编码为RTMP流,然后将流推送到指定的服务器地址。 请注意,以上步骤假设你已经具备了使用FFmpeg API保存或录制文件的基本知识,并且已经安装了相应的依赖库。如果你对FFmpeg API不熟悉,可以参考\[3\]中提供的博文,了解如何使用FFmpeg API实现推流功能。 #### 引用[.reference_title] - *1* [ffmpeg调用USB摄像头并推RTMP流](https://blog.csdn.net/pk296256948/article/details/106493349)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [ffmpeg推流摄像头数据至公网服务器](https://blog.csdn.net/Solititude/article/details/128446139)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值