GoLang を使用して開発された Web サーバーは、静的コンテンツ (HTML、JavaScript、CSS、および画像) に成功しました。ただし、MP4 ビデオを表示しようとすると、ブラウザはそれを読み込むことができません。
この問題は、ビデオ ファイルのサイズによって発生します。 Chrome はコンテンツをバッファしますが、大きなビデオの場合は部分的にのみバッファします。動画が特定のしきい値を超えると、Chrome はサーバーが部分的なコンテンツの提供 (Range リクエスト) をサポートすることを期待します。
提供されたコードでは、カスタム ファイル サービングの実装が Range リクエストを処理しないため、Chrome は再生を拒否します。
この問題を解決するには、http.ServeFile() を使用してビデオ ファイルを提供します。 http.ServeFile() は、Range リクエストを自動的に処理し、Chrome でビデオを再生するために必要な Content-Type および Accept-Ranges: bytes ヘッダーを含む適切な応答ヘッダーを設定します。
提供されたコードを次のように変更します。
<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 サイトの他の関連記事を参照してください。