当前位置:   article > 正文

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

m3u8服务器搭建

一. 前言

        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 含义见如下解释。  

  1. #EXTM3U
  2. #EXT-X-VERSION:3
  3. #EXT-X-TARGETDURATION:5
  4. #EXT-X-MEDIA-SEQUENCE:0
  5. #EXTINF:5.000000,
  6. lantingxv0.ts
  7. #EXTINF:5.000000,
  8. lantingxv1.ts
  9. #EXTINF:5.000000,
  10. lantingxv2.ts
  11. #EXTINF:5.000000,
  12. lantingxv3.ts
  13. #EXTINF:5.000000,
  14. lantingxv4.ts
  15. #EXTINF:5.000000,
  16. lantingxv5.ts
  17. #EXTINF:5.000000,
  18. lantingxv6.ts
  19. #EXTINF:5.000000,
  20. lantingxv7.ts
  21. #EXTINF:5.000000,
  22. lantingxv8.ts
  23. #EXTINF:5.000000,
  24. lantingxv9.ts
  25. #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 搭建一个静态资源服务器,代码如下。

  1. package main
  2. import "net/http"
  3. func main() {
  4. http.Handle("/", http.FileServer(http.Dir("file")))
  5. http.ListenAndServe(":8080", nil)
  6. }

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

四. 使用VLC播放指定m3u8源

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

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/950092
推荐阅读
相关标签
  

闽ICP备14008679号