読者です 読者をやめる 読者になる 読者になる

Paradigm Shift Design

ISHITOYA Kentaro's blog.

PHPでFLVストリーミング,その2,成功したよパパン!の巻き

PHP Flex

FLVのファイルフォーマット - Paradigm Shift Design及び
PHPでFLVストリーミング,その1 - Paradigm Shift Designの続き.


結局,FLVのファイルフォーマット仕様書を読んで,ちゃんとメタデータを出力するようにしたところ,ちゃんと再生された.
PHPでFLVをストリーミングするためのスクリプト(get.php)


うーん!長かった.
ただし,まだ再生開始位置や,ファイルサイズについては実装が適当なので,そのうちちゃんとタグを読んで,再生開始位置を決定するようにしたいと思います.
startとendも決められるといいな.


しかし,コードが冗長になってしまった・・・


一応使い方.

  1. PHP5の入ったサーバーの適当なディレクトリに,上記get.phpを作成する.
  2. そのディレクトリ内に,flvファイルを置く
  3. http://server.com/path/to/get.php?file=ファイル名&position=適当な数字でアクセスする
  4. なんか動いてそうなら問題なし.


Flex側で,
RadioApplication.as

package radio{
    import flash.net.NetConnection;
    import flash.net.NetStream;
    import flash.media.Sound;
    import flash.media.Video;
    import mx.core.Application;
    import flash.events.MouseEvent;
    import flash.system.Security;
    import flash.media.SoundTransform;
    import flash.events.StatusEvent;
    import flash.events.NetStatusEvent;
    
    public class RadioApplication{
        protected var nc:NetConnection = new NetConnection();
        protected var stream:RadioNetStream;
        protected var video:Video;
        public function RadioApplication():void{
            flash.system.Security.allowDomain("*");
            this.nc.connect(null);
            this.stream = new RadioNetStream(this.nc);  
            this.stream.play("http://server.com/path/to/get.php?file=0001.flv&position=1000");
        }
    }
}

RadioNetStream.as

package radio
{
    import flash.net.NetStream;
    import flash.net.NetConnection;

    public class RadioNetStream extends NetStream
    {       
        public function RadioNetStream(nc:NetConnection){
            super(nc);
        }
        public function onMetaData(infoObject:Object):void {
            for (var propName:String in infoObject) {
                trace(propName + " = " + infoObject[propName]);
            }
        }
 
        public function onCuePoint(infoObject:Object):void {
            trace("cue point");
        }
    }
}

radio.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="initApp();" xmlns:media="flash.media.*">
    <mx:Script>
        <![CDATA[
            import radio.RadioApplication;

            protected var application:RadioApplication;

            private function initApp(): void{
                this.application = new RadioApplication();
            }
        ]]>
    </mx:Script>
</mx:Application>

のようなアプリケーションを作って実行してみて,音が鳴れば問題なく稼動しているということです.