xxxxxxxx動画共有サイト
  Project名


   を1日で構築しよう

        本名と所属
この資料は
BLOGと併せて読んでね
                            @tamtam180
http://mt.orz.at/archives/2012/06/3.html
アジェンダ
•   はじめに
•   システム概要   適当な感じで
•   デモ       発表していくよ
•   システム構成
•   TIPS
•   問題点
•   次にやること
モチベーション
• FRAPSで撮った動画を共有したい
• モーションチェックやUI確認など
• 将来的にはQAの検証報告のエビデンスと
  して
問題点
• ファイルサーバ
 – 各個人が好き勝手にプロジェクトサーバに置
   くと速攻で枯渇する。
 – ファイラーがNetAppだと超高い!!
• FRAPS
 – FRAPSで画撮した動画は再生にFRAPSコー
   デックが必要
   • 体験版入れておけばコーデックも入るので見れる
     けど。
高いってどれくらいよ?

        ぶっちゃけ
       おいくら万円?
参考: ファイルサーバのお値段
• ローエンドのファイラー(FAS2020)
  – XXX万円
    ¥¥¥¥

• HDDのお値段
   – XXXX円~XXXX円/1GB (ライセンス料込)
      ¥¥¥¥  ¥¥¥¥

   – RAIDをリアルタイムで2重化
   – 50GB追加 → 100GB + パリティ + スペア
お金の話なの XX万円
   –→
で当然カット
Xxさんからのお告げ
    上司


                         金を出せばい
• 何か良い方法ないかなぁ?           くらでも解決
                          はできる
 – WIN鯖ならD&Dだけで配信できる
  • WindowsServerOSは高い
 – ■■■■の■■■■■■を使う
    ある部署 ほげシステム

  • WMVだし、重いし。。
• 「1日あれば出来ますよ」と口を滑らす
 – 本当に1日で作れるか試してみた
 – プロトタイプは1日で完成
 – 色々こだわって作ったら3日はかかった
プロトタイプ           RED5とかも
                        検討したよ


• 動画ファイルをSambaにコピー
 – エンコードプロセスがSambaを監視
• 動画上にコメントが流れる
• 動画上のタイムラインにお絵かきが出来
  る
• プレイヤーはFLEX Builder3でさくっと作
  成
これはプロトタイプ
コードも残ってってな
     い
プロトタイプ問題点
• Sambaの監視
 – コピー中のファイルを拾ってしまう
 – アップロードの完了タイミングを拾えない
• FLEX BUILDER3
 – 個人ライセンスなので誰も保守できない
というわけで作り直し
システム概要図
                       AJP
          Apache                 Tomcat

                                                         Queue


                              LDAP              ZFS   MySQL
Browser
  Flash Player
                                            Samba

                             EncodeServer
                   動画解析        Process
                 サムネイル生成
                   エンコード
動作概要
• WEBからアップロードする
 – 共有DISKに出力
 – メタデータをDBへ
• エンコードサーバ
 – 動画情報を解析する
 – サムネイル画像を生成する
  • 共有DISKへ出力
 – エンコードを行う
  • 共有DISKへ出力
エンコードサーバ
    フィードバック


                                Analyze/Thumbnail   Encode
               Main Thread
                                     Thread         Thread

MySQL

        Item      Item   Item     WAIT_THUMBNAIL


        Item      Item   Item     WAIT_ENCODE


        Item      Item   Item     SUCCESS
デモ   見せられないの
     で代わりにスク
     リーンショットを
      貼り付けます
BLOGに
張っておきます
システム構成(フロント)
• Solaris10, CPU???, Mem2GB
• Apache-2.2, Tomcat-6.0.18, JDK6u13
• MySQL-5.1.33                 余ってる在庫
  – InnoDB, MyISAM              機材

• Samba, LDAP-Auth
• ZFS(500GB ミラーリング)
  – Sofmapで8000円程度*2
システム構成(エンコード鯖)
• WindowsXP(SP2)
 – CPU:Pen4 3.2G, Mem2GB
 – JDK6u13                 余ってる在庫
 – FFMPEG(C2D最適化ビルド)         機材

   • ※Pen4用にリビルドするの面倒だった!!
 – FRAPSエンコーダー
システム構成 備考
• WindowsとSolarisで分けた理由
 – WindowsXPはTCP同時接続10本まで(EULA)
   • WindowsでWEBサーバは無理
   • ファイルサーバも当然無理
 – FRAPSコーデックはWindowsオンリー
• SolarisだとZFSが使える
 – ミラーリングできる
システム構成(ネットワーク)
                    DSに置くと転送量

• 172. ■系に配置           やばい。
                     みんなの作業用
 – xx系は■■■■のサーバールーム
                    PCと同じセグメント
                        に
 – xx系は個人PC
 – xx系とxx系の間で極端な負荷がかかると自動
   で遮断する機能が入っている
 – 同一ネットワーク内に置いた方が他のプロ
   ジェクトに迷惑をかけない(はず)
動画について
•   MP4コンテナ(H264/AAC)
•   FlashPlayerはMP4(H264)再生可能
•   H264はマルチスレッドでエンコード可能
•   FRAPS/1280x720 1411kbps 約3分
    546MB
    – MP4に変換
    – 劣化ほぼ無しで13MB      FLV(VP6)
                      は諸事情によ
                        りやめた
参考:FFMPEGオプション
• -threads 2 -i %{inputFile} -qmin 1 -qmax
  20 -bf 3 -crf 21 -sc_threshold 54 -partitions
  "parti4x4+partp8x8+partp4x4+partb8x8" -
  level 13 -flags2
  "bpyramid+dct8x8+wpred+mixed_refs-
  fastpskip" -g 30 -keyint_min 1 -b 768k "-
  maxrate" "2000k" -me_range 64 -trellis 2 -
  vcodec libx264 -acodec libfaac -ar 44100 -
  ab 128k -async 1 -y -
  s %{size} %{outputFile}
FLASHの制約
• BASIC認証を通すことができない
• クッキーを送信する事ができない
• ファイルダイアログがユーザークリック
  をトリガーとすることが必須になった
FLASH制約:BASIC認証(1)
• ※セッションを使えばいいが、後述する
  クッキーが使えないのでセッションIDの
  渡し方に困る。
 – ユーザー名がなりすまし対策済みでプログラ
   ムに渡せれば良い
FLASH制約:BASIC認証(2)

    Servlet              アップロード    Servlet
              JSP
(BASIC認証あり)                       (認証なし)

                マジックナンバー               check
マジックナンバー生成

  ユーザー名

  DBに入れる




                    DB
FLASH制約:COOKIE
• COOKIEを送信できない
 – セッションが使えない
 – リクエストパラメータにIDを渡せば良い
FLASH制約:セキュリティ
• JavaScriptから直接ファイルダイアログ
  が開けなくなった。
• ユーザーのクリックイベント必須。

    Button




• Z-Index指定してかぶせてしまえば良い
• もしくはFlashボタンを用意する
社内向けに
•   残りのDISK容量がわかる
•   エンコードサーバのステータスがわかる
•   ユーザ管理はBASIC認証任せ
•   動画の解像度を指定できる
•   帯域制限無し
•   オリジナルの動画も一定期間参照可能
•   動画ファイルのダウンロードリンク
•   エンコードサーバが非力な場合でもパラパラサ
    ムネイルで早期に概要を確認可能
問題点
• Solarisでオールインワンサーバ
 – ZFSはメモリをもりもり食べる食いしん坊
   • デフォルトで総メモリの75%持って行く
 – MySQLを快適に動かすにはメモリが(ry
 – Javaプロセスはメモリが(ry   後日、私物の
                      INTEL-NICを
• Solarisの蟹NICドライバ         刺しました


 – ■■さんがなんとかするんだと思います
   上司

• LDAP認証
 – ■■さんがなんとかするんだと思います。
   上司
既知の不具合/問題      最終版では
                   直ってます


• ファイルアップロード中に別タブで閲覧
  するとanonymousがアップしたことに
  なってしまう
• 動画をHTTPサーバ上に置いているためス
  トリーム配信ができていない
• サムネイル生成に失敗してもエンコード
  を開始する
• AVIファイルが前提になっている
次に向けて      コメント流しは
                  用途的に合
                 わないので入
                  れてません
• 動画上にコメントを流す機能の復活
• 動画上にお絵かきや吹き出しを入れる機
  能の復活
• RSS
• 古い動画を自動で削除する(NO削除フラ
  グも)
• 誰が見たかわかるようにする等
謝辞
• ■■のプロジェクトサーバをあさって勝
  手に素材を使いました(ノ∀`)
(一応デザイナに許可はとったよ)
ここから、後から追加した資料
前置き
• 本業がタスク量的に死にかけてた時なの
  で、基本的には対応しない方針だった。
 – 数字書くとどこぞに怒られるくらい
 – 対応するにしても、2,3時間とかでできない
   とやってはいけない
• という前提があります
 – こんなやっつけ対応はよろしくないです。
HDDの容量が!
• 無くなる度に、近所のソフマップで購入
• ZFSなので追加は楽ちん
• その後、スロット不足によりHDDが足り
  なくなったのでSATAスロットが多いPCへ
  変更
• この作業は全て上司がやってた。
                最後に見たとき
                には、8000くら
                い動画があった
                 気がする
タグ機能と検索
• タイトルにブラケットを入れるとタグ化
 – [VFX][xxx] 新しい魔法のエフェクトだよ
  • タグ: VFX
  • タグ: xxx
• タグの入力欄を作るのが面倒だった
サウンドカット機能
• iTuneで音楽流しながら動画撮るとそっち
  の曲が入ってしまうらしい
 – やっぱり聞きながら作業したいよね・・?
• よろしい。ならばサーバにアップした時
  に、サウンドを消しましょう
 – オプション機能です
 – オリジナルファイルには当然残ってるので注
   意
最終兵器機能
• XXXの形式がアップできない!
 – ffmpegだとコーデックの種類に限界が
• ならば最後の手だ
 – DirectShow経由でエンコードする
  • Windowsサーバなので出来ること
 – 一般的な形式ならこのオプションは要らない
  • いったい何で撮影してるんだろう。。

動画共有ツール