网站建设的大公司,软件培训班学费多少,施工程找工程做哪个网站好,电脑设计培训学校推荐名词解释 RTSP #xff08;Real-Time Streaming Protocol#xff09; 是一种网络协议#xff0c;用于控制实时流媒体的传输。它是一种应用层协议#xff0c;通常用于在客户端和流媒体服务器之间建立和控制媒体流的传输。RTSP允许客户端向服务器发送请求#xff0c;如… 名词解释 RTSP Real-Time Streaming Protocol 是一种网络协议用于控制实时流媒体的传输。它是一种应用层协议通常用于在客户端和流媒体服务器之间建立和控制媒体流的传输。RTSP允许客户端向服务器发送请求如播放、暂停、停止、前进、后退等以控制媒体流的播放和操作。RTSP可以与不同的传输协议如RTP、TCP、UDP结合使用以实现实时的音视频流传输。它在视频监控、流媒体直播、视频会议等应用中广泛使用。 RTMP RTMPReal-Time Messaging Protocol是一种用于实时数据传输的网络协议。它通常用于流媒体传输和实时通信应用程序。 RTMP 最初由Adobe开发用于在Adobe Flash播放器和媒体服务器之间进行音视频传输。它使用TCP作为传输层协议并支持实时音频、视频和数据的传输。 RTMP可以用于直播、视频会议、在线游戏等应用场景。通过RTMP用户可以将音视频数据流从客户端上传到媒体服务器然后其他用户可以通过相同的协议从媒体服务器上获取这些数据流。 RTSP和RTMP区别 RTSPReal-Time Streaming Protocol和RTMPReal-Time Messaging Protocol是两种用于实时流媒体传输的协议它们有以下几个主要区别 传输方式RTSP使用TCP可选择使用UDP作为传输层协议而RTMP只使用TCP。RTSP通过建立控制连接和数据连接分离的方式来实现对流媒体的控制和数据传输而RTMP在单个连接上同时进行控制和数据传输。 功能和用途RTSP主要用于流媒体的控制和会话管理在播放、暂停、跳转等操作方面提供了更灵活的控制能力。RTMP则专注于实时的音视频数据传输和交互适用于直播、视频聊天等场景。 平台支持RTSP是一种开放的标准协议广泛应用于多种平台和设备包括PC、移动设备、智能电视等。RTMP最初由Adobe开发尽管它也被广泛应用于许多平台但在某些平台和设备上可能受到限制或需要特殊许可。 压缩和编码支持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传输实时FLVFlash Video流的Nginx模块。它作为Nginx的插件提供了以流式方式提供FLV文件所需的功能 整体是使用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.gznginx编译和安装
./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相关配置支持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.jshls 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 按钮如下图所示 点击 more releases 超级链接如下图所示 选择最新稳定版FFmpeg 5.0.1点击 Download xz tarball 按钮如下图所示 上传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时异常 解决办法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 时异常 解决办法2 修改文件/etc/ld.so.conf # vim /etc/ld.so.conf 添加两行 /soft/ffmpeg/lib/ /usr/local/lib/ 使修改的文件/etc/ld.so.conf生效 # ldconfig 编译之后查看目标文件的链接情况
# ldd ffmpeg 看到的结果是有几个库没有找到链接库文件, 显示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:123456192.168.00.00 -f flv -r 25 -s 1920*1080 -an rtmp://localhost:1935/hik01/
# 后台运行在命令前加nohup后加
nohup ffmpeg -rtsp_transport tcp -i rtsp://admin:123456192.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:zxm1010.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:zxm1010.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?port1935appmyappstreammystream,验证HTTP FLV是否能播放成功