使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv)

这篇具有很好参考价值的文章主要介绍了使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

名词解释

 

RTSP

(Real-Time Streaming Protocol)

是一种网络协议,用于控制实时流媒体的传输。它是一种应用层协议,通常用于在客户端和流媒体服务器之间建立和控制媒体流的传输。RTSP允许客户端向服务器发送请求,如播放、暂停、停止、前进、后退等,以控制媒体流的播放和操作。RTSP可以与不同的传输协议(如RTP、TCP、UDP)结合使用,以实现实时的音视频流传输。它在视频监控、流媒体直播、视频会议等应用中广泛使用。

RTMP

RTMP(Real-Time Messaging Protocol)是一种用于实时数据传输的网络协议。它通常用于流媒体传输和实时通信应用程序。

RTMP 最初由Adobe开发,用于在Adobe Flash播放器和媒体服务器之间进行音视频传输。它使用TCP作为传输层协议,并支持实时音频、视频和数据的传输。

RTMP可以用于直播、视频会议、在线游戏等应用场景。通过RTMP,用户可以将音视频数据流从客户端上传到媒体服务器,然后其他用户可以通过相同的协议从媒体服务器上获取这些数据流。

RTSP和RTMP区别

RTSP(Real-Time Streaming Protocol)和RTMP(Real-Time Messaging Protocol)是两种用于实时流媒体传输的协议,它们有以下几个主要区别:

  1. 传输方式:RTSP使用TCP(可选择使用UDP)作为传输层协议,而RTMP只使用TCP。RTSP通过建立控制连接和数据连接分离的方式来实现对流媒体的控制和数据传输,而RTMP在单个连接上同时进行控制和数据传输。

  2. 功能和用途:RTSP主要用于流媒体的控制和会话管理,在播放、暂停、跳转等操作方面提供了更灵活的控制能力。RTMP则专注于实时的音视频数据传输和交互,适用于直播、视频聊天等场景。

  3. 平台支持:RTSP是一种开放的标准协议,广泛应用于多种平台和设备,包括PC、移动设备、智能电视等。RTMP最初由Adobe开发,尽管它也被广泛应用于许多平台,但在某些平台和设备上可能受到限制或需要特殊许可。

  4. 压缩和编码支持:RTMP支持广泛的音视频编码格式,包括H.264、AAC等。而RTSP在原始协议中并不支持压缩和编码,但可以与其他压缩协议(如RTP)结合使用来实现音视频数据的传输。

总的来说,RTSP更注重流媒体的控制和会话管理,适用于需要灵活控制的场景;而RTMP更注重实时音视频数据传输和交互,适用于直播和实时通信等场景。选择使用哪种协议应根据具体需求和平台支持进行决策。

HTTP-FLV

HTTP-FLV是将流媒体数据先封装成FLV格式,然后通过HTTP协议传输给客户端,通过HTTP FLV的直播,这里使用了一个HTTP的协议约定,http 的content-length头字段如果不存在,则客户端就会一直接收数据,直到HTTP连接断开为止,其流程很简单,视频客户端发送HTTP请求,不带content-length头字段,服务器响应HTTP,并一直发送FLV的数据;客户端接收响应并一直接收数据直到连接断开。

Nginx

Nginx是一个广泛用于提供静态内容、代理和负载均衡的Web服务器。在这个场景中,Nginx用于接收RTSP流并通过HTTP向客户端提供服务

FFmpeg

FFmpeg是一个强大的开源多媒体框架,允许用户解码、编码、转码、复用、解复用、流式处理、过滤和播放各种类型的媒体文件。在这种情况下,FFmpeg用于解码RTSP流,并将其转码为FLV格式。

nginx-http-flv-module

这是一个专门用于通过HTTP传输实时FLV(Flash Video)流的Nginx模块。它作为Nginx的插件,提供了以流式方式提供FLV文件所需的功能

使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv),nginx,http,服务器

整体是使用nginx搭建HTTP FLV流媒体服务器:

流程:摄像头rtsp视频流->rtmp->http-flv.

rtsp转为rtmp需要借助ffmpeg转化。

rtmp转为http-flv需要借助nginx转化。

nginx-http-flv-module是基于nginx-rtmp-module开发的,包含nginx-rtmp-module所有功能,因此不能nginx-rtmp-module同时安装,其编译安装步骤与nginx-rtmp-module类似

安装依赖库:

nginx编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:
yum -y install gcc gcc-c++
nginx的http模块使用pcre来解析正则表达式,pcre-devel 是使用 pcre 开发的一个二次开发库,nginx需要依赖这两个库,执行如下命令:
yum install -y pcre pcre-devel
nginx使用zlib对http包的内容进行gzip,需要安装此库:
yum install -y zlib zlib-devel
nginx可能需要支持HTTPS,最好在系统中安装好openssl,一般系统自带,可通过如下命令确认:
openssl version
如果安装了会显示版本号,如果提示未安装,执行如下命令安装:
yum install -y openssl openssl-devel

nginx编译和安装

下载nginx:
wget http://nginx.org/download/nginx-1.21.6.tar.gz

下载nginx模块HTTP FLV模块:
wget https://github.com/winshining/nginx-http-flv-module/archive/v1.2.10.tar.gz
或者是
https://github.com/winshining/nginx-http-flv-module.git
下载zip包也可以

解压nginx和HTTP FLV模块:
tar -zxvf nginx-1.21.6.tar.gz
tar -zxvf v1.2.10.tar.gz

nginx编译和安装:
./configure --prefix=/usr/local/nginx --add-module=../nginx-http-flv-module-1.2.10
这里配置了–prefix,配置安装路径,不安装到默认路径,以便安装文件移植和卸载,可直接拷贝次目录下的文件到其他电脑运行如果目录不同,启动时通过-p指定目录即可。
make & makeinstall

启动nginx,验证是否正确,执行命令(注意安装目录下的sbin/nginx):
/usr/local/nginx/sbin/nginx

打开浏览器输入:http://10.45.12.29/,注意ip为本机ip,显示如下内容,即表示安装成功

使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv),nginx,http,服务器

修改nginx相关配置支持HTTP FLV

在/home/wangdenuan/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;


events {
    worker_connections  1024;
}


rtmp {
        server {
                listen 1935;
                chunk_size 4096;

                application myapp {
                        live on;
                        meta off;#为了兼容flvj.js
                        hls on;
                        hls_path /tmp/hls;
                        hls_fragment 4;
                        hls_playlist_length 30;
                        record off;
                        allow play all;
                }
        }
}


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       80;
        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 *;
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            alias /tmp/hls;
            expires -1;
        }
        location /flv {
                flv_live on;
                chunked_transfer_encoding on;                         #支持'Transfer-Encoding: chunked'方式回复
                add_header 'Access-Control-Allow-Origin' '*';         #添加额外的 HTTP 头
                add_header 'Access-Control-Allow-Credentials' 'true'; #添加额外的 HTTP 头
        }

        #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;
        }
    }

}


其配置与RTMP配置增加了HTTP FLV的URI的配置。
配置完成后,执行:/home/wangdenuan/nginx/sbin/nginx -s reload,使得配置生效。

如果是多个rtmp地址

rtmp {  
   # 第一个转流地址
    server {  
        listen 1935;      #监听的端口号
        application hik01 {     #自定义的名字
            live on;  
       }  
    } 
     # 第二个转流地址
    server {  
        listen 1936;      #监听的端口号
        application hik02 {     #自定义的名字
            live on;  
       }  
    } 
    # 第N个转流地址
    server {  
        listen xxxx;      #监听的端口号
        application xxxx {     #自定义的名字
            live on;  
       }  
    } 
}

安装ffmpeg

安装FFmpeg需要先安装其依赖:yasm
yum install yasm -y
# 获取
wget https://ffmpeg.org/releases/ffmpeg-4.1.tar.bz2
# 解压
tar -xvf ffmpeg-4.1.tar.bz2
# 查看
cd ffmpeg-4.1
# 编译
./configure
# 安装
make && make install

如果make报错,并且和yasm相关,那就配置一下yasm的环境变量

以上的在使用的过程中会报错,原因不支持libx264编解码,所以下面的会比较全面。

下载ffmpeg

官网下载linux版的ffmpeg,官网链接:https://ffmpeg.org/
点击 download 按钮,如下图所示:
使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv),nginx,http,服务器
点击 more releases 超级链接,如下图所示:
使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv),nginx,http,服务器
选择最新稳定版FFmpeg 5.0.1,点击 Download xz tarball 按钮,如下图所示:
使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv),nginx,http,服务器

上传ffmpeg到VMware虚拟机

使用xftp将源码包ffmpeg-6.0.tar.xz上传至linux虚拟机(本教程上传至/soft/ffmpeg目录)

解压ffmpeg压缩包

# cd /soft/ffmpeg # tar -xvf ffmpeg-6.0.tar.xz

安装gcc

# yum install -y gcc

安装yasm编译器

进入http://yasm.tortall.net/releases/Release1.3.0.html,下载yasm-1.3.0.tar.gz,上传至/soft/ffmpeg目录下

或者使用 wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz

解压yasm

# tar -zxvf yasm-1.3.0.tar.gz

进入解压目录

# cd yasm-1.3.0

编译和安装

# ./configure # make # make install

查看安装结果

# yasm --version

安装nasm

下载:wget https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.gz

解压

# tar -xvf nasm-2.14.02.tar.gz

进入目录

# cd nasm-2.14.02

编译和安装

# ./configure # make && make install

查看安装结果

# nasm --version

安装libx264

https://code.videolan.org/videolan/x264/ 访问git,然后下载tar.gz

解压x264

# tar -xvf x264-master.tar.gz

进入解压目录

# cd x264-master

编译和安装

# ./configure --enable-shared # make && make install

查看安装结果

# x264 --version

安装ffmpeg

进入ffmpeg解压目录

# cd /soft/ffmpeg/ffmpeg-6.0

指定安装目录/soft/ffmpeg

# ./configure --enable-libx264 --enable-gpl --prefix=/soft/ffmpeg

安装

# make && make install

修改文件/etc/ld.so.conf

# vim /etc/ld.so.conf

添加两行:

/soft/ffmpeg/lib/ /usr/local/lib/

使修改的文件/etc/ld.so.conf

# ldconfig

查看安装结果

# ./ffmpeg -version

配置环境变量

# vim /etc/profile export PATH=$PATH:/soft/ffmpeg/bin

使环境变量生效

# source /etc/profile

查看ffmpeg版本

# ffmpeg -version

问题1 & 解决办法

执行编译ffmpeg(./configure --enable-libx264 --enable-gpl --prefix=/soft/ffmpeg)时,异常:

使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv),nginx,http,服务器

解决办法1: 下载pkg-config-0.29.2.tar.gz,地址:https://www.freedesktop.org/wiki/Software/pkg-config/

或者直接 wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz 解压压缩包

# tar zxvf pkg-config-0.29.2.tar.gz

进入解压目录

# cd pkg-config-0.29.2

编译与安装

# ./configure --with-internal-glib # make # make check # make install

查看安装结果

# pkg-config –-version

问题2 & 解决办法

安装ffmpeg后,执行 ./ffmpeg -version 时异常

使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv),nginx,http,服务器

解决办法2: 修改文件/etc/ld.so.conf

# vim /etc/ld.so.conf

添加两行:

/soft/ffmpeg/lib/ /usr/local/lib/

使修改的文件/etc/ld.so.conf生效

# ldconfig

编译之后查看目标文件的链接情况

# ldd ffmpeg

使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv),nginx,http,服务器

看到的结果是有几个库没有找到链接库文件, 显示xxx not found, 但是库文件是存在的。 见:解决办法2。

配置ffmpeg环境变量

# vim /etc/profile

在最后增加两行

export FFMPEG_HOME=/soft/ffmpeg/ffmpeg-6.0 export PATH=$PATH:$FFMPEG_HOME/bin

使配置生效

# source /etc/profile

启用ffmpeg进行推流

以下命令需要修改rtsp流地址,rtmp地址以服务器实际配置为准,其他命令暂时复制即可。

-rtsp_transport tcp 是将默认的udp协议转为tcp协议,可以一定程度上解决花屏(丢包)的问题。

# 命令
ffmpeg -rtsp_transport tcp -i [rtsp流地址] flv -r 25 -s 1920*1080 -an [转换后的rtmp流地址]
# 实例
ffmpeg -rtsp_transport tcp -i rtsp://admin:123456@192.168.00.00 -f flv -r 25 -s 1920*1080 -an rtmp://localhost:1935/hik01/
# 后台运行,在命令前加nohup,后加 &
nohup ffmpeg -rtsp_transport tcp -i rtsp://admin:123456@192.168.00.00 -f flv -r 25 -s 1920*1080 -an rtmp://localhost:1935/hik01/ &

打开命令提示行,输入如下ffmpeg命令,推送rtmp视频流到rtmp服务器,这里假设rtmp服务器IP为:10.45.12.29

ffmpeg -re -i rtsp://admin:zxm10@@@@10.45.12.141/h264/ch1/main/av_stream -vcodec libx264 -acodec aac -f flv rtmp://10.45.12.29:1935/myapp/mystream

后台运行

nohup ffmpeg -re -i rtsp://admin:zxm10@@@@10.45.12.141/h264/ch1/main/av_stream -vcodec libx264 -acodec aac -f flv rtmp://10.45.12.29:1935/myapp/mystream &

利用VLC等视频工具验证flv流是否可用,VLC下载可自行百度

用VLC播放如下串流:http://10.45.12.29/flv?port=1935&app=myapp&stream=mystream,验证HTTP FLV是否能播放成功

使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv),nginx,http,服务器

使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv),nginx,http,服务器文章来源地址https://www.toymoban.com/news/detail-601532.html

到了这里,关于使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Nginx搭建流媒体

    参考地址 安装 ffmpeg 1、下载安装ffmpeg 2、安装依赖 3、编译安装 ffmpeg 4、创建全局链接 5、验证 安装nginx 1、下载依赖包 2、 解压安装nginx 3、配置启动脚本 4、修改 nginx.conf 文件 在原有的nginx.conf 文件中 server 里面增加如下配置 5、 启动 nginx 6、上传视频测试验证 参数说明 022

    2024年02月07日
    浏览(52)
  • 使用EasyDarwin + ffmpeg 搭建流媒体服务器,实现多台智能电视同步播放宣传视频

    近期单位用户提出需求,需要在单位内部的9台安卓智能电视(小米电视)上同步播放用户提供的宣传视频,希望能够做到所有电视音视频同步播放(电视均位于食堂内部,使用内置扬声器,各电视间音频延迟不同会导致混响) 。 由于电视在安装时只预留了电源线,使用HDM

    2024年02月10日
    浏览(79)
  • Docker RTMP服务器搭建与视频流推送示例(流媒体服务器tiangolo/nginx-rtmp,推流客户端ffmpeg)

    在这篇文章中,我将详述如何搭建一个RTMP(Real-Time Messaging Protocol)服务器,并使用ffmpeg技术进行本地视频的推流。最后,我们将使用VLC播放器来播放这个RTMP流。 首先,我们需要搭建一个RTMP服务器。为了方便起见,我们将选择Docker作为服务器的环境。Docker的轻量化和可移植

    2024年01月17日
    浏览(56)
  • 开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放

    目前市面上有很多开源的流媒体服务器解决方案,常见的有SRS、EasyDarwin、ZLMediaKit和Monibuca等。 1、SRS GitHub - ossrs/srs: SRS is a simple, high efficiency and realtime video server, supports RTMP, WebRTC, HLS, HTTP-FLV, SRT, MPEG-DASH and GB28181. 2、EasyDarwin https://github.com/EasyDarwin/EasyDarwin 3、Monibuca Monibuca ·

    2023年04月16日
    浏览(60)
  • 从零搭建自己的公网RTSP、RTMP、FLV、HLS、WS-FLV、WS-RTSP流媒体服务器解决方案

    环境准备 操作系统: 内存:2G以上 CPU: 双核2.0GHz以上 下载并安装SkeyeVSS综合安防视频云流媒体服务 下载SkeyeVSS 下载地址:http://www.openskeye.cn/download/vss.html?id=c24a0a06-6d38-45a5-8623-a1fa3f406ab1 安装SkeyeVSS Windows系统安装 双击下载的windows平台SkeyeVSS_Server_Setup_Vx.x.xx_buildxxxxxxxx.exe安装包

    2023年04月17日
    浏览(83)
  • 【配置环境】安装Ffmpeg音视频编解码工具和搭建EasyDarwin开源流媒体服务器

    目录 一,安装Ffmpeg音视频编解码工具 1,简介 2,开发文档 3,安装部署 二,搭建EasyDarwin开源流媒体服务器 1,简介 2,主要功能特点 3,安装部署 4,效果图 三,简单测试 Ffmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许

    2024年02月07日
    浏览(80)
  • Monibucav4(开源流媒体服务器)在Windows上搭建rtmp服务器并实现拉取rtsp视频流以及转换flv播放

    开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放: 开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放_srs按需拉流_霸道流氓气质的博客-CSDN博客 上面讲了ZLMediaKit的使用流

    2024年02月11日
    浏览(66)
  • FFmpeg 的使用与Docker安装流媒体服务器

    本文阐述的均为命令行的使用方式,并不牵扯FFmpeg 的 C++音视频开发内容,补充一句,C++的资料真的少,能把C++学好的人,我真的是觉得巨佬。 我主要是使用FFmpeg 推流方面的知识,案例大都是靠近这方面。 一、FFmpeg 介绍 本文读者会比较小众~ 看到此文的朋友,大概率是需要

    2024年01月17日
    浏览(57)
  • 华为云云耀云服务器L实例评测|将rtmp延迟降低到500ms以内-srs流媒体服务器测试(rtmp、http-flv、webrtc)

    最近华为云提供华为云-云耀云服务器出了一项 征文活动,可以免费试用。于是本人也迫不及待的白嫖体验一下华为云云耀云服务器L实例,该实例配置如下图,系统版本为 本次测试方向是使用SRS开源服务。SRS是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB2

    2024年04月14日
    浏览(52)
  • 基于javacv(推流),nginx(流媒体服务器),VCL(播放器)搭建直播视频

    目录 1.获取RTSP地址 2.搭建流媒体服务器 2.1下载资源 下载nginx  下载rtmp组件  启动nginx 测试工具(由于java代码调试问题,所以这里先下载一个转码推流的工具,其中javacv的原理也是它)可忽略  下载VLC(测试视频是否成功)  2.2测试向流媒体服务器推流 3.转码  4.查看监控数

    2024年02月06日
    浏览(85)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包