私のアプリはJava Play 2.0.4を使用しており、ビデオを返す Web サービス (同じホスト上の別のサーバーでホストされている) を呼び出すコントローラーを実装する必要があります。関係あるかわかりませんが、動画はm4v/mp4形式です。
これを行う正しい方法はどれですか? 使用AsyncResult
は正しいと思いますが、それを回避する方法がわかりません。
現在、私は Web サービスを呼び出して、次の方法で Promise を取得しています。
Promise<Response> promise = WS.url(videoUrl).get();
その後、応答をバイトとして取得し、手動でヘッダーを設定してビューに返します。
Response response = promise.value().get();
byte[] video = response.ahcResponse().getResponseBodyAsBytes();
response().setContentType(format.equals("m4v") ? "video/x-m4v" : "application/x-shockwave-flash");
response().setHeader("Accept-Ranges", "bytes");
response().setHeader("Content-Range", "bytes 0-" + String.valueOf(video.length-1) + "/" + String.valueOf(video.length));
return ok(video);
これは時々機能しますが、動作は非常に不安定です。一部の (短い) ビデオは正常に読み込まれます。リクエストがキャンセルされるため、大きな動画は失敗します。また、Web サービスを呼び出すアクションへの要求が数回行われていることにも注目しました。常に動画の全長 (またはリクエストがキャンセルされる前に読み込めたもの) を返します。
また、そのアクションのルートにマップされるsrc
html5タグの属性からアクションを呼び出していることを追加することもできます。video
また、html5 のほとんどの動画は 206 Partial Content レスポンス ステータス (たとえば、http://video-js.zencoder.com/oceans-clip.mp4 ) で提供され、動画をストリーミングするために必要だと思います。
どんな助けでも大歓迎です。私はこれで数日間立ち往生しています。
前もって感謝します!
ゴンザロ