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;
}
}




こんにちは。
本日の受講者の一人です。大変ためになるお話をありがとうございました。
微妙にオタクなので、実例として使ってくださった素材にいちいち反応してピクピクしてしまいました。
FlvPlayerもDLさせて頂きました…おお、見覚えある素材が…!
利用させていただきます。ありがとうございます。
今後ともご活躍ください。
今日は非常にためになる講義をありがとうございました。
終了後までも色々お話いただき大変ありがたく思います。
Airのプレーヤー、ダウンロードさせていただきました。
なんとFlashのもとファイルまで入れてくださるとは!
ちょっとソースも気になっていたので、3重、4重にありがたいです。
今後もまたセミナーでお世話になることがあるかと思いますが、
またよろしくお願いいたします。
先日のセミナーではお疲れさまでした。
コチラこそ、マニアックな講義にお付き合いいただきありがとうございますw
FLVムービーのプレビューくらいにしか使えませんがw
ちょこっとしたことにでも、是非ご活用下さい。
>miyuさん
>微妙にオタクなので、実例として使ってくださった素材にいちいち反応してピクピクしてしまいました。
あははw
それは良かったです。
まぁ僕は趣味を隠す気は毛頭ないので、ちょくちょくピクピクできると思いますよww
>hidekatsuさん
どもども、楽しいトークをありがとうございました。
サイトも拝見させて頂きました。すっきりしていていい感じですね。
>なんとFlashのもとファイルまで入れてくださるとは!
>ちょっとソースも気になっていたので、3重、4重にありがたいです。
AS3.0の習作として作って、気の向くままコーディングして、コメントも真面目に書いてないような、ちょっと汚いソースですが(汗