本地推流,服务器拉流全流程

news/2024/11/30 3:10:15/

本地推流,服务器拉流全流程

环境准备:准备一台服务器,其中openssl最好为1.1.1版本(可以直接使用ubuntu20.04操作系统)

服务器拉流

1、 安装环境依赖

sudo apt-get update
sudo apt-get install unzip
sudo apt-get install gcc g++ 
sudo apt-get install libpcre3 libpcre3-dev 
sudo apt-get install zlib1g zlib1g-dev 
sudo apt-get install yasm

2 、安装nginx和nginx-http-flv-module

cd /usr/local/
sudo wget http://nginx.org/download/nginx-1.19.5.tar.gz                        
sudo tar -zxvf nginx-1.19.5.tar.gz
sudo mv nginx-1.19.5 nginx
cd nginx
sudo wget https://github.com/winshining/nginx-http-flv-module/archive/master.zip           
sudo unzip master.zip
sudo ./configure --prefix=/usr/local/nginx --add-module=./nginx-http-flv-module-master --with-http_ssl_module

本部分如果报如下错误,原因主要是没有检测到openssl,因此需要进行路径的指定;

./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.

这里可直接长传openssl-1.1.0h.tar.gz这个文件,我这里是直接上传至root路径下,使用tar进行解压到当前路径;

cd /usr/local/nginx
sudo ./configure --prefix=/usr/local/nginx --add-module=./nginx-http-flv-module-master --with-http_ssl_module --with-openssl=/root/openssl-1.1.0h 

再进行安装

sudo make && sudo make install

这里可能报错如下错误,显示在尝试复制 conf/koi-win 文件到 /usr/local/nginx/conf 目录时出现了问题,提示这两个文件实际上是同一个文件。

cp conf/koi-win '/usr/local/nginx/conf'
cp: 'conf/koi-win' and '/usr/local/nginx/conf/koi-win' are the same file
make[1]: *** [objs/Makefile:1618: install] Error 1
make[1]: Leaving directory '/usr/local/nginx'
make: *** [Makefile:11: install] Error 2
root@iZ2ze2bgtgn8177sed0v0fZ:/usr/local/nginx#

需要重新进行编译,添加--conf-path=/usr/local/nginx/nginx.conf,再进行安装即可

sudo ./configure --prefix=/usr/local/nginx --add-module=./nginx-http-flv-module-master --with-http_ssl_module --with-openssl=/root/openssl-1.1.0h --conf-path=/usr/local/nginx/nginx.conf
sudo make && sudo make install

利用Vim编辑nginx配置(因为前面所指定的配置文件路径在/usr/local/nginx/nginx.conf,所以调配也是这个)

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

配置内容如下(根据自己文件路径进行修改,开放服务器9909,9938,80,443端口)

#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;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile            on;keepalive_timeout  65;server {listen       9938;server_name  localhost;location /live {flv_live on; chunked_transfer_encoding  on;add_header 'Access-Control-Allow-Origin' * always; add_header 'Access-Control-Allow-Credentials' 'true'; }location / {root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}include /usr/local/nginx/conf/vhost/*.conf;
}rtmp {  out_queue               4096;out_cork                 8;max_streams             128; timeout                 15s;drop_idle_publisher     15s;log_interval 5s; log_size     1m; server {  listen 9909;      #监听的端口号#server_name 127.0.0.1;        application live {     #自定义的名字live on;  }  application hls {  live on;  hls on;  hls_path /tmp/hls;   hls_fragment 1s;hls_playlist_length 3s;  }  } 
}

检验nginx配置是否有问题,输出successful则代表配置无误

cd /usr/local/nginx/sbin
./nginx -t

先启动,再重启nginx服务

./nginx
./nginx -s reload

查看nginx启动端口

sudo netstat -tulnp | grep nginx

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进入当前公网ip下9938:http://101.200.135.211:9938/,能够访问,代表配置成功

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3 、服务器安装ffmpeg

3.1 安装nasm
cd /usr/local
sudo wget https://www.nasm.us/pub/nasm/releasebuilds/2.14/nasm-2.14.tar.gz
sudo tar -zxvf nasm-2.14.tar.gz
cd nasm-2.14
sudo ./configure
sudo make && sudo make install
3.2 安装×264
cd /usr/local
sudo wget https://code.videolan.org/videolan/x264/-/archive/master/x264-master.zip
sudo unzip x264-master.zip
cd x264-master
sudo ./configure --enable-static --enable-shared
sudo make && sudo make install
3.3 安装ffmpeg
cd /usr/local
sudo wget http://www.ffmpeg.org/releases/ffmpeg-4.3.tar.gz
sudo tar -zxvf ffmpeg-4.3.tar.gz
cd ffmpeg-4.3
sudo ./configure --prefix=/usr/local/ffmpeg  --enable-gpl --enable-libx264
sudo make && sudo make install
sudo cp /usr/local/ffmpeg/bin/* /usr/bin/
sudo vim /etc/ld.so.conf

添加如下配置

include /usr/local/lib/
/usr/local/lib/

保存后进行重载

sudo ldconfig
sudo ffmpeg -version

完成

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

客户端推流

1、Windows端

安装ffmpeg并配置环境变量:官网:FFmpeg

下载后解压并添加系统环境变量,如: D:\develop\ffmpeg-master-latest-win64-gpl\bin

终端输入命令推流到指定rtmp服务器

ffmpeg -f dshow -i video="USB2.0 HD UVC WebCam" -vcodec libx264 -pix_fmt yuv420p -s 400x200 -framerate 15 -r 25 -preset:v ultrafast -tune zerolatency -f flv rtmp://119.3.211.142:9909/live/101

2、Orange Pi Ai Pro/昇腾等设备

通过python代码推流到指定rtmp服务器,注意需要事先安装ffmpeg并配置环境变量

if __name__ == '__main__':context = init_acl(DEVICE_ID)# 初始化模型det_model = YoloV5(model_path=trained_model_path)# 打开摄像头cap = cv2.VideoCapture(0)# 使用 FFmpeg 创建 RTSP 流command = f'ffmpeg -re -i pipe:0 -f flv rtmp://101.200.135.211:9909/live/101'process = subprocess.Popen(command.split(), stdin=subprocess.PIPE)while cap.isOpened():  # 在摄像头打开的情况下循环执行ret, frame = cap.read()  # 读取一帧图像if not ret:break# 前处理、推理、后处理,得到最终推理图片img_res, det_result_str = det_model.infer(frame)# 将处理后的帧转换为字节流_, buffer = cv2.imencode('.jpg', img_res)frame_bytes = buffer.tobytes()# 写入帧到 FFmpeg 进程process.stdin.write(frame_bytes)# 释放资源cap.release()cv2.destroyAllWindows()det_model.release()  # 释放模型相关资源deinit_acl(context, 0)  # 去初始化 ACL# 关闭 FFmpeg 进程process.stdin.close()process.terminate()process.wait()
帧到 FFmpeg 进程process.stdin.write(frame_bytes)# 释放资源cap.release()cv2.destroyAllWindows()det_model.release()  # 释放模型相关资源deinit_acl(context, 0)  # 去初始化 ACL# 关闭 FFmpeg 进程process.stdin.close()process.terminate()process.wait()

http://www.ppmy.cn/news/1551079.html

相关文章

C#中面试的常见问题002

1.wpf和Winfrom的区别 1. 技术基础 WPF&#xff1a;基于.NET Framework&#xff0c;使用XAML&#xff08;可扩展应用程序标记语言&#xff09;作为界面描述语言&#xff0c;支持矢量图形和高级布局。WinForms&#xff1a;基于.NET Framework&#xff0c;使用纯代码或拖放设计…

Qt—QLabel 使用总结

参考链接:Qt—QLabel 使用总结 一、简述 QLabel(标签控件) 提供了一个文本或图像的显示,没有提供用户交互功能。 一个 QLabel 可以包含以下任意内容类型: -纯文本:使用 setText() 设置一个 QString 富文本:使用 setText() 设置一个富文本的 QString图像:使用 setPixma…

科技“加码”编织智能防护网,中威电子助力智慧林业建设

“山泽救于火&#xff0c;草木植成&#xff0c;国之富也”。森林作为陆地生态系统的主体和重要资源&#xff0c;是人类生存发展的生态保障。 然而&#xff0c;随着气候变化和人为因素的交织影响&#xff0c;森林火灾的威胁日益严峻&#xff0c;给生态环境和人类社会带来了巨大…

AI潮汐日报1128期:Sora泄露引发争议、百度早期研究对AI领域Scaling Law的贡献、Meta发布系列AI开源项目

AI 潮汐日报&#xff0c;旨在提供最新潮、最核心、最有意思的AI速递。四大专栏&#xff1a;今日热点、应用速递、研究进展、思维碰撞。 今日热点 OpenAI文本转视频模型Sora泄露引发争议 OpenAI的文本转视频AI模型Sora在Hugging Face上遭遇泄露&#xff0c;泄露者为参与测试的…

IT成长之路-ubuntu驱动篇

历时3天的蹂躏&#xff0c;总结驱动安装全面教程。 步骤一、安装gcc、g和make包 #脚本更新 sudo apt-get update #编译gcc sudo apt-get install gcc #编译g sudo apt-get install g #编译make sudo apt-get install make 注意&#xff1a; gcc、g版本可能会导致显卡驱动安…

开源TTS语音克隆神器GPT-SoVITS_V2版本地整合包部署与远程使用生成音频

文章目录 前言1.GPT-SoVITS V2下载2.本地运行GPT-SoVITS V23.简单使用演示4.安装内网穿透工具4.1 创建远程连接公网地址 5. 固定远程访问公网地址 前言 本文主要介绍如何在Windows系统电脑使用整合包一键部署开源TTS语音克隆神器GPT-SoVITS&#xff0c;并结合cpolar内网穿透工…

queue 和 Stack

import scala.collection.mutable //queue:队列.排队打饭.... //特点&#xff1a;先进先出 //Stack:栈 //特点&#xff1a;先进后出 class ob5 { def main(args: Array[String]): Unit { val q1 mutable.Queue(1) q1.enqueue(2)//入队 q1.enqueue(3)//入队 q1.enqueue(4)…

深度学习day7-BP之梯度下降,过拟合与欠拟合

3 BP之梯度下降 梯度下降算法的目标是找到使损失函数L最小的参数&#xff0c;核心是沿着损失函数梯度的负方向更新参数&#xff0c;逐步逼近局部或者全局最优解&#xff0c;使模型更好地拟合训练数据。 1 数学描述 $$ w_{ij}^{new} w_{ij}^{old} - \alpha \frac{\partial E}…