前回コードから動画リストの繰り返し再生機能を追加して田舎動画再生
/**
* Copyright siouxcitizen ( http://wonderfl.net/user/siouxcitizen )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/aF3a
*/
/**
* Youtube動画を自分作業用に連続再生
* 動画リストをリピート再生する「Repeat」ボタンを追加しました
*
* Youtubeの動画IDをベタ書きで配列に設定して連続再生しています
* Youtubeにあった自分の田舎動画のリストを連続再生しています
*
*/
package {
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent
import flash.net.URLRequest;
import flash.system.Security;
import flash.text.TextField;
import flash.text.TextFieldType;
[SWF(backgroundColor="0x000000", frameRate="30", width="640", height="400")]
public class Player extends Sprite {
private var _player:Object;
private var _loader:Loader;
private var _movieIdListIndex:int = 0;
private const _defaultMovieIdList:Array = [
"soDjDV-DjHE", //ひとっ旅豊岡
"xSRmhiMS78Y", //城崎スケッチ(ダイジェスト)
"b6Svvc8W_Qs", //【弁当忘れても傘忘れるな】兵庫県豊岡市出石町
"A04la9SBjcs", //但東スケッチ(ダイジェスト)
"nkNIKRHhNuw", //神鍋高原
"wUd8XvvY1vM", //全但バス PV
"9kXTp98HQoc" //竹野浜 竹野海岸 竹野浜海水浴場
];
private var _movieIdList:Array = [
"soDjDV-DjHE", //ひとっ旅豊岡
"xSRmhiMS78Y", //城崎スケッチ(ダイジェスト)
"b6Svvc8W_Qs", //【弁当忘れても傘忘れるな】兵庫県豊岡市出石町
"A04la9SBjcs", //但東スケッチ(ダイジェスト)
"nkNIKRHhNuw", //神鍋高原
"wUd8XvvY1vM", //全但バス PV
"9kXTp98HQoc" //竹野浜 竹野海岸 竹野浜海水浴場
];
private var _previousBtn : CustomButton; //「Previoius」ボタン 前Youtube動画に遷移
private var _forwardBtn : CustomButton; //「Forward」ボタン 後Youtube動画に遷移
private var _defaultListBtn : CustomButton; //「Default List」ボタン デフォルトの動画再生リストを設定します
private var _shuffleListBtn : CustomButton; //「Shuffle List」ボタン ランダムな動画再生リストを設定します
private var _repeatBtn : CustomButton; // リピート再生機能On Off切り替え
private var _repeatStateDisp : TextField;// リピー再生するかどうか表示用
private var _repeatOn : Boolean; // リピート再生するかどうか
/// init
public function Player() {
_loader = addChild(new Loader()) as Loader;
_loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit, false, 0, true);
_loader.x = 10;
_loader.y = 10;
//_loader.load(new URLRequest("http://www.youtube.com/v/NMNgbISmF4I?version=3&enablejsapi=1")); //Youtubeコントローラー付き 最初はといあえずのIdを設定
_loader.load(new URLRequest("http://www.youtube.com/v/NMNgbISmF4I?version=3")); //Youtubeコントローラー付き 最初はといあえずののIdを設定
}
/// events
private function onLoaderInit(event:Event):void {
_loader.content.addEventListener("onReady", onPlayerReady);
_loader.content.addEventListener("onError", onPlayerError);
_loader.content.addEventListener("onStateChange", onPlayerStateChange);
_loader.content.addEventListener("onPlaybackQualityChange", onVideoPlaybackQualityChange);
}
private function onPlayerReady(event:Event):void {
// Event.data contains the event parameter, which is the Player API ID
// Once this event has been dispatched by the _player, we can use
// cueVideoById, loadVideoById, cueVideoByUrl and loadVideoByUrl
// to load a particular YouTube video.
_player = _loader.content;
_player.setSize(640, 360);
//_player.setSize(352, 230);
_previousBtn = new CustomButton("Previous");
_previousBtn.x = 150;
_previousBtn.y = 410;
_previousBtn.addEventListener(MouseEvent.MOUSE_DOWN,onPreviousBtnDown);
addChild(_previousBtn);
_forwardBtn = new CustomButton("Foward");
_forwardBtn.x = 400;
_forwardBtn.y = 410;
_forwardBtn.addEventListener(MouseEvent.MOUSE_DOWN,onForwardBtnDown);
addChild(_forwardBtn);
_defaultListBtn = new CustomButton("Default List");
_defaultListBtn.x = 150;
_defaultListBtn.y = 440;
_defaultListBtn.addEventListener(MouseEvent.MOUSE_DOWN,onDefaultListBtnDown);
addChild(_defaultListBtn);
_shuffleListBtn = new CustomButton("Shuffle List");
_shuffleListBtn.x = 400;
_shuffleListBtn.y = 440;
_shuffleListBtn.addEventListener(MouseEvent.MOUSE_DOWN,onShuffleListBtnDown);
addChild(_shuffleListBtn);
_repeatOn = false;
_repeatBtn = new CustomButton("Repeat");
_repeatBtn.x = 150;
_repeatBtn.y = 480;
_repeatBtn.addEventListener(MouseEvent.MOUSE_DOWN,onRepeatBtnDown);
addChild(_repeatBtn);
_repeatStateDisp = new TextField();
_repeatStateDisp.text = "REPEAT OFF";
_repeatStateDisp.width = 130;
_repeatStateDisp.height = 18;
_repeatStateDisp.x = 400;
_repeatStateDisp.y = 485;
_repeatStateDisp.border = true;
_repeatStateDisp.borderColor = 0xFFFFFF;
_repeatStateDisp.background = true;
_repeatStateDisp.backgroundColor = 0x99DDFF;
_repeatStateDisp.type = TextFieldType.INPUT;
//_repeatStateDisp.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
addChild(_repeatStateDisp);
//_player.loadVideoById("NMNgbISmF4I", 0, "default"); //Crazy
//_player.loadVideoById("qfNmyxV2Ncw", 0, "default"); //Cryin'
//_player.loadVideoById("CBTOGVb_cQg", 0, "default"); //Ange
//ect...
_player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default"); //動画リスト最初の動画を再生
}
//「Default List」ボタン押下処理 デフォルトの動画再生リストを設定します
private function onDefaultListBtnDown(event:MouseEvent):void {
_movieIdList = _defaultMovieIdList.slice();
_movieIdListIndex = 0;
_player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default");
}
//「Shuffle List」ボタン押下処理 ランダムな動画再生リストを設定します
private function onShuffleListBtnDown(event:MouseEvent):void {
_movieIdList = shuffle(_defaultMovieIdList);
_movieIdListIndex = 0;
_player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default");
}
//「Previoius」ボタン押下処理 Youtube動画リストの前動画に遷移
private function onPreviousBtnDown(event:MouseEvent):void {
if (_movieIdListIndex > 0) { //動画リストの最前列でない場合は動画を1つもどしてプレイ開始
_movieIdListIndex = _movieIdListIndex - 1;
_player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default"); //配列インデックスで指定して曲再生
} else if (_movieIdListIndex == 0) {
_movieIdListIndex = _movieIdList.length - 1 //動画リストが先頭の場合は動画リストの最後尾へ
_player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default"); //配列インデックスで指定して曲再生
}
}
//「Forward」ボタン押下処理 Youtube動画リストの次動画に遷移
private function onForwardBtnDown(event:MouseEvent):void {
if (_movieIdList.length - 1 > _movieIdListIndex) { //動画リストの最後列でない場合は動画を1つすすめてプレイ開始
_movieIdListIndex = _movieIdListIndex + 1;
_player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default"); //配列インデックスで指定して曲再生
} else if (_movieIdListIndex == _movieIdList.length - 1) {
_movieIdListIndex = 0 //動画リストが最後尾の場合は動画リストの先頭へ
_player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default"); //配列インデックスで指定して曲再生
}
}
//「Rpeat」ボタン押下処理 Youtube動画リストを繰り返し再生するかどうか設定します
private function onRepeatBtnDown(event:MouseEvent):void {
if (_repeatOn) { //動画リストの最後列でない場合は動画を1つすすめてプレイ開始
_repeatOn = false;
_repeatStateDisp.text = "REPEAT OFF";
} else {
_repeatOn = true;
_repeatStateDisp.text = "REPEAT ON";
}
}
//private function onSearchBtnDown(event:MouseEvent):void {
// //encodeURIComponent()を使うことによって、#や日本語にも対応
// _urlLoader.load(new URLRequest(APIURL + encodeURIComponent(_searchBox.text)));
// if (_movieIdList.lenght > 0) { //動画リストが存在する場合はプレイ開始
// _movieIdListIndex = 0;
// _player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default"); //1曲目再生 うまく動いてない???
// }
//}
private function onPlayerError(event:Event):void {
// Event.data contains the event parameter, which is the error code
}
private function onPlayerStateChange(event:Event):void {
// Event.data contains the event parameter, which is the new _player state
//プレイヤーの状態を判定
//未開始(-1)、終了(0)、再生中(1)、一時停止中(2)、バッファリング中(3)、頭出し済み(5)
if (Object(event).data == "0") { //動画が終了した場合
_movieIdListIndex++;
//動画IDリストを超えた場合、かつREPEAT機能有効の場合は動画リストのインデックスを0にもどして再生
//動画IDリストを超えた場合、かつREPEAT機能無効の場合は動画再生を停止
if(_movieIdListIndex > _movieIdList.length - 1) {
//REPEAT機能有効の場合
if(_repeatOn) {
_movieIdListIndex = 0;
//REPEAT機能無効の場合
} else {
return;
}
}
_player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default");
}
}
private function onVideoPlaybackQualityChange(event:Event):void {
// Event.data contains the event parameter, which is the new video quality
}
private function shuffle(data:Array):Array {
var temp:Array = data.slice();
var dest:Array = new Array();
while (temp.length > 0) {
var index:int = Math.random() * temp.length;
dest.push(temp[index]);
temp.splice(index, 1);
}
return dest;
}
}
}
import flash.display.*;
import flash.system.*;
import flash.text.*;
//カスタムボタン
class CustomButton extends SimpleButton {
private var btnName : String = "";//ボタン名
private var btnNo : int = 0;//ボタン番号
//コンストラクタ
public function CustomButton(label:String="",no:int=0) {
btnName = label;
btnNo = no;
//状態
upState = makeSprite(label,0x99DDFF);
overState = upState;
downState = makeSprite(label,0x0000FF);
hitTestState = upState;
}
public function getBtnName():String {
return btnName;
}
public function getBtnNo():int {
return btnNo;
}
//ボタン用スプライト作成
private function makeSprite(text:String,color:uint):Sprite{
//ボタン用ラベル作成
var label : TextField = new TextField();
label.text = text;
label.autoSize = TextFieldAutoSize.CENTER;
label.selectable = false;
label.x = 30;
label.y = 0;
//ボタン用スプライト作成
var sp:Sprite = new Sprite();
sp.graphics.beginFill(color);
sp.graphics.drawRoundRect(0, 0, 170, 25, 10);
sp.graphics.endFill();
sp.alpha = 0.8;
sp.addChild(label);
//ラベル用フォーマット設定
var format:TextFormat=new TextFormat();
format.font = "Courier New";
format.bold = true;
format.size = 15;
label.setTextFormat(format);
return sp;
}
}