2009年1月アーカイブ

Red5かなにかでリアルタイムに録画をしてメディアファイルを作り上げながら、そのメディアをffserverに転送してリアルタイム配信をする方法。

tail -n +1 -f <media file> | ffmpeg -i - http://localhost:8090/feed1.ffm

http://localhost:8090/feed1.ffm <- ffserver
今までJavaScriptとActionScript間の処理をさせるには、ExternalInterface を使って呼び出せるメソッドをわざわざ作らないといけなかった。この場合、作業が増えてしまう。

ここで、Adobe Labsからつい最近卒業したばかりのFlash-Ajax Bridgeがすばらしく役に立つ。

1.Flex側の手順
まず、FABridge.asをFlexにimportする
メインのmxmlに<fabs:FABridge xmlns:fabs="bridge.*" />と入力してFABridgeを読み込む

2.HTML側の手順
HTML側でFABridge.jsをimportする
1番で作成したSWFファイルをEmbedする

<object id="flexApp" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,5,0,0" height="240" width="320">
 <param name="flashvars" value="bridgeName=presentationLive"/>
 <param name="src" value="PresentationLive.swf"/>
 <embed name="flexApp" pluginspage="http://www.macromedia.com/go/getflashplayer" src="PresentationLive.swf" height="240" width="320" flashvars="bridgeName=presentationLive"/>
</object>


JavaScriptで下記のように書いたら、SWF内のメソッド、変数などにアクセスできてしまう

<script language="Javascript" type="text/javascript">
  function sendAuthRequest(){
 flexApp = FABridge.presentationLive.root();
 var authCallback = function(event){
        alert(event.getData().status+" : "+event.getData().session+" : "+event.getData().id);
          session = event.getData().session;
        host_id = event.getData().id;

        startLive(); //start broadcasting live
   }
   flexApp.getAuth().addEventListener("LoginResult", authCallback);
   flexApp.login(document.getElementById("email").value,document.getElementById("password").value);
 }
    
 function startLive(){
        flexApp.enterRoom('create',host_id,session);
  }
</script>


詳細はAdobeのFABridgeページ


miyagawaさんが開発したRemedie Media Centerを自分のサーバーで起動してみた。
デフォルトではhttp://localhost:10010/で起動していたので、これ専用のサブドメインを作成した。
http://remedie.koba206.com はhttp://localhost:10010/ に転送されるようにWebサーバーの設定をした。

作業的には /etc/apache2/sites-enabled/ にremedie.koba206.com.conf ファイルを作成した。
内部には

<VirtualHost *:*>
ServerName remedie.koba206.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:10010/
ProxyPassReverse / http://localhost:10010/
</VirtualHost>


ファイルを保存後、Webサーバーを再起動でOK。

下記のコマンドをどこかのリナックスコマンド上で叩くだけ。

printf "PURGE <パージしたいURL> HTTP/1.0\r\nAccept: */*\r\n\r\n" | nc <cacheサーバーアドレス> 80



参考書: Squid: The Definitive Guide