当前位置: 首页 > news >正文

【音视频】HLS简介与服务器搭建

一、HLS介绍

1.1 HLS是什么?

HTTP 实时流(HLS)是使用最广泛的视频流协议之一。尽管它称为 HTTP“实时”流,但它同时适用于点播流和实时流。HLS 将视频文件分解为较小的可下载 HTTP 文件,并使用 HTTP 协议来交付。客户端设备加载这些 HTTP 文件,然后将它们作为视频进行播放。

HLS 的一个优点是,所有连入互联网的设备都支持 HTTP,因而它比需要使用专用服务器的流协议更易于实施。另一个优点是 HLS 流可以根据网络状况提高或降低视频质量,而不会中断播放。这就是在用户观看视频的过程中视频质量可能会变好或变差的原因。这个功能称为“自适应比特率视频传输”或“自适应比特率流式传输”,如果没有它,慢速网络条件可能导致视频播放完全停止。

HLS 由 Apple 为 Apple 产品开发,但现在已广泛用于许多设备。

1.2 HLS 如何工作?

服务器:HLS 流源自于服务器,其中存储了媒体文件(在点播流式传输中)或创建了流(在实时流式传输中)。因为 HLS 基于HTTP,所以任何普通的 Web 服务器都可以发起流。

服务器上发生两个主要过程:

  • 编码:重新格式化视频数据,以便任何设备都能识别和解析数据。HLS 必须使用 H.264 或 H.265 编码。
  • 分段:视频分成长度为几秒钟的片段。片段长度可变,但默认长度为 6 秒(2016 年为止是 10 秒)。
    • 除了将视频分割为片段外,HLS 还创建视频片段的索引文件,以记录它们所属的次序。
    • HLS 还会创建几组不同质量等级的重复片段:480p、720p 和 1080p 等。

分发:当客户端设备请求流时,已编码的视频段通过互联网推送到客户端设备。通常,内容交付网络 (CDN) 可以协助将流分发到地理上不同的区域。CDN 还可以缓存流,从而更快地将流提供给客户端。

客户端设备:客户端设备是接收流并播放视频的设备,例如用户的智能手机或笔记本电脑。客户端设备使用索引文件作为参考,以正确的顺序组装视频,并根据需要从更高质量影像切换到低质量影像(反之亦然)。

在这里插入图片描述

二、安装和测试srs流媒体服务器

1.1 安装srs流媒体服务器

  • srs官⽹:https://github.com/ossrs/srs
  • 码云的源速度快:https://gitee.com/winlinvip/srs.oschina.git
  • github的源速度慢:https://github.com/ossrs/srs.git

第⼀步,获取SRS

git clone https://gitee.com/winlinvip/srs.oschina.git
cd srs.oschina
#使⽤当前最新的3.0版本
git checkout -b 3.0 remotes/origin/3.0release
cd trunk

第⼆步,编译SRS。

./configure
make -j$(nproc)

第三步,编写SRS配置⽂件,可以添加上hls对应的配置信息,比如最大缓存时长、分片时长等等

gedit conf/srs.conf
hls {enabled on;hls_path ./objs/nginx/html;hls_fragment 5; # 分⽚时⻓5秒hls_window 25; # 最⼤缓存的时⻓25秒
}

在这里插入图片描述

第四步,启动srs服务器

./objs/srs -c conf/srs.conf

第五步,监听srs服务器日志

tail -n 30 -f objs/srs.log

在这里插入图片描述

三、测试推流和拉流

使用ffmpeg推流RTMP流

 ffmpeg -re -i 1.mp4 -vcodec h264 -acodec aac -f flv rtmp://10.22.79.251/live/livestream

使用ffplay拉流RTMP流

ffplay -i rtmp://10.22.79.251/live/livestream

使用ffplay拉流HLS流,这里是服务器内存转换的

ffplay -i http://10.22.79.251:8080/live/livestream.m3u8

在这里插入图片描述

对比RTMP拉流和HLS拉流的区别,可以发现,HLS的延迟相比RTMP差距有点大

在这里插入图片描述

更多资料:https://github.com/0voice

http://www.dtcms.com/a/269018.html

相关文章:

  • 【LLIE专题】通过预训练模型先验提升暗光增强模型复原效果
  • 安卓10.0系统修改定制化____如何修改固件 去除开机向导 实现开机直接进入桌面
  • C++笔记之开关控制的仿真与实际数据处理优雅设计
  • 基于物联网的城市低洼地段水深报警系统设计
  • 【人工智能学习路线(一)】以SCI为目标学习笔记——Python 编程基础入门
  • 面试总结46-50天
  • Python爬虫图片验证码和滑块验证码识别总结
  • 前端技术博客汇总文档
  • 思考5-10分钟,输出高质量的学术科研报告,谷歌的deepsearch模型太惊艳了!
  • 【最新版】Spring Boot 项目打包部署到服务器
  • 【配置+图解Android各种版本配置】
  • V8 主要版本与对应 ECMAScript 支持
  • 2025 API 开发管理工具 Apipost 与 Apifox 全维度对比
  • CentOS-7-x86_64解决:使用NAT模式无法ping通www.baidu.com或无法ping 8.8.8.8问题。
  • 防火墙防御DDoS攻击能力分析
  • AI 智能体记忆系统关键技术
  • vite打包的简单配置
  • 构建一个vue2的项目并安装echarts
  • 【机器学习笔记 Ⅲ】1 无监督学习
  • 讯飞结合kimi辅助文章博客写作
  • 如何解决微信小程序出现两个下拉刷新样式?
  • 【论文阅读】Dynamic Few-Shot Visual Learning without Forgetting
  • 科目一小述(二之前)
  • Git安装避坑指南
  • 深入理解 React 单向数据流:构建高效、可维护的组件架构
  • 石子入水波纹效果:UV扰动着色器实现
  • Vue 配置打包后可编辑的变量
  • UI前端大数据处理性能提升:分布式架构下的数据处理优化
  • 数字人源码部署流程分享--- PC+小程序融合方案
  • 【MyBatis】XML实现,配置方法和增、删、改、查