【ffmpeg命令入门】Nginx的安装与制作HLS流媒体服务器

news2024/9/20 0:29:21

文章目录

  • 前言
    • Nginx简介
    • Ubuntu安装Nginx
    • ffmpeg生成HLS流媒体
      • 1. 生成HLS流媒体
        • 命令说明
    • 配置Nginx
    • ffplay播放m3u8
  • 总结


前言

在数字内容传输和流媒体服务中,HLS(HTTP Live Streaming)已经成为一种流行的解决方案,特别是在视频直播和点播应用中。要实现高效的HLS流媒体服务,Nginx作为一个高性能的Web服务器和反向代理服务器,提供了强大的支持。通过安装和配置Nginx,可以轻松创建一个功能强大的HLS流媒体服务器。本文将介绍Nginx的基础知识以及如何通过它来搭建HLS流媒体服务器。


Nginx简介

Nginx是一个高性能的Web服务器和反向代理服务器,由Igor Sysoev于2002年开发。它以高效、稳定、灵活和低内存消耗著称,适用于处理大量并发连接。Nginx不仅可以作为HTTP服务器,还可以用于负载均衡、反向代理以及作为流媒体服务器。
因为我们的HLS服务器是HTTP协议的,所以我们需要使用Nginx

Ubuntu安装Nginx

打开终端输入下面的命令即可安装Nginx:

sudo apt install nginx

ffmpeg生成HLS流媒体

FFmpeg是一个强大的多媒体处理工具,它不仅能够转换、录制和流式传输多种格式的音视频,还可以生成HLS流媒体。以下是如何使用FFmpeg配置HLS流媒体,并使用FFplay播放的步骤。

1. 生成HLS流媒体

要生成HLS流媒体,需要使用FFmpeg将视频文件转换为HLS格式。HLS格式包括一个或多个 .m3u8 播放列表文件和一系列 .ts 分段文件。下面是一个基本的FFmpeg命令,用于将视频文件转换为HLS格式:

ffmpeg -i a.mp4 -codec:v libx264 -codec:a aac -b:v 1500k -b:a 128k -hls_time 10 -hls_list_size 0 -hls_segment_filename 'stream_%03d.ts' -hls_flags delete_segments output.m3u8
命令说明
  • -i input.mp4:指定输入视频文件。
  • -codec:v libx264:使用H.264视频编码器。
  • -codec:a aac:使用AAC音频编码器。
  • -b:v 1500k:设置视频比特率为1500kbps。
  • -b:a 128k:设置音频比特率为128kbps。
  • -hls_time 10:每个HLS分段文件的时长为10秒。
  • -hls_list_size 0:设置HLS播放列表大小为0,表示不限制播放列表中条目的数量。
  • -hls_segment_filename 'stream_%03d.ts':指定HLS分段文件的名称模式。
  • -hls_flags delete_segments:在播放列表中删除旧的HLS分段文件。
  • output.m3u8:指定输出的HLS播放列表文件名。

运行上述命令后,你会得到一个 output.m3u8 文件和若干个 .ts 分段文件。这些文件可以用于HLS流媒体播放。

配置Nginx

使用下面的命令打开nginx.conf:

sudo nano /etc/nginx/nginx.conf

把这个搞进去:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
	# multi_accept on;
}

http {

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# SSL Settings
	##

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;

	# gzip_vary on;
	# gzip_proxied any;
	# gzip_comp_level 6;
	# gzip_buffers 16 8k;
	# gzip_http_version 1.1;
	# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}


#mail {
#	# See sample authentication script at:
#	# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#	# auth_http localhost/auth.php;
#	# pop3_capabilities "TOP" "USER";
#	# imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#	server {
#		listen     localhost:110;
#		protocol   pop3;
#		proxy      on;
#	}
#
#	server {
#		listen     localhost:143;
#		protocol   imap;
#		proxy      on;
#	}
#}

然后使用命令打开下面这个文件:sudo nano /etc/nginx/sites-available/default

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    # SSL configuration
    #
    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;
    #
    # Note: You should disable gzip for SSL traffic.
    # See: https://bugs.debian.org/773332
    #
    # Read up on ssl_ciphers to ensure a secure configuration.
    # See: https://bugs.debian.org/765782
    #
    # Self signed certs generated by the ssl-cert package
    # Don't use them in a production server!
    #
    # include snippets/snakeoil.conf;

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;
    server_name _;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }

    # pass PHP scripts to FastCGI server
    #
    #location ~ \.php$ {
    #   include snippets/fastcgi-php.conf;
    #
    #   # With php-fpm (or other unix sockets):
    #   fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    #   # With php-cgi (or other tcp sockets):
    #   fastcgi_pass 127.0.0.1:9000;
    #}
}

# HLS server configuration
server {
    listen 80;
    server_name localhost;

    location /hls/ {
        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t ts;
        }
        alias /var/www/html/hls/;
        add_header Cache-Control no-cache;
        add_header Access-Control-Allow-Origin *;
    }

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

紧接着,我们需要把我们生成的ts和m3u8文件复制到/var/www/html/hls/这个路径下面:

ubuntu@ubuntu-virtual-machine:~/HLS$ ls /var/www/html/hls/
output.m3u8  stream_000.ts  stream_001.ts  stream_002.ts  stream_003.ts

最后我们测试他即可:

sudo nginx -t

如果成功则:

sudo systemctl reload nginx

然后我们还需要确保文件的权限:

sudo chown -R www-data:www-data /var/www/html/hls/
sudo chmod -R 755 /var/www/html/hls/

ffplay播放m3u8

我们使用本ubuntu的ffplay播放:

ffplay http://127.0.0.1/hls/output.m3u8

在这里插入图片描述


总结

通过Nginx配置HLS流媒体服务器,不仅能够提供高效的流媒体服务,还能够利用Nginx的高性能特性,处理大量并发请求。Nginx的灵活配置和强大功能使其成为流媒体应用的理想选择。本文介绍了Nginx的基本信息、安装过程及HLS配置,希望能为你的流媒体服务搭建提供帮助。

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

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

相关文章

FPGA FIFO IP核(2)- 配置与调用

前言 上上期介绍了FIFO IP核理论方面的一些内容,接下来开始进行FIFO IP核的配置和使用部分。 FIFO IP核再理解 关键点 先进先出:数据按顺序写入FIFO,先被写入的数据在读取的时候先被读出。 FIFO存储器没有地址线。 FIFO主要作为缓存&#…

C语言 | Leetcode C语言题解之第275题H指数II

题目&#xff1a; 题解&#xff1a; int hIndex(int* citations, int citationsSize) {int left 0, right citationsSize - 1;while (left < right) {int mid left (right - left) / 2;if (citations[mid] > citationsSize - mid) {right mid - 1;} else {left mi…

时效性知识点是否值得花时间学习和研究

新趋势 智能大模型训练成本与人才培养成本之间的博弈。 视频 录了个断断续续的视频&#xff1a; 编程简单吗&#xff1f;为什么技术型内容几乎停更了&#xff1f; 代码形式的程序 /** Created by ArduinoGetStarted.com** This example code is in the public domain** Tuto…

[算法]插入排序和希尔排序

这里简单的介绍一下插入排序和希尔排序的算法实现&#xff0c;为简单起见&#xff0c;排序为升序且排序的数组是整形数组。 一、插入排序 &#xff08;一&#xff09;、算法思路 把数组里的第一个元素视为有序的&#xff0c;然后取第二个元素与前面的元素作比较&#xff0c;如…

2024钉钉杯A题思路详解

文章目录 一、问题一1.1 问题1.2 模型1.3 目标1.4 思路1.4.1 样本探究1.4.2 数据集特性探究&#xff1a;1.4.3 数据预处理1.4.4 数据趋势可视化1.4.5 ARIMA和LSTM两种预测模型1.4.6 参数调整 二、问题二2.1 问题2.2 模型2.3 目标2.4 思路2.4.1 样本探究2.4.2 数据集特性探究2.4…

jenkins中shell脚本中使用构建参数化Groovy变量的四种方式

jenkins中shell脚本中使用构建参数化Groovy变量的四种方式: 以字符变量为例&#xff1a; 流水线代码&#xff1a; pipeline {agent {//label "${server}"label "${28}"}stages {stage(Hello) {steps {echo Hello Worldecho "${28}"echo "…

C语言-TCP通信创建流程

TCP通信创建流程 1. 客户端创建TCP连接 在整个流程中, 主要涉及以下⼏个接⼝socket() : 创建套接字, 使⽤的套接字类型为流式套接字connect() : 连接服务器send() : 数据发送recv() : 数据接收创建套接字 首先&#xff0c;我们需要创建套接字&#xff0c;套接字是通信的基础…

Adobe Lightroom Classic 2024(LRC2024)软件下载(附下载链接)+LRC教程

目录 一、简介 二、下载 三、功能 四、使用操作 一、简介 Adobe Lightroom Classic 2024&#xff08;简称LRC2024&#xff09;是Adobe公司推出的一款专业级照片处理和管理软件&#xff0c;广泛应用于摄影师和摄影爱好者中。作为Adobe家族的一员&#xff0c;LRC2024在继承前…

平价不入耳运动耳机哪款最好?五款回购榜优品种草

许多有健身运动习惯的朋友在选择耳机时会优先考虑不入耳耳机&#xff0c;因为它佩戴舒适&#xff0c;稳固性和安全性更高&#xff0c;不仅在运动时不会轻易掉落&#xff0c;还能够方便我们在进行户外运动时接收外界的声音。那么&#xff0c;平价不入耳运动耳机哪款最好&#xf…

Spark实时(一):StructuredStreaming 介绍

文章目录 Structured Streaming 介绍 一、SparkStreaming实时数据处理痛点 1、复杂的编程模式 2、SparkStreaming处理实时数据只支持Processing Time 3、微批处理,延迟高 4、精准消费一次问题 二、StructuredStreaming架构与场景应用 三、​​​​​​​​​​​​​​…

C++·set与map容器(下)

本节把红黑树封装到set与map容器中去主要就是迭代器的自增自减&#xff0c;封装的大部分内容都展示到最后代码中了 1. 红黑树的改造 因为set容器只有关键码值&#xff0c;map容器中不仅要存关键码值&#xff0c;还要存关键码值对应的数据。但是红黑树只有一颗&#xff0c;我们…

Python操作PostgreSQL指南

文本介绍了使用Python中的psycopg2库来操作PostgreSQL数据库&#xff0c;包括安装必要的包、建立和关闭连接、执行增删改查操作以及处理可能的异常。这些操作将在Python应用程序中与PostgreSQL数据库进行有效的交互。 一. 简介和包的安装 PostgreSQL是一个强大、开源的对象关…

技术分享!国产ARM + FPGA的SDIO通信开发介绍!

SDIO总线介绍 SDIO(Secure Digital lnput and Output),即安全数字输入输出接口。SDIO总线协议是由SD协议演化而来,它主要是对SD协议进行了一些扩展。 SDIO总线主要是为SDIO卡提供一个高速的I/O能力,并伴随着较低的功耗。SDIO总线不但支持SDIO卡,而且还兼容SD内存卡。支持…

web前端开发一、VScode环境搭建

1、VScode安装live server插件&#xff0c;写完代码后&#xff0c;保存就会在浏览器自动更新&#xff0c;不需要再去浏览器点击刷新了 2、创建html文件 3、在文件中输入感叹号 &#xff01; 4、选择第一个&#xff0c;然后回车&#xff0c;就会自动输入html的标准程序 5、…

【Linux C | 网络编程】进程池零拷贝传输的实现详解(四)

上一篇解决了进程池中进行大文件传输的问题&#xff0c;通过循环接收和发送指定大小的内容实现大文件的可靠传输。 【Linux C | 网络编程】进程池大文件传输的实现详解&#xff08;三&#xff09; 但是其中不可避免的在循环中使用多次的send和recv&#xff0c;这就涉及到多次…

0725_驱动1 内核中并发和竟态解决方法

一、内核中并发和竟态相关概念 一、什么时候产生竟态 1.同一个驱动程序&#xff0c;同时被多个应用层程序进行访问 2.访问同一个临界资源&#xff0c;驱动产生竟态 二、竟态产生根本原因 1.在单核cpu中&#xff0c;如果内核支持抢占&#xff0c;就会产生竟态 2.在多核cpu中&…

Internxt:适用于Linux开源安全云存储平台

有无数的云存储平台为您的文件提供安全可靠的存储空间。可在 Linux 上安装的热门云存储应用程序包括Dropbox、Nextcloud和Google Drive&#xff0c;遗憾的是&#xff0c;后者迄今为止不提供 Linux 客户端。 其他自托管选项包括OwnCloud、Pydio Cells、Seafile、Resilio和Synct…

【C++深度探索】AVL树与红黑树的原理与特性

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;C从入门至进阶 这里将会不定期更新有关C/C的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 前言 前…

鱼哥好书分享活动第28期:看完这篇《终端安全运营》终端安全企业基石,为你的终端安全保驾护航!

鱼哥好书分享活动第28期&#xff1a;看完这篇《终端安全运营》终端安全企业基石&#xff0c;为你的终端安全保驾护航&#xff01; 读者对象&#xff1a;主要内容&#xff1a;本书目录&#xff1a;了解更多&#xff1a;赠书抽奖规则: 在当前网络威胁日益复杂化的背景下&#xff…

SGLang 大模型推理框架 qwen2部署使用案例;openai接口调用、requests调用

参考: https://github.com/sgl-project/sglang 纯python写,号称比vllm、tensorRT还快 暂时支持模型 安装 可以pip、源码、docker安装,这里用的pip 注意flashinfer安装最新版,不然会可能出错误ImportError: cannot import name ‘top_k_top_p_sampling_from_probs’ fr…