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

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

环境准备:准备一台服务器,其中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.rhkb.cn/news/479560.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

打开windows 的字符映射表

快捷键 win R 打开资源管理器 输入: charmap 点击确定

Elasticsearch对于大数据量(上亿量级)的聚合如何实现?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch对于大数据量&#xff08;上亿量级&#xff09;的聚合如何实现&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch对于大数据量&#xff08;上亿量级&#xff09;的聚合如何实现&#xff1f; 1000道 …

解决首次加载数据空指针异常

起初效果&#xff1a; 使用async...await异步加载数据 最终效果&#xff1a; 代码&#xff1a; <template><div class"user-list-container"><!-- 加载状态 --><div v-if"loading" class"loading">正在加载用户数据..…

RTR Chaptor10 上

局部光照 面光源光泽材质一般光源形状 环境光照球面函数和半球函数简单表格形式球面基底球面径向基函数球面高斯函数球谐函数其他球面表示 半球基底AHD 基底辐射法向映射/《半条命2 》基底半球谐波 / H-Basis 在第9章中&#xff0c;我们讨论了基于物理的材质的相关理论&#xf…

若依框架部署在网站一个子目录下(/admin)问题(

部署在子目录下首先修改vue.config.js文件&#xff1a; 问题一&#xff1a;登陆之后跳转到了404页面问题&#xff0c;解决办法如下&#xff1a; src/router/index.js 把404页面直接变成了首页&#xff08;大佬有啥优雅的解决办法求告知&#xff09; 问题二&#xff1a;退出登录…

3DMAX带孔绞线插件使用方法详解

3DMAX带孔绞线插件&#xff0c;一键创建自定义形状孔洞的绞线。 【版本要求】 3dMax 2016及更高 【安装方法】 解压缩后将插件文件&#xff08;.mcg&#xff09;拖动到3dMax视口中&#xff0c;自动完成安装。 【使用方法】 1.用样条线绘制孔洞的1/2形状。 2.点击3dMax“…

阿里发布 EchoMimicV2 :从数字脸扩展到数字人 可以通过图片+音频生成半身动画视频

EchoMimicV2 是由阿里蚂蚁集团推出的开源数字人项目&#xff0c;旨在生成高质量的数字人半身动画视频。以下是该项目的简介&#xff1a; 主要功能&#xff1a; 音频驱动的动画生成&#xff1a;EchoMimicV2 能够使用音频剪辑驱动人物的面部表情和身体动作&#xff0c;实现音频与…

urllib3只支持OpenSSL1.1.1

1 现象 urllib3 v2.0 only supports OpenSSL 1.1.1, currently the ssl module is compiled with OpenSSL 1.1.0j 20 Nov 2018.2 解决方法 降低urllib3的版本。 从pycharm中&#xff0c;先卸载原有的urllib3版本。 菜单“File|Settings|Project:python|Project Interprete…

spark 写入mysql 中文数据 显示?? 或者 乱码

目录 前言 Spark报错&#xff1a; 解决办法&#xff1a; 总结一下&#xff1a; 报错&#xff1a; 解决&#xff1a; 前言 用spark写入mysql中&#xff0c;查看中文数据 显示?? 或者 乱码 Spark报错&#xff1a; Sat Nov 23 19:15:59 CST 2024 WARN: Establishing SSL…

微信小程序条件渲染与列表渲染的全面教程

微信小程序条件渲染与列表渲染的全面教程 引言 在微信小程序的开发中,条件渲染和列表渲染是构建动态用户界面的重要技术。通过条件渲染,我们可以根据不同的状态展示不同的内容,而列表渲染则使得我们能够高效地展示一组数据。本文将详细讲解这两种渲染方式的用法,结合实例…

ctfshow

1,web153 大小写绕过失败 使用.user.ini 来构造后⻔ php.ini是php的⼀个全局配置⽂件&#xff0c;对整个web服务起作⽤&#xff1b;⽽.user.ini和.htaccess⼀样是⽬录的配置⽂件&#xff0c;.user.ini就是⽤户⾃定义的⼀个php.ini&#xff0c;我们可以利⽤这个⽂件来构造后⻔和…

【大数据学习 | Spark-SQL】Spark-SQL编程

上面的是SparkSQL的API操作。 1. 将RDD转化为DataFrame对象 DataFrame&#xff1a; DataFrame是一种以RDD为基础的分布式数据集&#xff0c;类似于传统数据库中的二维表格。带有schema元信息&#xff0c;即DataFrame所表示的二维表数据集的每一列都带有名称和类型。这样的数…

DINO-X:一种用于开放世界目标检测与理解的统一视觉模型

摘要 本文介绍了由IDEA Research开发的DINO-X&#xff0c;这是一个统一的以对象为中心的视觉模型&#xff0c;具有迄今为止最佳的开放世界对象检测性能。DINO-X采用了与Grounding DINO 1.5 [47]相同的基于Transformer的编码器-解码器架构&#xff0c;以追求面向开放世界对象理…

MySQL系列之远程管理(安全)

导览 前言Q&#xff1a;如何保障远程登录安全一、远程登录的主要方式1. 用户名/口令2. SSH3. SSL/TLS 二、使用TLS协议加密连接1. 服务端2. 客户端 结语精彩回放 前言 在我们的学习或工作过程中&#xff0c;作为开发、测试或运维人员&#xff0c;经常会通过各类客户端软件&…

扫振牙刷设计思路以及技术解析

市面上目前常见的就两种&#xff1a;扫振牙刷和超声波牙刷 为了防水&#xff0c;表面还涂上了一层防水漆 一开始的电池管理芯片&#xff0c;可以让充电更加均衡。 如TP4056 第一阶段以恒流充电&#xff1b;当电压达到预定值时转入第二阶段进行恒压充电&#xff0c;此时电流逐…

Hot100 - 除自身以外数组的乘积

Hot100 - 除自身以外数组的乘积 最佳思路&#xff1a; 此问题的关键在于通过两次遍历&#xff0c;分别计算从左侧和右侧开始的累积乘积&#xff0c;以此避免使用额外的除法操作。 时间复杂度&#xff1a; 该算法的时间复杂度为 O(n)&#xff0c;因为我们只需要遍历数组两次。…

一个vue项目如何运行在docker

将 Vue.js 应用程序通过 Docker 发布是一个非常常见的做法&#xff0c;它可以帮助你轻松地部署应用到不同的环境中。下面是一个简单的指南&#xff0c;介绍如何为 Vue.js 项目创建 Dockerfile 并进行构建和运行。 第一步&#xff1a;安装 Docker 确保你的开发机器上已经安装了…

【公益接口】不定时新增接口,仅供学习

文章日期&#xff1a;2024.11.24 使用工具&#xff1a;Python 文章类型&#xff1a;公益接口 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法&#xff…

使用phpStudy小皮面板模拟后端服务器,搭建H5网站运行生产环境

一.下载安装小皮 小皮面板官网下载网址&#xff1a;小皮面板(phpstudy) - 让天下没有难配的服务器环境&#xff01; 安装说明&#xff08;特别注意&#xff09; 1. 安装路径不能包含“中文”或者“空格”&#xff0c;否则会报错&#xff08;例如错误提示&#xff1a;Cant cha…

DolphinDB 登陆伦敦!携手中英人工智能协会共话 AI 未来

11 月 9 日&#xff0c;DolphinDB 联合中英人工智能协会&#xff08;CBAIA&#xff09;在全球人工智能中心、今年三位诺贝尔奖得主的诞生地——伦敦盖茨比计算神经科学中心举办 AI 技术交流会。来自人工智能、量化投资等领域的 150 多位全球专家齐聚一堂&#xff0c;共同探讨人…