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

news2024/11/26 6:21:00

使用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 FLVRTMPHLS
传输方式HTTPTCPHTTP
视频封装格式flvchunk(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的数据;客户端接收响应并一直接收数据直到连接断开。

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

  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.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,使得配置生效。

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推流命令成功后,出现如下图所示界面:
    4

  • 用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是否能播放成功
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/167343.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kettle源码启动运行

Kettle源码运行环境如下: windows10 Kettle 9.3.0.2 Java JDK 11 IntelliJ IDEA 2021.2.2 (Community Edition) Maven 3.8.1(版本不需要太高 ) 导入kettle到IDEA 可通过kettle的GIthub地址获取 kettle的克隆连接,或直接下载ZIP压…

python2和python3环境安装

一、背景 ​ 众所周知,python当前有两大主流版本,分别是Python2和Python3系列,其中Python3因为对Python2做了较大的优化,使得Python3不会向下兼容,但是工作和学习中,有很多项目需要Python2的环境&#xff…

SAP 物料账未分摊差异分析

今天在开发处理未分摊差异程序的时候,偶然在网络上看到一篇这样的文章,挺有意思的,特意转载过来,方便大伙学习之用,若有异议,立即撤回。 利用CKMLCP运行完物料分类账之后,差异科目余额通常为0&…

Golang网络聊天室案例

1.聊天室设计分析 一. 概览 实现 个网络聊天室(群) 功能分析: 上线下线聊天,其他人,自己都可以看到聊天消息查询当前聊天室用户名字 who可以修改自己名字 rename | Duke超时踢出 技术点分析: 1 . sock …

Notion 汉化Macwindows客户端

1、注册/登录账号: https://www.notion.so/zh-cn 2、下载桌面应用: https://www.notion.so/desktop 3、下载汉化js插件 地址:https://github.com/Reamd7/notion-zh_CN 点击最后一次更新的标签,下载【 notion-zh_CN.js 】文件 …

[激光原理与应用-64]:激光器-器件 - 光电二极管

第1章 概述光电二极管(Photo-Diode)和普通二极管一样,也是由一个PN结组成的半导体器件,也具有单方向导电特性。但在电路中它不是作整流元件,而是把光信号转换成电信号的光电传感器件。普通二极管在反向电压作用时处于截…

如何在Windows上同时搭建多个版本的golang环境——g

假如说我们不同的项目使用的go版本是不一样的,当我们想切换时,不懂的人可能就直接卸载掉现有的go环境去安装新的go环境了,这种方法可行但是有点呆,今天推荐一个好用的go版本管理工具——g,不是寄了的寄,就是英文字母g。…

jQuery(一):选择器、样式操作、动画效果

jQuery选择器样式操作jQuery 动画效果选择器 1.基础选择器 语法格式: $(“选择器”) // 里面选择器直接写 CSS 选择器即可,但是要加引号 常见选择器类型 例如: 2.样式设置 语法格式: $(‘div’).css(‘属性’, ‘值’) 例如&…

PHP 百度知识图谱数据处理与接入SDK

前言最近的项目在做百度知识图谱相关的,需要实现内容将本地数据处理->数据格式转化->数据接入图谱平台。因为百度提供的sdk为Python的sdk,所以我需要将Python程序转换成PHP格式。图谱生产流程介绍1.知识定义建立相应的scheme,确定类目以…

探究SQL SERVER 更改跟踪

介绍SQL SERVER 在2008 以上的版本提供两个用于数据库中跟踪数据更改的功能:变更数据捕获(CDC )与更改跟踪(CT )。这两个功能使应用程序能够确定对数据库中的用户表所做的 DML 更改(插入、更新和删除操作 &…

Python基础(二十五):异常处理基础知识

文章目录 异常处理基础知识 一、了解异常 二、异常的写法 1、语法

HNUCM蓝桥杯Python组寒假第二次练习

文章目录1316: 选房子2158: 倍数问题2196: X星游戏1034: 近似回文词1749: 最少硬币2079: X星大学2086: 奖牌榜总结:1316: 选房子 1316: 选房子 [命题人 : 外部导入] 时间限制 : 1.000 sec 内存限制 : 128 MB 题目描述 栋栋和李剑已经大四了,想要出去找…

UDS诊断系列介绍13-31服务

本文框架1. 系列介绍1.1 31服务概述2. 31服务请求与应答2.1 31服务请求2.2 31服务正响应2.3 31服务否定响应3. Autosar系列文章快速链接1. 系列介绍 UDS(Unified Diagnostic Services)协议,即统一的诊断服务,是面向整车所有ECU的…

”凌寒独自开“绽放不一样的自己

目录 1:介绍 2:细节介绍 ​编辑 3:范例演示 4:平台助力 5:冲冲冲 1:介绍 每一个程序员都有一个产品的梦想,在独自开,每一位开发者为自己写代码。 毕竟谁又想错过每一个展示自…

CSDN网站勋章获取介绍

持之以恒:已下线,目前无法获取 签到勋章:签到新秀、签到达人、签到王者都已下线,目前无法获取 分享勋章:分享学徒、分享小兵、分享达人、分享精英、分享宗师、分享王者、至尊王者都已下线,目前无法获取 …

Git Extensions的安装与使用

一,介绍: Git Extensions是一个工具包,旨在使Windows下的Git更直观。 功能 Git的Windows资源管理器集成 功能丰富的Git用户界面 32位和64位支持 二,安装 csdn下载地址 GitExtensionhttps://download.csdn.net/download/weixin…

前端面试当中 js原型及原型链常考知识点

一、构造函数 讲原型则离不开构造函数,让我们先来认识下构造函数。 1.1 构造函数分为 实例成员 和 静态成员 让我们先来看看他们分别是什么样子的。 实例成员: 实例成员就是在构造函数内部,通过this添加的成员。实例成员只能通过实例化的…

【MyBatis】第三篇:传递参数

前面聊了一些配置文件的标签意义,在实例演示的时候,发现用的sql都是定死的,也就是无法传递参数,这个不符合开发的环境的,毕竟程序是需要交互的,自然也会有参数传递,下面依次进行演示。 在映射文…

一个注解(优雅)搞定SpringBoot项目中的身份证号、手机号等敏感数据脱敏

📞 文章简介:一个注解搞定身份证号、手机号等敏感数据脱敏处理 💡 创作目的:公司中CRM的第一版快封版了,基本功能都落实了。接下来就是预防等保了,我负责的是核心业务客户模块这里自然有很多数据要做脱敏。…

【十 三】Netty 私有协议栈开发

Netty 私有协议栈开发私有协议介绍跨节点通信私有协议栈设计私有协议栈的网络拓扑图协议栈功能描述协议的通信模型消息体定义消息定义表私有协议消息头定义私有协议支持的字段类型私有协议的编解码规范私有协议的编码私有协议的解码链路的建立客户端握手请求握手请求消息定义服…