You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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. 测试运行

  1. 执行go run main.go启动服务器
  2. 打开浏览器访问http://localhost:8080/watch.html,即可看到视频通过DASH流播放

注意事项

  • 确保ffmpeg已正确安装并能正常执行转码命令
  • 如果部署到线上,需要注意跨域配置(若视频资源和页面不在同一域名)
  • Shaka Player支持Chrome、Firefox、Edge等现代浏览器,不兼容IE

内容的提问来源于stack exchange,提问作者Navspace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:25:39