如何正确向 Shaka 播放器提供 MPEG-DASH 清单?

Posted

技术标签:

【中文标题】如何正确向 Shaka 播放器提供 MPEG-DASH 清单?【英文标题】:How to serve an MPEG-DASH manifest to Shaka player properly? 【发布时间】:2019-08-17 18:31:40 【问题描述】:

我尝试在我的 Go 项目中实现 Shaka Player。这是项目结构:

.
├── client
│   ├── index.html
│   ├── shaka.js
│   └── shaka-player.compiled.js
└── server
    ├── assets
    │   ├── test_dashinit.mp4
    │   └── test_dash.mpd
    ├── Gopkg.lock
    ├── Gopkg.toml
    ├── main.go
    └── vendor

index.html:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Video</title>

    <script src="shaka-player.compiled.js" defer></script>
    <script src="shaka.js" defer></script>
</head>

<body>
    <video id="video-clip" controls></video>
</body>

</html>

我的main.go 文件,我在其中指定index.htmltest_dash.mpd 的路由:

func sendManifest(w http.ResponseWriter, r *http.Request) 
    // Open the file.
    manifest, err := os.Open("server/assets/test_dash.mpd")

    if err != nil 
        http.Error(w, err.Error(), http.StatusInternalServerError)

        return
    

    defer manifest.Close()

    // Get file size.
    stat, err := manifest.Stat()

    if err != nil 
        http.Error(w, err.Error(), http.StatusInternalServerError)

        return
    

    size := strconv.FormatInt(stat.Size(), 10)

    // Set the headers.
    w.Header().Set("Content-Disposition", "attachment; filename=manifest.mpd")
    w.Header().Set("Content-Type", "application/dash+xml")
    w.Header().Set("Content-Length", size)
    // Send the file.
    io.Copy(w, manifest)


func main() 
    cwd, _ := os.Getwd()
    fmt.Println(cwd)

    fs := http.FileServer(http.Dir("client"))

    http.Handle("/", fs)
    http.HandleFunc("/manifest", sendManifest)

    http.ListenAndServe(":5000", nil)

当我尝试使用player.load() 访问清单时,它只返回404 Not found。但是当我尝试通过相同的链接(127.0.0.1:5000/manifest)在浏览器中访问它时,没关系,我可以下载文件。指南中的链接效果很好。我应该如何从我的 Go 服务器提供视频清单,以便 Shaka 播放器可以正确使用它?

【问题讨论】:

【参考方案1】:

好的,指定方案就足够了: http://127.0.0.1:5000/manifest 而不仅仅是 127.0.0.1:5000/manifest.

【讨论】:

就我而言,我遇到了 CORS 问题。

以上是关于如何正确向 Shaka 播放器提供 MPEG-DASH 清单?的主要内容,如果未能解决你的问题,请参考以下文章

现在如何知道在 SHAKA PLAYER 中传递 ContentProtectionCallback?

保存到离线而不使用 shaka 播放器创建播放器对象

shaka 播放器从不触发“错误”监听器

shaka configure 选择你想玩的表示和适应集

Shaka 播放器无法在谷歌浏览器上加载 HLS

在 Shaka Player 中更改字幕的文本大小