NoBody: 2009年9月アーカイブ

AirでFLVプレイヤー作りました。

>>ダウンロードはコチラ

マイコミさんでやらせてもらってるセミナーで受講生からの希望があったんで、Flvプレイヤーを公開します。
一応ちょこっとだけ改造して、flv f4v mp4(H264のみ)に対応しています。

一応ソースコード(CS3形式)も添付してるんで、ご参考までに見てみてください。

一応コチラにもソースをぺとり

import fl.video.*;
import flash.events.*;
import flash.display.Sprite;
import flash.filesystem.File;
import flash.net.FileFilter;
import flash.desktop.*;

stage.quality = "best";
flle_txt.visible = false;

//ステージの拡大モードを設定
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

//widhtを基準とした、heightのアス比
var aspect:Number;

//コントロールを設定
player.playPauseButton = control_mc.playPauseButton_mc;
player.stopButton = control_mc.stopButton_mc;
player.seekBar = control_mc.seekBar_mc;
player.muteButton = control_mc.muteButton_mc;
player.volumeBar = control_mc.volumeBar_mc;
player.fullScreenButton = control_mc.fullScreenButton_mc;
//下マージン
var bottomMargin:int = 3;
//プレイヤーとコントロールのマージン
var ctrlMargin:int = 4;

//プレイヤーの初期設定
player.autoRewind = true;
player.x = 5;
player.y = 30;

//player.source = "test.flv";

//メタを取得できたら、コントロールをビデオの下に吸着
player.addEventListener(MetadataEvent.METADATA_RECEIVED , moveControl);
//吸着用のメソッド
function moveControl(event:MetadataEvent):void{
    aspect = player.metadata.height/player.metadata.width;
    windowFit();
}

//ステージのサイズに合わせてアス比固定で拡大縮小
stage.addEventListener(Event.RESIZE , videoResize);
function videoResize(event:Event):void{
    var playerWidth:Number = stage.stageWidth - 10;
    var playerHeight:Number = playerWidth * aspect;
    var ctrlsHeight:Number = control_mc.height + bottomMargin + player.y;
   
    if(playerHeight + ctrlsHeight < stage.stageHeight){
        player.setSize(playerWidth , playerHeight);
        //ドラッグターゲットのサイズ設定
        dragTarget_mc.width = playerWidth;
        dragTarget_mc.height = playerHeight;
        //BGのサイズ指定
        bg_mc.width = stage.width;
        bg_mc.height = stage.height;
    }else{
        playerHeight = stage.stageHeight - ctrlsHeight;
        playerWidth = playerHeight/aspect;
        player.setSize(playerWidth , playerHeight);
        //ドラッグターゲットのサイズ設定
        dragTarget_mc.width = playerWidth;
        dragTarget_mc.height = playerHeight;
        //BGのサイズ指定
        bg_mc.width = stage.width;
        bg_mc.height = stage.height;
    }
    ctrlMove();
}

//ウィンドウを操作するためのオブジェクト
var window:NativeWindow = this.stage.nativeWindow;

//ウインドウを初期サイズにフィットさせる
function windowFit(){
    window.height = 34 + player.y + player.metadata.height + ctrlMargin + control_mc.height + bottomMargin;
    window.width = 18 + player.metadata.width;
   
    flle_txt.text = window.height + " " + window.width;
   
    player.setSize(player.metadata.width , player.metadata.height);
   
    ctrlMove();
}

//コントロールを右下に吸着
function ctrlMove():void{
    control_mc.y = player.y + player.height + 5;
    close_btn.x = (player.width+5) - close_btn.width - 4;
   
    var mov:Number = control_mc.x = (player.width+5) - 318;
   
    if(mov >= 7){
        control_mc.x = mov;
    } else {
        control_mc.x = 7;
    }
}

//ボタン設定
open_btn.buttonMode = true;
fit_btn.buttonMode = true;
close_btn.buttonMode = true;
//フィットボタンでムービーサイズを元に戻す
fit_btn.addEventListener(MouseEvent.CLICK , fitVideo);
//ムービーリサイズ
function fitVideo(event:MouseEvent){
    windowFit();
}
//クローズボタン
close_btn.addEventListener(MouseEvent.CLICK , winClose);
function winClose(event:MouseEvent){
    window.close();
}

//オープンボタンでのファイル選択処理
open_btn.addEventListener(MouseEvent.CLICK , fileOpen);

//ファイルタイプをFLVのみに設定
//ファイルブラウズ処理
var fileLoader:File = new File();
fileLoader.addEventListener(Event.SELECT , fileSelected);
var filter:FileFilter = new FileFilter("Flvファイル", "*.flv; *f4v; *mp4");

function fileOpen(event:MouseEvent):void{
    fileLoader.browseForOpen("ファイルの選択", [filter]);
}
function fileSelected(event:Event){
    player.source = fileLoader.url;
    flle_txt.text = fileLoader.url;
}

//ドラッグ&ドロップ処理
dragTarget_mc.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, onDragIn);
dragTarget_mc.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, onDrop);

//ドラッグ許可
function onDragIn(event:NativeDragEvent):void{
    flle_txt.text = "Drag";
    var dropData:Clipboard = event.clipboard;

    if (dropData.hasFormat(ClipboardFormats.FILE_LIST_FORMAT)) {
        NativeDragManager.acceptDragDrop(event.target);
    }
}

//ドロップ処理
function onDrop(event:NativeDragEvent):void{
   
    var droppedData:Array = event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT);
   
    var file:File = droppedData[droppedData.length -1];
    if(file.extension == "flv" || file.extension == "FLV" || file.extension == "F4V" || file.extension == "f4v" || file.extension == "mp4" || file.extension == "MP4"){
        player.source = file.url;
    }
}

プロフィール

HN.NoBody

NoBody

市ヶ谷のとあるオフィスでFlashクリエイターとして労役中。
なんとなくチーフ。

twitterでつぶやき中

最近のブログ記事