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

文章目录

  • 使用nginx搭建HTTP FLV流媒体服务器
    • 1 HTTP FLV简介
    • 2 HTTP FLV流媒体服务搭建
    • 3 结果验证

1 HTTP FLV简介

前文已经介绍了RTSP、RTMP、HLS的流媒体协议,还有一种比较常见的流媒体协议HTTP FLV,其兼具RTMP的实时性及HLS的网络适应性的优点,在很多点直播领域广泛应用。网上有人总结了HTTP FLV、RTMP、HLS的对比,如下表所示:

协议名 HTTP FLV RTMP HLS
传输方式 HTTP TCP HTTP
视频封装格式 flv chunk(rtmp header+body(tag body)) TS
视频时延
数据格式 连续音视频流 连续音视频流 TS切片文件
web无插件播放 支持,通过flv.js 不支持,需要flash插件 支持,直接HTML5的video标签即可播放
防火墙或代理穿透 支持 不支持 支持

其中当前直播流域用的最广泛的是RTMP和HTTP-FLV,因为其非常低的视频时延,可做到1s左右,本文介绍HTTP FLV的流媒体服务搭建方式,有关FLV格式文章,参照:https://blog.csdn.net/water1209/article/details/128562747
HTTP-FLV是将流媒体数据先封装成FLV格式,然后通过HTTP协议传输给客户端,通过HTTP FLV的直播,这里使用了一个HTTP的协议约定,http 的content-length头字段如果不存在,则客户端就会一直接收数据,直到HTTP连接断开为止,其流程很简单,视频客户端发送HTTP请求,不带content-length头字段,服务器响应HTTP,并一直发送FLV的数据;客户端接收响应并一直接收数据直到连接断开。
有关HLS、RTMP、FLV通过nginx搭建相关协议的流媒体服务器的文章,公众号壹零仓,发送nginx,查看相关文章

2 HTTP FLV流媒体服务搭建

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

  1. 安装依赖库:
    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

  2. 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

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

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

  • 启动nginx,验证是否正确,执行命令(注意安装目录下的sbin/nginx):
    /home/wangdenuan/nginx/sbin/nginx
    打开浏览器输入:http://10.45.12.29/,注意ip为本机ip,显示如下内容,即表示安装成功

  1. 修改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 live {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,使得配置生效。

3 结果验证

  • 在PC机上安装ffmpeg,具体安装方式可百度

  • 找一个可播放的RTSP地址,通过vlc播放器验证rtsp地址播放是否正常,这里以rtsp://admin:zxm10@@@@10.45.12.141/h264/ch1/main/av_stream为例:

  • 打开命令提示行,输入如下ffmpeg命令,推送rtmp视频流到rtmp服务器,这里假设rtmp服务器IP为:10.45.12.29
    ffmpeg -i rtsp://admin:zxm10@@@@10.45.12.141/h264/ch1/main/av_stream -vcodec copy -acodec copy -f flv rtmp://10.45.12.29:1935/live/test
    ffmpeg推流命令成功后,出现如下图所示界面:

  • 用vlc播放如下串流:rtmp://10.45.12.29:1935/live/test,验证是否rtmp拉流成功:

  • 用VLC播放如下串流:http://10.45.12.29/hls/test.m3u8,验证HLS是否能够播放成功:

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

使用nginx搭建HTTP FLV流媒体服务器相关推荐

  1. nginx搭建rtmp协议流媒体服务器总结

    最近在 ubuntu12.04+wdlinux(centos)上搭建了一个rtmp服务器,感觉还挺麻烦的,所以记录下. 大部分都是参考网络上的资料. 前提: 在linux下某个目录中新建一个nginx ...

  2. nginx搭建rtmp协议流媒体服务器

    最近和客户对接时问道怎么在不同网段中接收数据流,然后就想到了rtmp推流,客户不会搭建服务器,只能自己动手了,吭吭哧哧终于搞定了. ---------------------------------- ...

  3. 利用NGINX搭建部署直播流媒体服务器

    直播如今是一个老生常谈的问题,怎么用于直播,大多数人只晓得,大佬某平台直播软件,点击开始即可直播.那么如何来搭建一个简易的直播平台呢?仅仅是有直播功能,没有涉及转码以及播放软件. 安装nginx以及r ...

  4. nginx轻松搭建自己的flv流媒体服务器

    nginx搭建flv流媒体服务器 <!--[if !supportLists]-->一.<!--[endif]-->FLV视频发布方式简介 FLV视频有两总发布方式 <! ...

  5. 树莓派使用nginx+rtmp搭建音频直播流媒体服务器

    前言 想使用树莓派连接usb音频采集卡实时采集收音机接收到的音频,树莓派上运行着由nginx+RTMP 搭建的直播流媒体服务器,这样就可以在客户端上通过支持rtmp串流协议的播放器就可以正常接收到音频 ...

  6. centos7 ftp服务器搭建_CentOS7下搭建Jellyfin个人流媒体服务器

    Jellyfin 是一个开源的软件媒体系统,用于控制和管理媒体和流媒体.它是 emby 和 plex 的替代品,它通过多个应用程序从专用服务器向终端用户设备提供流媒体. Jellyfin 属于 Emb ...

  7. 搭建自己的流媒体服务器-(1)服务器搭建篇

    搭建自己的流媒体服务器-(1)服务器搭建篇 http://download.csdn.net/download/katdriver/3272133 http://blog.csdn.net/haoli ...

  8. 使用VLC media player搭建简单的流媒体服务器

    作为程序员,很多时候需要测试流媒体服务功能,VLC media player就可以轻松的将视频.本机画面.笔记本摄像头的内容发布为流媒体服务,在其他网络联通的地方访问,下面只说主要过程. 首先安装VL ...

  9. 搭建rtmp直播流服务之1:使用nginx搭建rtmp直播流服务器(nginx-rtmp模块的安装以及rtmp直播流配置)

    欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) 一.方案简要 首先通过对开发方案的仔细研究(实时监控.流媒体.直播流方案的数据源-->协议转换-->服务器--&g ...

最新文章

  1. 数人云PaaS Innovation 2017,重新定义PaaS进化
  2. java中字符串的截取
  3. 量子计算机打破智子封锁,人类科技会被“智子”锁死?来看量子计算机如何打破技术壁垒...
  4. RequiredFieldValidator----验证控件不起作用
  5. 数据预处理(part2)--多个预测变量数据变换
  6. qt自定义窗口,其绘制的窗口边框线显示不全
  7. 聊聊 Spring Boot 2.x 那些事儿
  8. 蚂蚁集团上市造富:员工激励达1376.9亿元,人均超800万!
  9. centos7使用kubeadm部署高可用k8s集群
  10. MongoDB 表设计
  11. webApp开发-等额本息试算
  12. 四种“不使用第三方变量就可以交换两个变量值”的方法
  13. LTE Phich 分析
  14. 苹果电脑如何使用Siri语音助手!
  15. java 将word转为pdf文件的两种方式【spire.doc.free】【documents4j】
  16. linux下dynamips 与vpcs通信的实现
  17. 思科服务器查看生成树协议,思科交换机生成树协议配置案例
  18. fmc接口定义_FMC接口介绍
  19. 一次buge寻找过程
  20. 免费的jpg转pdf软件

热门文章

  1. 史玉柱:我是一个著名的失败者
  2. 企业制程控制需要注意什么?
  3. 西门子定位器生活中常遇到的小问题
  4. VMWare虚拟机 centos时间与本地时间不一致的问题
  5. 合成海报的小程序插件-票圈海报
  6. 梁继璋家书:下辈子无论爱与不爱,都不会再见
  7. drupal 7 启用 签名设置 filtered html,php – 如何在Drupal 7中为节点设置自定义字段值?...
  8. 2022年6月份报告合辑 附下载
  9. Spark Friendship
  10. 00 后博士获聘南大特任副研究员,曾 4 岁上小学,14 岁考入南大!