Linux搭建Nginx直播流媒体服务RTMP/RTSP转Http-flv视频浏览器在线播放/Vue/Java/ffmpeg

server/2025/2/25 3:55:01/

参考文章:

https://blog.csdn.net/whatareyouding/article/details/144317654
https://www.cnblogs.com/Gredae/p/18362900
https://www.cnblogs.com/kn-zheng/p/17422707.html
https://blog.51cto.com/u_16099344/10281495
https://www.tulingxueyuan.cn/tlzx/jsp/2198.html
https://blog.csdn.net/wzt001005/article/details/145032455

搭建Nginx

1、下载包到/usr/local位置
wget或者手动下载,注意做好版本映射支持关系

nginx-1.24.0.tar.gz
nginx-http-flv-module-1.2.9.tar.gz

2、解压下载的两个文件:
tar -zxvf 文件名
在这里插入图片描述
3、安装所需依赖
RHEL

yum -y install gcc gcc-c++ openssl openssl-devel zlib zlib-devel pcre pcre-devel

Ubuntu

sudo apt update
sudo apt install -y gcc g++ libssl-dev zlib1g-dev libpcre3 libpcre3-dev

4、配置编译项
进入目录/usr/local/nginx-1.24.0
如有error检查路径

./configure --prefix=/usr/local/nginx  --add-module=/usr/local/nginx-http-flv-module-1.2.9

5、安装
如有error检查缺少的依赖,根据提示安装

make
sudo make install

6、验证安装
/usr/local/nginx/sbin/nginx -V
如果在输出中未看到 --add-module 参数,可能表示模块未成功编译进 Nginx

[root@iZf4o05j05ne6r1jkkogkpZ local]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.24.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) 
built with OpenSSL 3.0.8 7 Feb 2023
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --add-module=/usr/local/nginx-http-flv-module-1.2.9
[root@iZf4o05j05ne6r1jkkogkpZ local]# 

配置Nginx

修改/usr/local/nginx/conf/nginx.conf
配置rtmp,服务端口,live路径等


#user  nobody;
worker_processes  1;events {worker_connections  1024;
}rtmp {server {listen 1935;chunk_size 4096;application live {live on;record off;}}
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;server {listen       8099;server_name  localhost;location / {root   html;index  index.html index.htm;}location /live {flv_live on;chunked_transfer_encoding on;add_header 'Access-Control-Allow-Credentials' 'true';add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Headers' 'X-Requested-With';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Cache-Control' 'no-cache';}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}}

ffmpeg_120">安装ffmpeg

Ubuntu/Debian

sudo apt update
sudo apt install ffmpeg
ffmpeg -version

CentOS/RHEL

sudo yum install ffmpeg ffmpeg-devel
ffmpeg -version

RTMP转http-flv视频流

已知我的视频流:rtsp://10.21.37.252:554/rtp/0501001305
输入命令ffmpeg -i "rtsp://10.21.37.252:554/rtp/0501001305" -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1:1935/live/0501001305"
然后浏览器访问http://127.0.0.1:8081/live?port=1935&app=live&stream=0501001305
就可以看到视频可以播放了,或者vlc访问测试
这个地址可以直接嵌入浏览器播放:http://127.0.0.1:8081/live?port=1935&app=live&stream=0501001305

如果对画质等视频参数进行调整可以研究下ffmpeg

java_141">java调用

得到outUrl地址为http-flv地址

java">		String rtspUrl = "rtsp://10.21.37.252:554/rtp/0501001305";String outUrl = null;// 如果流地址不为空,进行转码:if (rtspUrl != null) {try {LOGGER.info("===准备转流===:{}", rtspUrl);String[] parts = rtspUrl.split("/");String channelCode = parts[parts.length - 1];String rtmpUrl = "rtmp://127.0.0.1:1935/live/" + channelCode;// 创建 ffmpeg 命令String[] command = {"ffmpeg","-i", rtspUrl,"-vcodec", "copy","-acodec", "copy","-f", "flv","-fflags", "+genpts",   // 生成新的时间戳,可能有助于解决时间戳无效或不连续的问题rtmpUrl};// 创建 ProcessBuilderProcessBuilder processBuilder = new ProcessBuilder(command);// 启动进程Process process = processBuilder.start();// 创建一个线程来处理进程输出new Thread(() -> {try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {String line;while ((line = reader.readLine()) != null) {LOGGER.info("FFmpeg Output: {}", line);}} catch (IOException e) {LOGGER.error("Error reading ffmpeg output: {}", e.getMessage());}}).start();// 创建一个线程来处理进程错误流new Thread(() -> {try (BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {String line;while ((line = errorReader.readLine()) != null) {LOGGER.error("FFmpeg Error: {}", line);}} catch (IOException e) {LOGGER.error("Error reading ffmpeg error stream: {}", e.getMessage());}}).start();outUrl = "http://127.0.0.1:8081/live?port=1935&app=live&stream=" + channelCode;} catch (Exception e) {e.printStackTrace();LOGGER.error(e.toString());}

vue_200">前端vue播放

样式根据需要调整

      <div id="video_Player" class="video_mian video_mian_bg"><videoid="mmiid"class="video-js vjs-big-play-centered vjs-fluid"controlspreload="auto"width="100%"height="100%"></video></div>
import Videojs from 'video.js'
import 'video.js/dist/video-js.css'
import "videojs-flvjs-es6";startLive(this.send).then((res) => {console.log(res)	// 得到http-flv地址this.videoPlayer = Videojs(document.querySelector('#mmiid'), {autoplay: 'muted',//自动播放controls: true,//用户可以与之交互的控件loop: true,//视频一结束就重新开始muted: false,//默认情况下将使所有音频静音aspectRatio: "16:9",//显示比率fullscreen: {options: {navigationUI: 'hide'}},techOrder: ["html5", "flvjs"],// 兼容顺序flvjs: {mediaDataSource: {isLive: false,cors: true,withCredentials: false}},sources: [{src: res.data,type: "video/x-flv"}]})});

http://www.ppmy.cn/server/170467.html

相关文章

oracle怎么创建定时任务

在Oracle中创建定时任务&#xff0c;可以使用DBMS_SCHEDULER包&#xff0c;以下是创建定时任务的详细步骤&#xff1a; 1. 创建作业 需要创建一个作业&#xff0c;用于执行定时任务&#xff0c;作业是一组SQL语句或PL/SQL代码&#xff0c;可以定期执行。 BEGINDBMS_SCHEDULE…

uniapp引入ucharts组件不显示

官网说明&#xff1a; uCharts官网 - 秋云uCharts跨平台图表库 自行封装组件不显示问题 在自行封装组件的过程中经常遇到的问题就是不显示问题&#xff0c;很多开发者把官网【演示】中的【原生】代码直接变成组件引用&#xff0c;这样的作法是错误的。我们在指南中的《组件概…

【QT】QtBluetooth 低功耗蓝牙BLE 笔记

前言, 最近发现笔记本的蓝牙可以被qt调用, 然后直接连接蓝牙模块, 不一定非要手机蓝牙app或是另一个蓝牙模块转usb. 1.环境要求 注意,因为电脑环境/版本等原因,你可能会遇到很多文本没提到的问题,不要慌,csdn查一下就好.我也会把配置过程中遇到的典型问题列出来. PC电脑, 系统w…

探索火山引擎 DeepSeek-R1 满血版:流畅、高效的 AI 开发体验

方舟大模型体验中心全新上线&#xff0c;免登录体验满血联网版Deep Seek R1 模型及豆包最新版模型》https://www.volcengine.com/experience/ark?utm_term202502dsinvite&acDSASUQY5&rcWY1FIKKD 大家好&#xff01;最近我有幸试用了火山引擎推出的 DeepSeek-R1 满血版…

国产编辑器EverEdit - 文本编辑器的关键特性:文件变更实时监视,多头编辑不掉坑

1 监视文件变更 1.1 应用场景 某些时候&#xff0c;用户会使用多个编辑器打开同一个文件&#xff0c;如果在A编辑器修改保存&#xff0c;但是B编辑器没有重新打开&#xff0c;直接在B编辑器修改再保存&#xff0c;则可能造成在A编辑器中修改的内容丢失&#xff0c;因此&#x…

pytorch入门级项目--基于卷积神经网络的数字识别

文章目录 前言1.数据集的介绍2.数据集的准备3.数据集的加载4.自定义网络模型4.1卷积操作4.2池化操作4.3模型搭建 5.模型训练5.1选择损失函数和优化器5.2训练 6.模型的保存7.模型的验证结语 前言 本篇博客主要针对pytorch入门级的教程&#xff0c;实现了一个基于卷积神经网络&a…

《Mycat核心技术》第17章:实现MySQL的读写分离

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球项目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

Qt开发④Qt常用控件_上_QWdget属性+按钮类控件

目录 1. 控件概述和发展 2. QWidget 核心属性 2.1 核心属性概览 2.2 enabled 是否可用 2.3 geometry 位置尺寸 2.4 windowTitle 标题 2.5 windowIcon 图标 2.6 windowOpacity 不透明度 2.7 cursor 光标 2.8 font 字体 2.9 toolTip 鼠标悬停提示 2.10 focusPolicy 焦…