0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

メモリ制限で動画が表示されないエラーを解消

Posted at
return response($recordingFile)->header('Content-type', 'video/mp4; charset=binary');
return new StreamedResponse(function () use ($s3FilePath) {
    $stream = Storage::disk('s3')->readStream($s3FilePath);
    fpassthru($stream);
    fclose($stream);
}, 200, [
    'Content-Type' => 'video/mp4',
    'Content-Disposition' => 'inline; filename="' . basename($s3FilePath) . '"',
]);

このように変更しました

StreamedResponseとは

LaravelやSymfonyのフレームワークで使用されるHTTPレスポンスの一種。
大量のデータやリアルタイムなデータを効率よくクライアントに送信する目的で使用されます。

2つのコードの違い

通常のレスポンスでは、すべてのデータが一度に生成され、メモリに保持されてからクライアントに送信されますが、StreamedResponse はデータをチャンク(小さな部分)に分割してストリームとして送信します。
これにより、大量のデータを一度に処理せず、少しずつ送信できるため、メモリ効率が良くなるようです。
StreamedResponseを使わない理由がないように見えますが、何かデメリットはあるんでしょうかね。

特徴 response() StreamedResponse
ファイルの取得方法 メモリに全体を読み込む ストリームで少しずつ読み込む
メモリ使用量 高い(ファイルサイズに依存) 低い(ストリーミング処理)
大容量ファイル対応 不向き 適している
パフォーマンス ファイルが大きいと遅くなる可能性 メモリ効率が良く、パフォーマンスが安定する
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?