HLS + FFmpeg + Golang 快速搭建视频流服务

当下,音视频服务很热,广发应用到直播电商,在线教育,游戏,社区聊天,电视直播,电视盒子物联网等应用场景。音视频服务是比较成熟技术,市场上有很多产品可以快速搭建流媒体:

Flash流媒体服务器 Red5 (Java)

FMS流媒体服务器 (Adobe,收费的)

流媒体服务器 Open Streaming Server (Java)

Wowza流媒体服务器(Java)

开源流媒体平台FreeCast(Java)

Ngix+RTMP插件

流媒体解决方案 Live555 (C++)

SRS+OBS (C++,国产精品)

HLS + FFmpeg + Golang(Golang)

下面以以HLS + FFmpeg + Golang 快速搭建视频流服务。

1、什么是 HLS? 

HTTP Live Streaming 是 Apple 开发的基于 HTTP 的自适应比特率流通信协议。

HLS 是一种流媒体协议,它允许大型媒体文件作为许多较小的文本文件提供服务,这些文件被分解成大约 10 秒的增量。通过分解它们,用户的客户端应用程序只需要提前缓冲约 10 秒。这为用户节省了大量潜在的带宽,并允许歌曲或视频几乎立即开始播放。

2、 FFmpeg 流媒体编码器

 

我们可以轻松地将 mp3 文件转换为由多个文件组成的 HLS 格式。其中一个文件包含元数据 (.m3u8) 并首先提供。这个元数据文件告诉客户端从哪里获取每个数据文件,以及每个数据文件包含什么。数据文件具有 .ts 扩展名,通常包含约 10 秒的音频,并应客户请求一次提供一个。

3、实现过程

1)下载示例 BachGavotteShort.mp3

http://www.hubharp.com/web_sound/BachGavotteShort.mp3

2)安装FFmpeg。如果您使用的是 Mac:

brew install ffmpeg

3)格式化一些媒体 文件

ffmpeg -i BachGavotteShort.mp3 -c:a libmp3lame -b:a 128k -map 0:0 -f segment -segment_time 10 -segment_list outputlist.m3u8 -segment_format mpegts output%03d.ts

这应该会产生三个新文件:

output000.ts output001.ts outputlist.m3u8

恭喜!您已经完成了音视频编码部分,您现在有了可以通过 HTTP 提供的简单文件。任何现代客户端媒体库都知道如何读取 HLS 文件。

4)Golang开发Web服务

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    // configure the songs directory name and port
    const songsDir = "songs"
    const port = 8080

    // add a handler for the song files
    http.Handle("/", addHeaders(http.FileServer(http.Dir(songsDir))))
    fmt.Printf("Starting server on %v\n", port)
    log.Printf("Serving %s on HTTP port: %v\n", songsDir, port)

    // serve and log errors
    log.Fatal(http.ListenAndServe(fmt.Sprintf(":%v", port), nil))
}

// addHeaders will act as middleware to give us CORS support
func addHeaders(h http.Handler) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Access-Control-Allow-Origin", "*")
        h.ServeHTTP(w, r)
    }
}

现在运行服务器:

go run main.go

您的服务器已上线!使用 HLS 媒体客户端测试您的代码并收听音乐流。你可以在这里找到一个免费的在线客户端:https ://hls-js-latest.netlify.com/demo/

只需粘贴您歌曲的 URI 并收听:

http://localhost:8080/bachgavotteshort/outputlist.m3u8

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以通过以下步骤来实现Java与RTSP、FFmpeg、HTML和Nginx的结合来实现视频实时播放的监控系统: 1. 首先,你需要使用Java来创建一个监控系统的后端服务。你可以使用Java的网络编程库来监听RTSP流并将其解码。可以使用开源的库,例如JRTSP或者Xuggler来处理RTSP流,并将其转换为可供播放的视频流。 2. 接下来,你需要使用FFmpeg来处理视频流FFmpeg是一个强大的多媒体处理工具,可以用于转码、解码、编码等操作。你可以使用FFmpeg来解码RTSP流,并将其转换为HTML5支持的视频格式,例如HLS(HTTP Live Streaming)或者MPEG-DASH(Dynamic Adaptive Streaming over HTTP)。 3. 在前端方面,你可以使用HTML和JavaScript来创建一个简单的视频播放器。你可以使用HTML5的<video>标签来嵌入视频,并使用JavaScript来控制视频的播放、暂停等操作。你可以使用一些开源的视频播放器库,例如video.js或者plyr来简化开发过程。 4. 最后,你可以使用Nginx作为反向代理服务器来提供视频流的分发和缓存功能。Nginx可以将视频流从后端服务器转发给前端浏览器,并且可以缓存视频文件以提高性能和可靠性。你可以配置Nginx来支持HLS或者MPEG-DASH协议,并且可以使用Nginx的HTTP模块来进行性能优化和安全加固。 综上所述,通过将Java、RTSP、FFmpeg、HTML和Nginx结合起来,你可以实现一个监控视频的实时播放系统。这个系统可以从RTSP流中提取视频数据,经过FFmpeg处理后,通过HTML和JavaScript在浏览器中进行播放,并且可以使用Nginx提供性能优化和缓存支持。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值