如何在Golang中通过MPEG-DASH实现视频流并使用Shaka Player播放?
实现Go服务器+MPEG-DASH+Shaka Player视频流播放
1. 准备MPEG-DASH格式的视频资源
首先需要将原始视频转码为MPEG-DASH格式,生成对应的manifest文件(.mpd)和视频分片。使用ffmpeg完成转码:
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -b:a 128k -f dash static/video/manifest.mpd
执行后会在static/video/目录下生成manifest.mpd和一系列.m4s分片文件,确保这些文件完整存在。
2. 配置Go HTTP服务器
Go默认不会识别.mpd文件的MIME类型,需要手动注册,同时设置静态资源路由和页面路由。示例代码如下:
package main import ( "mime" "net/http" ) func main() { // 注册DASH manifest的MIME类型,否则浏览器无法正确解析 mime.AddExtensionType(".mpd", "application/dash+xml") // 映射静态资源目录:所有/static开头的请求都指向本地./static文件夹 http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("./static")))) // 处理/watch.html页面请求 http.HandleFunc("/watch.html", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "./watch.html") }) // 启动服务器,监听8080端口 if err := http.ListenAndServe(":8080", nil); err != nil { panic(err) } }
3. 编写前端播放页面(watch.html)
在页面中集成Shaka Player,通过它加载DASH manifest并播放视频。首先下载Shaka Player的编译脚本(shaka-player.compiled.js),放到static/目录下,然后编写页面:
<!DOCTYPE html> <html> <head> <title>DASH视频播放</title> <style> #videoPlayer { width: 800px; height: 450px; display: block; margin: 2rem auto; } </style> </head> <body> <video id="videoPlayer" controls></video> <script src="/static/shaka-player.compiled.js"></script> <script> document.addEventListener('DOMContentLoaded', async () => { const videoElement = document.getElementById('videoPlayer'); const player = new shaka.Player(videoElement); // 监听错误事件 player.addEventListener('error', (e) => { console.error('播放出错:', e.detail); }); try { // 加载DASH manifest文件 await player.load('/static/video/manifest.mpd'); console.log('视频加载完成'); } catch (err) { console.error('加载失败:', err); } }); </script> </body> </html>
4. 目录结构参考
确保你的文件目录如下:
├── main.go ├── watch.html └── static/ ├── shaka-player.compiled.js └── video/ ├── manifest.mpd ├── chunk-stream-0-00001.m4s ├── init-stream-0.m4s └── ...(其他分片文件)
5. 测试运行
- 执行
go run main.go启动服务器 - 打开浏览器访问
http://localhost:8080/watch.html,即可看到视频通过DASH流播放
注意事项
- 确保
ffmpeg已正确安装并能正常执行转码命令 - 如果部署到线上,需要注意跨域配置(若视频资源和页面不在同一域名)
- Shaka Player支持Chrome、Firefox、Edge等现代浏览器,不兼容IE
内容的提问来源于stack exchange,提问作者Navspace
相关产品推荐
相关产品推荐

