ホームページ  >  記事  >  バックエンド開発  >  GoLang ウェブサーバーが Chrome で MP4 ビデオを再生できないのはなぜですか?

GoLang ウェブサーバーが Chrome で MP4 ビデオを再生できないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-02 11:27:02328ブラウズ

Why can't my GoLang webserver play MP4 videos in Chrome?

GoLang HTTP Web サーバーを使用したビデオ (MP4) の提供

問題

GoLang を使用して開発された Web サーバーは、静的コンテンツ (HTML、JavaScript、CSS、および画像) に成功しました。ただし、MP4 ビデオを表示しようとすると、ブラウザはそれを読み込むことができません。

診断

この問題は、ビデオ ファイルのサイズによって発生します。 Chrome はコンテンツをバッファしますが、大きなビデオの場合は部分的にのみバッファします。動画が特定のしきい値を超えると、Chrome はサーバーが部分的なコンテンツの提供 (Range リクエスト) をサポートすることを期待します。

提供されたコードでは、カスタム ファイル サービングの実装が Range リクエストを処理しないため、Chrome は再生を拒否します。

解決策

この問題を解決するには、http.ServeFile() を使用してビデオ ファイルを提供します。 http.ServeFile() は、Range リクエストを自動的に処理し、Chrome でビデオを再生するために必要な Content-Type および Accept-Ranges: bytes ヘッダーを含む適切な応答ヘッダーを設定します。

http.ServeFile() の使用

提供されたコードを次のように変更します。

<code class="go">func (vh *viewHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    path := r.URL.Path[1:]
    log.Println(path)
    if contentType == "video/mp4" {
        http.ServeFile(w, r, path)
    } else {
        data, err := ioutil.ReadFile(string(path))
        if err == nil {
            w.Header().Add("Content-Type", contentType)
            w.Write(data)
        } else {
            log.Println("ERROR!")
            w.WriteHeader(404)
            w.Write([]byte("404 - " + http.StatusText(404)))
        }
    }
}</code>

この実装により、MP4 ビデオが正しく提供され、 Chrome で再生されます。

以上がGoLang ウェブサーバーが Chrome で MP4 ビデオを再生できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。