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

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

Susan Sarandon
リリース: 2024-11-02 11:27:02
オリジナル
432 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート