現在最大のバグ(Lambdaで変換した動画が見られない)

今一番困っているバグについてです。
動画がどっかに消える!というものです。

ClubCloudの動画のフォーマット

ClubCloudでは練習日記として動画を多く扱い、かつチームでその動画を共有するので、動画フォーマットを一番汎用性があるmp4に変換しています。

アップロードの可能性が高いものとしては、iOSのmov、アンドロイドの拡張子なし動画とmp4、デジカメのMTSがあります。
アンドロイドでトリミングするとHTML5では再生できないmp4になったり結構混沌としています。
(HTML5で再生できる方法ありましたら是非ご教授ください…!)

動画変換!

ブラウザの差異に悩まされるのは嫌なので、アップロードの際にS3へのinputをトリガーにLambdaからElastic Transcoderを呼び出して、拡張子がある動画は全てmp4に変換しています(Generic 480p 4:3 で piplineは1351620000001-000030)。

input-S3にアップ ⇒ 動画変換 ⇒ output-S3 ⇒ Cloudfrontで配信 って感じですね

この手順を知ったときにS3を二個も使って贅沢ない!と思い、一つのS3でinputとoutputを兼ねる方法を調べてみました。
結果、動画変換後の動画がまたS3のinputに入る訳なのでまたトリガーを引いてしまって、無限ループに陥るらしいです。
破産するとこだった。

同時に画質を落としてファイルサイズを落とすこともしています(MTSは70M ⇒ 6Mになって驚きました)。

問題1 変換後動画の反映に時間がかかる

動画の変換はすぐ終わるのですが、CDNのCloudfrontからアクセスできるようになるのが、長くて数分かかります。
S3にアップロードするのに時間がかかるのでしょうか。
ただ、クライアントから最初にS3にアップロードする時間と比べてもかなり長いので、不思議です。

問題2 再投稿だと動画がどこかへ消える

投稿済みの練習日記の動画の差し替え、投稿済みのコメントの動画の差し替えで、動画を input-S3にアップ ⇒ 動画変換 ⇒ output-S3にアップとなる訳ですが、output-S3に入れましたよという通知が来るにもかかわらず、output-S3には入っていないという事態が元の動画がmp4以外だと起こります。
謎過ぎ。
実際にはoutput-S3では動画がgzファイルになっているので、output-S3に入っていないことはCloudfrontのkeyerrorでしか分かりません。
多分パスが変更されているんだと思いますが。
それが謎です。
なぜmp4は大丈夫なのか、再投稿だと消えるのか。

ちなみに、同じ手順を踏むスレッド機能での動画アップロードは動画差し替えでなくても消えます。
もう一つの同じ手順のトークルーム機能での差し替えは問題ないです。

S3のキー被りによる、ユニークなファイルパスへの変更のせいかなと思いましたが、真新しいファイルの投稿でもダメなので、違う気がします。

以前お世話になっている方から、同じ手順でもファイルアップに失敗する機能と成功する機能があるなら、コードをどんどん削っていって、どこで差が出るか調べれば?と教えていただきましたが、相当手間がかかりそう、というのと、推している練習日記機能ではファイルの再編集を認めないことでとりあえずの手が打てるということで見送りに(余裕が出来てきたら試します、ありがとうございます)。

本当になんなんだ。

今日もお読みくださりありがとうございます。
ほぼ毎日、アプリ開発や事業に関する日記を書いておりますので是非またお読みになってください!


この記事が気に入ったらサポートをしてみませんか?