s3とsnsで動画機能をつくる話
Post on 11-Jan-2017
4.189 Views
Preview:
TRANSCRIPT
S3 と SNS で動画機能をつくる話株式会社 Timers CTO椎名アマド
椎名アマド株式会社 Timers Co-founder & CTO 28 歳趣味:サバゲー、 PS4(FPS, Minecraft) 、映画創業: 2012/05
カップル専用アプリ Pairy
子育て夫婦アプリ Famm
https://aws.amazon.com/jp/solutions/case-studies/timers/
動画のはなし
今までのバイナリ(写真)の投稿方法
Client Server AWS S3DB
HTTP Req: Upload* [binary file]* [metadata]
save [metadata]
save [binary file]
HTTP Response
バイナリが Client -> App -> S3 と二度転送されるのはムダ(特に動画みたいな大きなバイナリの場合)
直接 Client から S3 にアップロードしよう
S3.putObject()
SNS Notification (HTTP)
S3 MetaData
STS.getFederationToken()
バイナリを S3 にアップロード
メタデータを渡したいから、putObject() 時にくっつける
putObject() が完了したらApp に HTTP 経由で通知
Client に直接認証情報を置かなくていいようにトークン発行
必要なもの
Client Server AWS S3DB
save [metadata]
S3 PutObject [binary file] (with metadata)
[token]HTTP Req: getToken
SNS notification[metadata]
Push Notification
$result = $s3->putObject(array( 'Bucket' => $bucket, 'Key' => $keyname, 'SourceFile' => $filepath, 'ContentType' => ‘video/mp4‘, 'ACL' => ‘private’, 'Metadata' => array( ‘video_date' => 1326190210, )));
Client :メタデータ付きで putObject
S3 : putObject() したら SNS 通知
$head = $this->client->headObject(array( 'Bucket' => $bucket, 'Key' => $object));$meta_data = $head['Metadata'];$video_date = $meta_data['video_date'];
/* insert into DB */$sql = “INSERT INTO video SET object_path=‘$object’, video_date=‘$video_date’”;$mysqli->query($sql);
SNS 通知された Request :メタデータを拾って、それを DB に保存
$policy = array( 'Statement' => array( 'Sid'=> ‘user1’, ’Effect'=>'Allow', 'Action'=> ‘s3:putObject’, ‘Resource’=> ‘arn:aws:s3:::bucket/user1/*’));$result = $sts->getFederationToken(array( 'Name'=> user1’, 'DurationSeconds' => 3600, 'Policy'=> json_encode($policy)));
Federation Token :対象ユーザーのディレクトリ以下のみにputObject 権限を付与
アップロード完了!
Client Server AWS S3DB
save [metadata]
S3 PutObject [binary file] (with metadata)
[token]HTTP Req: getToken
SNS notification[metadata]
Push Notification
動画投稿まわりで他に考えたところ
private object には、preSignedUrl を生成してアクセス
動画閲覧
動画本体と全く同じロジック※ どの動画のサムネイルかがわかるように、MetaData に動画固有 hash を追加
動画サムネイル
multipart-upload は SNS 通知が個別でバラバラに来るから注意※ サムネイルと同じく hash を追加することで同一の動画であることを判別
multipart-upload
Thank you
top related