経緯
Laravelで動画のストリーミング再生を実装する【Safariでも再生可能】
前回、こちらの記事でLaravelを使った動画のストリーミング再生のやり方を書きました。
デプロイ後も、リモート環境(S3とEC2の環境)で問題なく動作していましたが、
ある日、開発中のブランチをデプロイしたところ、
fseek(): stream does not support seeking
突然このエラーが出て、動画を読み込めなくなりました。
原因
結論から言うと、リモート(S3)のファイルに対してfseekしていたことが原因のようですが…
だがちょっとまってほしい、今までS3上のファイルにfseekして問題なく動作していたのはなんだったんだ?
そう思って現状動作している本番環境と見比べてみるも、該当部分のソースは同じ…。
結局原因は分からずでしたが、ある解決方法にたどり着きました。
解決
とりあえずS3からfseekできないなら一時ファイルにしてからfseekしようと思い、
冒頭で挙げた
Laravelで動画のストリーミング再生を実装する【Safariでも再生可能】
こちらの記事の App\Helpers\VideoStreamer
のコンストラクタ内のコードを以下のように修正すると動作することが確認できました!
public function __construct($disk, $path) { // $this->stream = $disk->readStream($path); <-廃止 // 追加 ここから $this->stream = tmpfile(); fwrite($this->stream, $disk->get($path)); // ここまで $this->mime = $disk->mimeType($path); $this->filemtime = $disk->lastModified($path); $this->size = $disk->size($path); }