使用FFmpeg+go搭建m3u8点播服务器

news2024/11/24 11:26:29

一. 前言

        HLS(HTTP Live Streaming) 是苹果公司提出的基于 HTTP 的流媒体传输协议,它的工作原理是将整个文件切分成一个个小的文件(通常是 TS 格式文件),客户端通过 HTTP 下载播放。在准备播放某个 m3u8 媒体源时会先下载一个包含元数据信息的 .m3u8 索引文件,根据 .m3u8 索引文件信息依次下载媒体流文件。

        本文将使用 FFmpeg+go 搭建一个 m3u8 点播服务器,其中 FFmpeg 用于对 mp4 等媒体文件进行切分,go 用于搭建一个 Web 资源服务器。

二. 切分媒体文件

ffmpeg -i lantingxv.mp4 -vbsf h264_mp4toannexb -vcodec libx264 -acodec aac -strict 2 -s 1280x720 -r 30 -g 150 -hls_time 5 -hls_list_size 0 -start_number 0 -f hls -y lantingxv.m3u8

        准备一个媒体文件,然后执行如上命令,命令执行完成后将在本地目录生成一个 .m3u8 文件(索引文件)和若干个 .ts 文件(媒体文件),每一个 .ts 文件都可以单独播放,每个 .ts 文件的时长大约 5s。

        m3u8 播放索引文件内容大致如下,#EXT 开头的是 m3u8 Tag,各个 Tag 含义见如下解释。  

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000000,
lantingxv0.ts
#EXTINF:5.000000,
lantingxv1.ts
#EXTINF:5.000000,
lantingxv2.ts
#EXTINF:5.000000,
lantingxv3.ts
#EXTINF:5.000000,
lantingxv4.ts
#EXTINF:5.000000,
lantingxv5.ts
#EXTINF:5.000000,
lantingxv6.ts
#EXTINF:5.000000,
lantingxv7.ts
#EXTINF:5.000000,
lantingxv8.ts
#EXTINF:5.000000,
lantingxv9.ts
#EXT-X-ENDLIST

#EXTM3U 必须在文件的第一行,标识这是一个 M3U Playlist 文件。

#EXT-X-VERSION 表示版本。

#EXT-X-TARGETDURATION 表示最大的媒体段文件的时长,如上表示最长的 TS 文件是 5s。

#EXT-X-MEDIA-SEQUENCE 表示第一个媒体段文件名的序号,如上是从 lantingxv0.ts 开始的,因此是 0。

#EXTINF 表示下面媒体段文件的时长,如上都是 5s。

#EXT-X-ENDLIST 表示 Playlist 结束,对于 m3u8 点播索引文件有这个 TAG,m3u8 直播索引文件没有这个 TAG,直播索引文件是不断动态更新的。

三. 使用go搭建一个静态资源服务器

        我们完成媒体文件切分成 .m3u8 索引文件和 .ts 文件片段后,还需要通过 HTTP 方式暴露出去,让客户端可以通过 HTTP 协议获取索引文件和媒体文件,我们使用 go 搭建一个静态资源服务器,代码如下。

package main

import "net/http"

func main() {
	http.Handle("/", http.FileServer(http.Dir("file")))
	http.ListenAndServe(":8080", nil)
}

先在代码的同级目录下创建 file 目录,然后将 .m3u8 文件和对应的 .ts 文件全部拷贝到该目录,之后运行代码即可。

四. 使用VLC播放指定m3u8源

         启动 VLC,点击打开网络,输入 m3u8 源后点击播放即可,播放效果如下。

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

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

相关文章

Linux系统运行时参数命令--Linux基础命令和工具

目录 1 Linux基础命令和工具 1.1 grep搜索字符 1.2 find查找文件 1.3 ls显示文件 1.4 wc命令 1.5 ulimit用户资源 1.6 scp远程拷贝 1.7 dos2unix和unix2dos 1.8 sed 行处理 简单模式 替换模式 1.9 awk 列处理 C/CLinux服务器开发/后台架构师【零声教育】-学习视频…

车载软件架构—CP和AP相同与不同

文章目录 前言一、两者不同之处二、两者架构设计原则总结前言 AUTOSAR(AUTmotive Open System ARchitecture) 是汽车电子E/E系统发展的一个重要的节点。该标准是由包括BMW、DAIMLER、GM、TOYOTA、福特等主机厂和包括博世、大陆等供应商牵头成立的一个标准发展组织定义的一个开…

45页智慧交通数字化解决方案2022

【版权声明】本资料来源网络,仅用于行业知识分享,供个人学习参考,请勿商用。【侵删致歉】如有侵权请联系小编,将在收到信息后第一时间进行删除! 完整资料领取见文末,部分资料内容: 项目建设目标…

RabbitMQ简单模式

🍁博客主页:👉不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉Linux专栏 🔥欢迎大佬指正,一起学习!一起加油! 目录&…

20 个常用的 pandas 使用技巧

大家好,我是小寒。 今天来分享 20 个常用的 pandas 使用技巧。如果觉得不错,点赞、转发安排起来。 1、以 Markdown 格式输出 DataFrame import pandas as pddf pd.DataFrame({a: [1, 2, 3, 4],b: [5, 6, 7, 8]})# You can control the printing of th…

ATAC-seq分析:教程简介(1)

简介 本课程[1]介绍 Bioconductor 中的 ATACseq 分析。 该课程由 2 个部分组成。这将引导您完成正常 ATACseq 分析工作流程的每个步骤。它涵盖比对、QC、peak calling、基因组富集测试、基序富集和差异可及性测试。 环境准备 IGV IGV 可以从 BROAD 网站安装。 》 https://www.b…

mysql实现行转列作为临时表、以及字符分割行转列

1.需求:实现两个日期段转换为具体的日期天数(2022-10-23至2022-10-26得到一张2022-10-23、2022-10-24、2022-10-25、2022-10-26的临时表) SELECTDATE_FORMAT( DATE_ADD( 2022-10-23 22:00:00, INTERVAL ( help_topic_id ) DAY ), %Y-%m-%d …

微服务洞察,让微服务更透明

作者: 屿山 微服务作为云原生时代下一种开发软件的架构和组织方法,通过将明确定义的功能分成更小的服务,并让每个服务独立迭代,增加了应用程序的灵活性,允许开发者根据需要更轻松地更改部分应用程序。同时每个微服务可…

想不起来的python知识点(应该后续还会再补充)

目录数据类型Number随机生成一个[0,1)范围的实数随机生成一个[1,20)范围内的整数补String(字符串)字符串连接使用join运算符List(列表)由于没有书,利用博客对于Python的学习内容进行简要的记录!(应该是菁(j…

基于声网 Flat 构建白板插件应用“成语解谜”的最佳实践

前言 本文作者赵杭天。他参加了“2022 RTE 编程挑战赛”——“赛道二 场景化白板插件应用开发” , 并凭借作品“成语解谜”获得了该赛道大奖。“成语解谜”是一个基于互动白板 SDK 的互动小游戏应用。通过前端编码、调用白板 API 能力、定制化后端逻辑等&#xff0…

刷题记录:牛客NC17509挖沟[prim+kruskal算法详解]

传送门:牛客 题目描述: 胡队长带领HA实验的战士们玩真人CS,真人CS的地图由一些据点组成,现在胡队长已经占领了n个据点,为了方 便,将他们编号为1-n,为了隐蔽,胡队长命令战士们在每个据点出挖一个坑&#x…

Cocos Creator 3.61所有工具软件的使用

文章目录Tiled-地图绘制软件下载安装基本使用点点就会了导入cocos编辑动画注意cocos导入TiledBigShear-图片裁剪为plist形式下载安装使用TexturePacker-使用plist文件产生精灵图集下载安装Tiled-地图绘制软件 下载安装 官网免费 Tiled官方 安装无要求 基本使用 点点就会了 导…

UE5 Meerkat狐獴演示Demo分析

1.特效的生成方式 1.1临时特效的生成:使用了已生成轨道临时创建该特效(不用在场景中放入该特效,而是临时创建即可)、系统生命周期轨道设置该特效的播放时长 1.2长期特效的生成:特效时长为该镜头片段长度 2.特效的类…

软考高级哪个好考?

软考高级有5个科目。 开发方向的有系统分析师,系统架构师; 网络方向的有网络规划与设计师; 信息系统方向的有信息系统项目管理师; 信息化服务方向的有系统规划与管理师。 考试题型 上午是9:00 — 11:30考综合知识,…

ROBOGUIDE软件:FANUC机器人多层堆焊功能介绍与示教编程操作方法

目录 机器人多层堆焊功能介绍 机器人跟踪路径数据指令介绍 机器人多层堆焊指令介绍 机器人弧焊焊接工作站创建 机器人多层堆焊示教编程 仿真运行 机器人多层堆焊功能介绍 在厚板焊接中进行多层堆焊焊接,以便多次焊接相同的部位而增大焊接宽度。通常情况下&am…

Java池化技术

在我们平常的编码中,通常会将一些对象保存起来,这主要考虑的是对象的创建成本。比如像线程资源、数据库连接资源或者 TCP 连接等,这类对象的初始化通常要花费比较长的时间,如果频繁地申请和销毁,就会耗费大量的系统资源…

Java-String 类·上

Java-String 类上1. 创建字符串2. 字符串比较相等3. 字符串常量池4. 理解字符串不可变大家好,我是晓星航。今天为大家带来的是Java String字符串相关知识点的讲解!😀 1. 创建字符串 常见的构造 String 的方式 // 方式一 String str "…

轻量化网络ShuffleNet 旷视

CVPR2018 人脸识别 脸部特效 张翔宇 什么是分组卷积 我们可以回忆一下 普通卷积 feature map有几个 我们的对应的卷积核就需要几个channel 然后我们学习这个 分组卷积 如图所示,前两个channel 有一个2个channel的卷积核负责,两个与两个对应 来自这…

学习.NET MAUI Blazor(四)、路由

Web应用程序的可以通过URL将多个页面串联起来,并且可以互相跳转。Web应用主要是使用a标签或者是服务端redirect来跳转。而现在流行的单页应用程序 (SPA) ,则通过路由(Router)来实现跳转,如Vue 、React等。 提示 MAUI的…

C#一个网络小程序的逐步实现过程

经常要检测某些IP地址范围段的计算机是否在线。 有很多的方法,比如进入到网关的交换机上去查询、使用现成的工具或者编写一个简单的DOS脚本等等,这些都比较容易实现。 现在使用C#来完成。 1、简单上手 公用函数: public static long IPToLong…