Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /NNDDv2/trunk/src/org/mineap/nndd/player/PlayerController.as

Parent Directory Parent Directory | Revision Log Revision Log


Revision 370 - (hide annotations) (download)
Wed Oct 27 11:34:05 2010 UTC (13 years, 5 months ago) by mineap
File size: 143885 byte(s)
v1をv2にマージ
1 mineap 370 package org.mineap.nndd.player
2     {
3     import flash.display.Loader;
4     import flash.display.LoaderInfo;
5     import flash.display.MovieClip;
6     import flash.display.NativeWindowType;
7     import flash.display.StageDisplayState;
8     import flash.events.ErrorEvent;
9     import flash.events.Event;
10     import flash.events.EventDispatcher;
11     import flash.events.HTTPStatusEvent;
12     import flash.events.IOErrorEvent;
13     import flash.events.MouseEvent;
14     import flash.events.TimerEvent;
15     import flash.filesystem.File;
16     import flash.media.SoundMixer;
17     import flash.media.SoundTransform;
18     import flash.net.URLRequest;
19     import flash.utils.Timer;
20    
21     import mx.collections.ArrayCollection;
22     import mx.controls.Alert;
23     import mx.controls.DataGrid;
24     import mx.controls.SWFLoader;
25     import mx.controls.Text;
26     import mx.controls.VideoDisplay;
27     import mx.controls.videoClasses.VideoError;
28     import mx.core.Application;
29     import mx.core.Window;
30     import mx.events.AIREvent;
31     import mx.events.FlexEvent;
32     import mx.events.MetadataEvent;
33     import mx.events.VideoEvent;
34     import mx.formatters.DateFormatter;
35     import mx.managers.PopUpManager;
36    
37     import org.libspark.utils.ForcibleLoader;
38     import org.mineap.nicovideo4as.MyListLoader;
39     import org.mineap.nicovideo4as.WatchVideoPage;
40     import org.mineap.nicovideo4as.analyzer.GetRelationResultAnalyzer;
41     import org.mineap.nicovideo4as.loader.api.ApiGetRelation;
42     import org.mineap.nicovideo4as.model.RelationResultItem;
43     import org.mineap.nicovideo4as.util.HtmlUtil;
44     import org.mineap.nndd.Access2Nico;
45     import org.mineap.nndd.FileIO;
46     import org.mineap.nndd.LogManager;
47     import org.mineap.nndd.Message;
48     import org.mineap.nndd.NGListManager;
49     import org.mineap.nndd.NNDDDownloader;
50     import org.mineap.nndd.NNDDMyListAdder;
51     import org.mineap.nndd.NNDDVideoPageWatcher;
52     import org.mineap.nndd.RenewDownloadManager;
53     import org.mineap.nndd.comment.Command;
54     import org.mineap.nndd.comment.CommentManager;
55     import org.mineap.nndd.comment.Comments;
56     import org.mineap.nndd.event.LocalCommentSearchEvent;
57     import org.mineap.nndd.history.HistoryManager;
58     import org.mineap.nndd.library.ILibraryManager;
59     import org.mineap.nndd.library.LibraryManagerBuilder;
60     import org.mineap.nndd.library.LocalVideoInfoLoader;
61     import org.mineap.nndd.library.namedarray.LibraryManager;
62     import org.mineap.nndd.model.NNDDComment;
63     import org.mineap.nndd.model.NNDDVideo;
64     import org.mineap.nndd.model.PlayList;
65     import org.mineap.nndd.playList.PlayListManager;
66     import org.mineap.nndd.util.DateUtil;
67     import org.mineap.nndd.util.IchibaBuilder;
68     import org.mineap.nndd.util.LibraryUtil;
69     import org.mineap.nndd.util.NumberUtil;
70     import org.mineap.nndd.util.PathMaker;
71     import org.mineap.nndd.util.RelationTypeUtil;
72     import org.mineap.nndd.util.ThumbInfoAnalyzer;
73     import org.mineap.nndd.util.ThumbInfoUtil;
74     import org.mineap.nndd.util.WebServiceAccessUtil;
75     import org.mineap.nndd.view.SmoothVideoDisplay;
76     import org.mineap.util.config.ConfigIO;
77     import org.mineap.util.config.ConfigManager;
78    
79     /**
80     * PlayerController.as
81     * ���������������������������������������������������������������������������GUI������������������������
82     *
83     * Copyright (c) 2008-2009 MAP - MineApplicationProject. All Rights Reserved.
84     *
85     * @author shiraminekeisuke
86     *
87     */
88     public class PlayerController extends EventDispatcher
89     {
90    
91     public static const WINDOW_TYPE_SWF:int = 0;
92     public static const WINDOW_TYPE_FLV:int = 1;
93    
94     public static const NG_LIST_RENEW:String = "NgListRenew";
95    
96     private var commentManager:CommentManager;
97     private var comments:Comments;
98    
99     public var windowType:int = -1;
100     public var videoPlayer:VideoPlayer;
101     public var videoInfoView:VideoInfoView;
102     public var ngListManager:NGListManager;
103     public var libraryManager:ILibraryManager;
104     public var playListManager:PlayListManager;
105    
106     private var windowReady:Boolean = false;
107    
108     private var swfLoader:SWFLoader = null;
109     private var loader:Loader = null;
110     private var isMovieClipPlaying:Boolean = false;
111    
112     private var videoDisplay:SmoothVideoDisplay = null;
113    
114     private var nicowariSwfLoader:SWFLoader = null;
115    
116     private var isStreamingPlay:Boolean = false;
117    
118     private var source:String = "";
119    
120     private var commentTimer:Timer = new Timer(1000/15);
121     private var commentTimerVpos:int = 0;
122    
123     private var lastSeekTime:Number = new Date().time;
124    
125     private var time:Number = 0;
126    
127     private var pausing:Boolean = false;
128    
129     private var downLoadedURL:String = null;
130    
131     private var isPlayListingPlay:Boolean = false;
132     private var playingIndex:int = 0;
133    
134     private var logManager:LogManager;
135    
136     private var mailAddress:String;
137     private var password:String;
138    
139     private var mc:MovieClip;
140     private var nicowariMC:MovieClip;
141     public var swfFrameRate:Number = 0;
142    
143     public var sliderChanging:Boolean = false;
144    
145     private var nicowariTimer:Timer;
146    
147     private var isCounted:Boolean = false;
148    
149     private var isMovieClipStopping:Boolean = false;
150    
151     public var isPlayerClosing:Boolean = false;
152    
153     public var _isEconomyMode:Boolean = false;
154    
155     private var renewDownloadManager:RenewDownloadManager;
156     private var nnddDownloaderForStreaming:NNDDDownloader;
157     private var playerHistoryManager:PlayerHistoryManager;
158     private var renewDownloadManagerForOldComment:RenewDownloadManager;
159    
160     public static const NICO_WARI_HEIGHT:int = 56;
161     public static const NICO_WARI_WIDTH:int = 544;
162    
163     public static const NICO_SWF_HEIGHT:int = 384;
164     public static const NICO_SWF_WIDTH:int = 512;
165    
166     public static const NICO_VIDEO_WINDOW_HEIGHT:int = 384;
167     public static const NICO_VIDEO_WINDOW_WIDTH:int = 544;
168     public static const NICO_VIDEO_WINDOW_WIDTH_WIDE_MODE:int = 683;
169    
170     public static const WIDE_MODE_ASPECT_RATIO:Number = 1.7;
171    
172     //������������������������������������������������������null���
173     private var playingJihou:String = null;
174    
175     private var movieEndTimer:Timer = null;
176    
177     private var isSwfConverting:Boolean = false;
178    
179     private var streamingProgressCount:int = 0;
180    
181     private var streamingProgressTimer:Timer = null;
182    
183     private var _videoID:String = null;
184    
185     private var _myListAdder:NNDDMyListAdder = null;
186    
187     private var nnddDownloaderForWatch:NNDDDownloader = null;
188    
189     private var lastFrame:int = 0;
190    
191     private var lastNicowariFrame:int = 0;
192    
193     private var myListLoader:MyListLoader = null;
194    
195     private var nicowariCloseTimer:Timer = null;
196    
197     private var configManager:ConfigManager;
198    
199     private var configIO:ConfigIO;
200    
201     private var streamingRetryCount:int = 0;
202    
203     private var nicoVideoPageGetRetryTimer:Timer;
204    
205     private var nicoVideoAccessRetryTimer:Timer;
206    
207     private var nicoRelationInfoLoader:ApiGetRelation = null;
208    
209     [Embed(source="player/NNDDicons_play_20x20.png")]
210     private var icon_Play:Class;
211    
212     [Embed(source="player/NNDDicons_pause_20x20.png")]
213     private var icon_Pause:Class;
214    
215     [Embed(source="player/NNDDicons_stop_20x20.png")]
216     private var icon_Stop:Class;
217    
218    
219     /**
220     * ������������������������Player���������������PlayerController���������<br>
221     * FLV���MP4������������������������Player���SWF������������������������Player���������������<br>
222     * ���������������������������������������<br>
223     *
224     * @param mailAddress
225     * @param password
226     * @param playListManager
227     * @param videoPath
228     * @param windowType
229     * @param comments
230     * @param autoPlay
231     *
232     */
233     public function PlayerController(mailAddress:String,
234     password:String,
235     playListManager:PlayListManager,
236     videoPath:String = null,
237     windowType:int = -1,
238     comments:Comments = null,
239     autoPlay:Boolean = false)
240     {
241     this.logManager = LogManager.instance;
242     this.mailAddress = mailAddress;
243     this.password = password;
244     this.libraryManager = LibraryManagerBuilder.instance.libraryManager;
245     this.playListManager = playListManager;
246     this.videoPlayer = new VideoPlayer();
247     this.videoInfoView = new VideoInfoView();
248     this.videoInfoView.type = NativeWindowType.UTILITY;
249     ConfigManager.getInstance().reload();
250     this.videoPlayer.init(this, videoInfoView, logManager);
251     this.videoInfoView.init(this, videoPlayer, logManager);
252     this.videoPlayer.addEventListener(AIREvent.WINDOW_COMPLETE, function():void{
253     // dispatchEvent(new Event(Event.ACTIVATE));
254     videoInfoView.activate();
255     videoPlayer.activate();
256     });
257     this.ngListManager = new NGListManager(this, videoPlayer, videoInfoView, logManager);
258     if(libraryManager != null){
259     if(!this.ngListManager.loadNgList(LibraryManagerBuilder.instance.libraryManager.systemFileDir)){
260     this.ngListManager.loadNgList(LibraryManagerBuilder.instance.libraryManager.libraryDir);
261     }
262     }
263     this.commentTimer.addEventListener(TimerEvent.TIMER, commentTimerHandler);
264     this.commentManager = new CommentManager(videoPlayer, videoInfoView, this);
265     if(videoPath != null && windowType != -1 && comments != null){
266     this.init(videoPath, windowType, comments, PathMaker.createThmbInfoPathByVideoPath(videoPath), autoPlay);
267     this.windowReady = true;
268     }
269     this.playerHistoryManager = new PlayerHistoryManager();
270    
271     }
272    
273     /**
274     * ���������������������������
275     * Comments���NgList���null���������������GC������������������
276     *
277     */
278     public function destructor():void{
279    
280     isMovieClipStopping = false;
281    
282     if(this.movieEndTimer != null){
283     this.movieEndTimer.stop();
284     this.movieEndTimer = null;
285     }
286    
287     if(this.commentTimer != null){
288     this.commentTimer.stop();
289     this.commentTimer.reset()
290     }else{
291     this.commentTimer = new Timer(1000/15);
292     this.commentTimer.addEventListener(TimerEvent.TIMER, commentTimerHandler);
293     }
294    
295     if(this.comments != null){
296     this.comments.destructor();
297     }
298     this.comments = null;
299     // this.ngList = null;
300    
301     if(videoDisplay != null){
302     try{
303     videoDisplay.stop();
304     }catch(error:VideoError){
305     trace(error.getStackTrace());
306     }
307     removeVideoDisplayEventListeners(videoDisplay);
308     videoDisplay.source = null;
309     videoDisplay = null;
310     this.videoPlayer.canvas_video.removeAllChildren();
311     }
312    
313     isMovieClipPlaying = false;
314     if(loader != null && !isSwfConverting){
315     SoundMixer.stopAll();
316     loader.unloadAndStop(true);
317     // removeMovieClipEventHandlers(loader);
318     loader = null;
319     this.videoPlayer.canvas_video.removeAllChildren();
320     isSwfConverting = false;
321     }
322     if(swfLoader != null && !isSwfConverting){
323     SoundMixer.stopAll();
324     swfLoader.unloadAndStop(true);
325     swfLoader = null;
326     this.videoPlayer.canvas_video.removeAllChildren();
327     isSwfConverting = false;
328     }
329    
330     if(this.nicowariSwfLoader != null){
331     videoPlayer.canvas_nicowari.removeAllChildren();
332     if(nicowariMC != null){
333     this.pauseByNicowari(true);
334     }
335     }
336    
337     if(videoPlayer != null && videoPlayer.canvas_nicowari != null){
338     videoPlayer.canvas_nicowari.removeAllChildren();
339     videoPlayer.canvas_nicowari.setConstraintValue("backgroundColor", new int("0x969696"));
340    
341     }
342    
343     if(streamingProgressTimer != null){
344     streamingProgressTimer.stop();
345     streamingProgressTimer = null;
346     }
347     streamingProgressCount = 0;
348    
349     playingJihou = null;
350    
351     if(nnddDownloaderForWatch != null){
352     nnddDownloaderForWatch.close(false, false);
353     nnddDownloaderForWatch = null;
354     }
355    
356     if(myListLoader != null){
357     myListLoader.close();
358     myListLoader = null;
359     }
360    
361     this.lastFrame = 0;
362     this.lastNicowariFrame = 0;
363    
364     isCounted = false;
365    
366     }
367    
368     /**
369     * ������������������������Player���������������������������<br>
370     * autoPlay���true������������������������init()���������������������������������������������������������������<br>
371     * <b>playMovie()���������������������������</b>
372     *
373     * @param videoPath
374     * @param windowType
375     * @param comments
376     * @param thumbInfoPath
377     * @param ngList
378     * @param autoPlay
379     * @param isStreamingPlay
380     * @param downLoadedURL
381     * @param isPlayListingPlay
382     *
383     */
384     private function init(videoPath:String, windowType:int, comments:Comments, thumbInfoPath:String,
385     autoPlay:Boolean = false, isStreamingPlay:Boolean = false,
386     downLoadedURL:String = null, isPlayListingPlay:Boolean = false, videoId:String = ""):void
387     {
388     this.destructor();
389    
390     if(videoPlayer != null){
391     videoPlayer.resetInfo();
392     if(videoPlayer.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE){
393     videoPlayer.restore();
394     }
395     }
396    
397     if(videoInfoView != null){
398     videoInfoView.resetInfo();
399     videoInfoView.restore();
400     }
401    
402     videoPlayer.setControllerEnable(false);
403    
404     this._videoID = null;
405     if(videoId != null && videoId != ""){
406     this._videoID = videoId;
407     }
408    
409     this.windowReady = false;
410     this.source = videoPath;
411     this.comments = comments;
412     this.time = (new Date).time;
413     this.isStreamingPlay = isStreamingPlay;
414     this.downLoadedURL = downLoadedURL;
415     this.isPlayListingPlay = isPlayListingPlay;
416     this.windowType = windowType;
417    
418     if(!isPlayListingPlay){
419     this.videoInfoView.resetPlayList();
420     }
421    
422     this.videoPlayer.videoController.resetAlpha(true);
423    
424     if(isStreamingPlay){
425     if(streamingProgressTimer != null){
426     streamingProgressTimer.stop();
427     streamingProgressTimer = null;
428     }
429     streamingProgressCount = 0;
430    
431     this.videoPlayer.label_playSourceStatus.text = "Streaming:0% ";
432     streamingProgressTimer = new Timer(200);
433     streamingProgressTimer.addEventListener(TimerEvent.TIMER, streamingProgressHandler);
434     streamingProgressTimer.start();
435    
436     if(this.videoPlayer.title == null){
437     this.videoPlayer.addEventListener(FlexEvent.CREATION_COMPLETE, function():void{
438     this.videoPlayer.title = downLoadedURL.substr(downLoadedURL.lastIndexOf("/") + 1);
439     });
440     }else{
441     this.videoPlayer.title = downLoadedURL.substr(downLoadedURL.lastIndexOf("/") + 1);
442     }
443     }else{
444     this.videoPlayer.label_playSourceStatus.text = "[Local]";
445     this.streamingRetryCount = 0;
446     if(this.videoPlayer.title == null){
447     this.videoPlayer.addEventListener(FlexEvent.CREATION_COMPLETE, function():void{
448     this.videoPlayer.title = videoPath.substr(videoPath.lastIndexOf("/") + 1);
449     });
450     }else{
451     this.videoPlayer.title = videoPath.substr(videoPath.lastIndexOf("/") + 1);
452     }
453     var file:File = new File(videoPath);
454     if(!file.exists){
455     Alert.show("������������������������������������\n������������������������������������������������������������������������������", "���������");
456     logManager.addLog("������������������������������������������������������������������������������������������������������������������:" + file.nativePath);
457     Application.application.activate();
458     return;
459     }
460    
461     }
462    
463     /* ������������������������������������������������������������������������ */
464     if(!isStreamingPlay && this.videoInfoView.isRenewCommentEachPlay){
465     //���������������������������������������������������������������
466    
467     logManager.addLog(Message.START_PLAY_EACH_COMMENT_DOWNLOAD);
468     videoPlayer.label_downloadStatus.text = Message.START_PLAY_EACH_COMMENT_DOWNLOAD;
469    
470     if(this._videoID == null){
471     this._videoID = PathMaker.getVideoID(videoPath);
472     }
473    
474     if(this._videoID != null && PathMaker.getVideoID(videoPath) == LibraryUtil.getVideoKey(videoPath)){
475    
476     if((mailAddress != null && password != null) && (mailAddress != "" && password != null && password != "")){
477    
478     /* ������������������������������������������������ */
479    
480     var videoUrl:String = "http://www.nicovideo.jp/watch/"+PathMaker.getVideoID(this._videoID);
481    
482     renewCommentAtStart(PathMaker.getVideoID(this._videoID), videoPath, initStart);
483    
484     }else{
485    
486     /* ��������������������������������������������������� */
487     logManager.addLog(Message.FAIL_PLAY_EACH_COMMENT_DOWNLOAD + "(������������������������������)");
488     initStart();
489    
490     }
491    
492     }else{
493    
494     logManager.addLog(Message.FAIL_PLAY_EACH_COMMENT_DOWNLOAD + "(������ID���������������������)");
495     videoPlayer.label_downloadStatus.text = Message.FAIL_PLAY_EACH_COMMENT_DOWNLOAD + "(������ID���������������������)";
496    
497     var timer:Timer = new Timer(1000, 1);
498     timer.addEventListener(TimerEvent.TIMER_COMPLETE, function(event:TimerEvent):void{
499     initStart();
500    
501     timer.stop();
502     timer = null;
503    
504     });
505     timer.start();
506    
507     }
508     }else{
509     //���������������������������������������������������(������������������������������������������������)
510    
511     this._videoID = videoId;
512    
513     if(this._videoID == null || this._videoID == ""){
514     this._videoID = PathMaker.getVideoID(videoPlayer.title);
515     }
516    
517     logManager.addLog("���������������������������������������:" + this._videoID);
518    
519     if(this._videoID != null && this._videoID != ""){
520    
521     if(this.mailAddress != null && this.mailAddress != "" &&
522     this.password != null && this.password != ""){
523    
524     myListGroupUpdate(PathMaker.getVideoID(this._videoID));
525    
526     }else{
527     //���������������������������������
528     logManager.addLog("���������������������������������������(���������������������������)");
529     }
530    
531     }else{
532     //
533     logManager.addLog("���������������������������������������(������ID���������������������)");
534     }
535    
536     initStart();
537     }
538    
539     /**
540     * ������������������������������������������������������������
541     */
542     function initStart():void{
543    
544     try{
545     if(_isEconomyMode){
546     videoPlayer.label_economyStatus.text = "������������������������";
547     }else{
548     videoPlayer.label_economyStatus.text = "";
549     }
550    
551     videoPlayer.canvas_video.toolTip = null;
552    
553     if(isPlayerClosing){
554     stop();
555     destructor();
556     return;
557     }
558    
559     commentTimerVpos = 0;
560    
561     var text:Text = new Text();
562     text.text = "������������������������������������������������������������������������������������������������\n������������������������������������������������������������������";
563     text.setConstraintValue("left", 10);
564     text.setConstraintValue("top", 10);
565     videoPlayer.canvas_nicowari.addChild(text);
566    
567     videoPlayer.label_downloadStatus.text = "";
568     videoInfoView.image_thumbImg.source = "";
569     videoPlayer.videoInfoView.text_info.htmlText ="(������������������������)<br />(������������������������)<br />������: ������������: ���������������:"
570    
571     if(isStreamingPlay){
572     //������������������DL������������������������������
573     setInfo(downLoadedURL, thumbInfoPath, thumbInfoPath.substring(0, thumbInfoPath.lastIndexOf("/")) + "/nndd[IchibaInfo].html", true);
574    
575     videoInfoView.image_thumbImg.source = thumbInfoPath.substring(0, thumbInfoPath.lastIndexOf("/")) + "/nndd[ThumbImg].jpeg";
576     }else{
577     setInfo(videoPath, thumbInfoPath, PathMaker.createNicoIchibaInfoPathByVideoPath(videoPath), false);
578    
579     var nnddVideo:NNDDVideo = libraryManager.isExist(PathMaker.getVideoID(videoPath));
580    
581     if(nnddVideo != null){
582     videoInfoView.image_thumbImg.source = nnddVideo.thumbUrl;
583     }
584     }
585    
586     changeFps(videoInfoView.fps);
587    
588     videoPlayer.videoController.label_time.text = "0:00/0:00";
589     videoPlayer.videoController_under.label_time.text = "0:00/0:00";
590    
591     if(videoInfoView.isShowAlwaysNicowariArea){
592     //������������������������������������
593     videoPlayer.showNicowariArea();
594    
595     }else{
596     //���������������������������������
597     videoPlayer.hideNicowariArea();
598    
599     }
600    
601    
602     var video:NNDDVideo = libraryManager.isExist(LibraryUtil.getVideoKey(_videoID));
603     if(video != null){
604     HistoryManager.instance.addVideoByNNDDVideo(video);
605     }else{
606     video = new NNDDVideo("http://www.nicovideo.jp/watch/" + PathMaker.getVideoID(_videoID), videoPlayer.title, false, null, null, null, PathMaker.getThumbImgUrl(PathMaker.getVideoID(_videoID)));
607    
608     HistoryManager.instance.addVideoByNNDDVideo(video, null, false);
609     }
610    
611     if(windowType == PlayerController.WINDOW_TYPE_FLV){
612     //WINDOW_TYPE_FLV���������������������������������
613    
614     isMovieClipPlaying = false;
615    
616     videoDisplay = new SmoothVideoDisplay();
617    
618     videoPlayer.label_downloadStatus.text = "";
619    
620     if(isStreamingPlay){
621     videoPlayer.label_downloadStatus.text = "���������������...";
622     videoDisplay.addEventListener(VideoEvent.PLAYHEAD_UPDATE, bufferingHandler);
623     }
624    
625     videoPlayer.canvas_video.removeAllChildren();
626     videoPlayer.canvas_video.addChild(videoDisplay);
627    
628     videoDisplay.smoothing = true;
629    
630     videoDisplay.setConstraintValue("bottom", 0);
631     videoDisplay.setConstraintValue("left", 0);
632     videoDisplay.setConstraintValue("right", 0);
633     videoDisplay.setConstraintValue("top", 0);
634     videoDisplay.bufferTime = 3;
635    
636     videoDisplay.autoPlay = autoPlay;
637     videoDisplay.source = videoPath;
638     videoDisplay.autoRewind = false;
639     videoDisplay.volume = videoPlayer.videoController.slider_volume.value;
640     videoPlayer.videoController_under.slider_volume.value = videoPlayer.videoController.slider_volume.value;
641    
642     addVideoDisplayEventListeners(videoDisplay);
643    
644     commentManager.initComment(comments, videoPlayer.canvas_video);
645     commentManager.setCommentAlpha(videoInfoView.commentAlpha/100);
646    
647     windowReady = true;
648    
649     if(autoPlay && !isStreamingPlay){
650     time = (new Date).time;
651     commentTimer.start();
652     }
653    
654     videoDisplay.addEventListener(MetadataEvent.METADATA_RECEIVED, metadetaRecevedEventHandler);
655     videoDisplay.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void{
656     event.currentTarget.setFocus();
657     });
658    
659     videoPlayer.videoController.button_play.setStyle("icon", icon_Pause);
660     videoPlayer.videoController_under.button_play.setStyle("icon", icon_Pause);
661     setVolume(videoPlayer.videoController.slider_volume.value);
662    
663     if(videoInfoView.visible){
664     videoInfoView.restore();
665     }
666     if(videoPlayer.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE){
667     videoPlayer.restore();
668     }
669    
670     if(videoInfoView.visible){
671     videoInfoView.activate();
672     }
673     videoPlayer.activate();
674    
675     windowResized(false);
676    
677     videoPlayer.setControllerEnable(true);
678    
679     }else if(windowType == PlayerController.WINDOW_TYPE_SWF){
680     //WINODW_TYPE_SWF���������������������������������
681    
682     isMovieClipPlaying = true;
683     isSwfConverting = true;
684    
685     videoPlayer.label_downloadStatus.text = "SWF������������������������...";
686    
687     loader = new Loader();
688     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, convertCompleteHandler);
689     var fLoader:ForcibleLoader = new ForcibleLoader(loader);
690     swfLoader = new SWFLoader();
691     swfLoader.addChild(loader);
692    
693     videoPlayer.canvas_video.removeAllChildren();
694     videoPlayer.canvas_video.addChild(swfLoader);
695    
696     swfLoader.setConstraintValue("bottom", 0);
697     swfLoader.setConstraintValue("left", 0);
698     swfLoader.setConstraintValue("right", 0);
699     swfLoader.setConstraintValue("top", 0);
700    
701     swfLoader.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void{
702     event.currentTarget.setFocus();
703     });
704    
705     commentManager.initComment(comments, videoPlayer.canvas_video);
706     commentManager.setCommentAlpha(videoInfoView.commentAlpha/100);
707    
708     windowReady = true;
709    
710     if(autoPlay){
711     fLoader.load(new URLRequest(videoPath));
712     }
713    
714     var timer:Timer = new Timer(500, 4);
715     timer.addEventListener(TimerEvent.TIMER, function():void{
716     windowResized(false);
717     });
718     timer.start();
719    
720     videoPlayer.videoController_under.button_play.setStyle("icon", icon_Pause);
721     videoPlayer.videoController.button_play.setStyle("icon", icon_Pause);
722    
723     if(videoInfoView.visible){
724     videoInfoView.restore();
725     }
726    
727     if(videoPlayer.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE){
728     videoPlayer.restore();
729     }
730    
731     if(videoInfoView.visible){
732     videoInfoView.activate();
733     }
734     videoPlayer.activate();
735    
736     videoPlayer.setControllerEnable(true);
737    
738     }
739    
740     if(videoInfoView != null && videoInfoView.tabNavigator_comment != null){
741     if(videoInfoView.tabNavigator_comment.selectedIndex == 1){
742     // ���������������������������������������������������������������������������������
743     videoInfoView.reloadOldComment();
744     }else{
745     // ������������������������������������������������������
746     videoInfoView.resetOldCommentDate();
747     }
748     }
749    
750     return;
751     }catch(error:Error){
752     trace(error.getStackTrace());
753     logManager.addLog(error + ":" + error.getStackTrace());
754     // destructor();
755     }
756    
757     }
758    
759     }
760    
761     /**
762     *
763     * @param videoId
764     * @param videoPath
765     * @param initStart
766     *
767     */
768     private function renewCommentAtStart(videoId:String, videoPath:String, initStart:Function):void{
769    
770     var videoName:String = PathMaker.getVideoName(videoPath);
771    
772     if(renewDownloadManager != null){
773     renewDownloadManager.close();
774     renewDownloadManager = null;
775     }
776    
777     renewDownloadManager = new RenewDownloadManager(null, logManager);
778     renewDownloadManager.addEventListener(RenewDownloadManager.PROCCESS_COMPLETE, function(event:Event):void{
779     var video:NNDDVideo = libraryManager.isExist(PathMaker.getVideoID(videoPath));
780     if(video == null){
781     try{
782     video = new LocalVideoInfoLoader().loadInfo(videoPath);
783     video.creationDate = new File(videoPath).creationDate;
784     video.modificationDate = new File(videoPath).modificationDate;
785     }catch(error:Error){
786     video = new NNDDVideo(videoPath);
787     }
788     libraryManager.add(video, false);
789     video = libraryManager.isExist(video.key);
790     }
791     var thumbUrl:String = (event.currentTarget as RenewDownloadManager).localThumbUri;
792     var isLocal:Boolean = false;
793     try{
794     //������������������������������������������������������������������������������������
795     var file:File = new File(video.thumbUrl);
796     if(file.exists){
797     isLocal = true;
798     }
799     }catch(e:Error){
800     trace(e);
801     }
802    
803     //thumbUrl���URL���������������������������������������������������
804     if(!isLocal){
805     if(thumbUrl != null){
806     //���������������������thumbUrl���������
807     video.thumbUrl = thumbUrl;
808     }else if (video.thumbUrl == null || video.thumbUrl == ""){
809     //thumbUrl���������������==������������������
810     var videoId:String = PathMaker.getVideoID(_videoID);
811     if(videoId != null){
812     video.thumbUrl = PathMaker.getThumbImgUrl(videoId);
813     }else{
814     video.thumbUrl = "";
815     }
816     }
817     }
818    
819     libraryManager.update(video, false);
820    
821     var commentPath:String = PathMaker.createNomalCommentPathByVideoPath(video.getDecodeUrl());
822     var ownerCommentPath:String = PathMaker.createOwnerCommentPathByVideoPath(video.getDecodeUrl());
823     comments = new Comments(commentPath, ownerCommentPath, getCommentListProvider(), getOwnerCommentListProvider(),
824     ngListManager, videoInfoView.isShowOnlyPermissionComment, videoInfoView.isHideSekaShinComment,
825     videoInfoView.showCommentCount, videoInfoView.isNgUpEnable);
826    
827     renewDownloadManager = null;
828    
829     myListGroupUpdate(PathMaker.getVideoID(_videoID));
830    
831     initStart();
832     });
833     renewDownloadManager.addEventListener(NNDDDownloader.COMMENT_GET_SUCCESS, getProgressListener);
834     renewDownloadManager.addEventListener(NNDDDownloader.GETFLV_API_ACCESS_SUCCESS, getProgressListener);
835     renewDownloadManager.addEventListener(NNDDDownloader.ICHIBA_INFO_GET_SUCCESS, getProgressListener);
836     renewDownloadManager.addEventListener(NNDDDownloader.LOGIN_SUCCESS, getProgressListener);
837     renewDownloadManager.addEventListener(NNDDDownloader.NICOWARI_GET_SUCCESS, getProgressListener);
838     renewDownloadManager.addEventListener(NNDDDownloader.OWNER_COMMENT_GET_SUCCESS, getProgressListener);
839     renewDownloadManager.addEventListener(NNDDDownloader.THUMB_IMG_GET_SUCCESS, getProgressListener);
840     renewDownloadManager.addEventListener(NNDDDownloader.THUMB_INFO_GET_SUCCESS, getProgressListener);
841     renewDownloadManager.addEventListener(NNDDDownloader.VIDEO_GET_SUCCESS, getProgressListener);
842     renewDownloadManager.addEventListener(NNDDDownloader.WATCH_SUCCESS, getProgressListener);
843     renewDownloadManager.addEventListener(NNDDDownloader.DOWNLOAD_PROCESS_COMPLETE, getProgressListener);
844    
845     renewDownloadManager.addEventListener(NNDDDownloader.COMMENT_GET_FAIL, getFailListener);
846     renewDownloadManager.addEventListener(NNDDDownloader.GETFLV_API_ACCESS_FAIL, getFailListener);
847     renewDownloadManager.addEventListener(NNDDDownloader.ICHIBA_INFO_GET_FAIL, getFailListener);
848     renewDownloadManager.addEventListener(NNDDDownloader.LOGIN_FAIL, getFailListener);
849     renewDownloadManager.addEventListener(NNDDDownloader.NICOWARI_GET_FAIL, getFailListener);
850     renewDownloadManager.addEventListener(NNDDDownloader.OWNER_COMMENT_GET_FAIL, getFailListener);
851     renewDownloadManager.addEventListener(NNDDDownloader.THUMB_IMG_GET_FAIL, getFailListener);
852     renewDownloadManager.addEventListener(NNDDDownloader.THUMB_INFO_GET_FAIL, getFailListener);
853     renewDownloadManager.addEventListener(NNDDDownloader.VIDEO_GET_FAIL, getFailListener);
854     renewDownloadManager.addEventListener(NNDDDownloader.WATCH_FAIL, getFailListener);
855    
856     renewDownloadManager.addEventListener(RenewDownloadManager.PROCCESS_FAIL, function(event:Event):void{
857     renewDownloadManager = null;
858     videoPlayer.label_downloadStatus.text = Message.FAIL_PLAY_EACH_COMMENT_DOWNLOAD;
859     logManager.addLog(Message.FAIL_PLAY_EACH_COMMENT_DOWNLOAD);
860    
861     var timer:Timer = new Timer(1000, 1);
862     timer.addEventListener(TimerEvent.TIMER_COMPLETE, function(event:Event):void{
863     myListGroupUpdate(PathMaker.getVideoID(_videoID));
864     initStart();
865     });
866     timer.start();
867     });
868     renewDownloadManager.addEventListener(RenewDownloadManager.PROCCESS_CANCEL, function(event:Event):void{
869     renewDownloadManager = null;
870     videoPlayer.label_downloadStatus.text = Message.PLAY_EACH_COMMENT_DOWNLOAD_CANCEL;
871     logManager.addLog(Message.PLAY_EACH_COMMENT_DOWNLOAD_CANCEL);
872    
873     var timer:Timer = new Timer(1000, 1);
874     timer.addEventListener(TimerEvent.TIMER_COMPLETE, function():void{
875     myListGroupUpdate(PathMaker.getVideoID(_videoID));
876     initStart();
877     });
878     timer.start();
879     });
880    
881     if(this.videoInfoView.isRenewOtherCommentWithCommentEachPlay){
882     renewDownloadManager.renewForOtherVideo(this.mailAddress,
883     this.password, PathMaker.getVideoID(videoId), videoName,
884     new File(videoPath.substring(0, videoPath.lastIndexOf("/")+1)),
885     videoInfoView.isAppendComment, null, Application.application.getSaveCommentMaxCount());
886     }else{
887     renewDownloadManager.renewForCommentOnly(this.mailAddress,
888     this.password, PathMaker.getVideoID(videoId), videoName,
889     new File(videoPath.substring(0, videoPath.lastIndexOf("/")+1)),
890     videoInfoView.isAppendComment, null, Application.application.getSaveCommentMaxCount());
891     }
892     }
893    
894     /**
895     * ���������������������������������
896     * @param date
897     *
898     */
899     public function getOldCommentFromNico(date:Date):void{
900    
901     if(renewDownloadManagerForOldComment != null){
902     // ���������������������������
903     renewDownloadManagerForOldComment.close();
904     renewDownloadManagerForOldComment = null;
905     videoInfoView.button_oldComment_reloadFromNico.label = "������(������������������)";
906     logManager.addLog("���������������������������������");
907    
908     }else{
909     // ������������
910    
911     videoInfoView.button_oldComment_reloadFromNico.label = "���������������";
912     logManager.addLog("������������������������������:" + DateUtil.getDateString(date));
913    
914     renewDownloadManagerForOldComment = new RenewDownloadManager(null, LogManager.instance);
915     renewDownloadManagerForOldComment.addEventListener(NNDDDownloader.GETWAYBACKKEY_API_ACCESS_FAIL, function(event:Event):void{
916     videoInfoView.button_oldComment_reloadFromNico.label = "������(������������������)";
917     logManager.addLog("������������������������������:" + event);
918    
919     Application.application.activate();
920     Alert.show("���������������������������������������������\n���������������������������������������������������������������������������������������������\n(���������������������������������������������������������������������������)", Message.M_ERROR);
921     });
922     renewDownloadManagerForOldComment.addEventListener(RenewDownloadManager.PROCCESS_CANCEL, function(event:Event):void{
923     videoInfoView.button_oldComment_reloadFromNico.label = "������(������������������)";
924     logManager.addLog("���������������������������������������:" + event);
925    
926     renewDownloadManagerForOldComment = null;
927     });
928     renewDownloadManagerForOldComment.addEventListener(RenewDownloadManager.PROCCESS_COMPLETE, function(event:Event):void{
929     logManager.addLog("������������������������������:" + event);
930     //������������������������������
931     reloadLocalComment(date);
932    
933     renewDownloadManagerForOldComment.close();
934     renewDownloadManagerForOldComment = null;
935    
936     videoInfoView.button_oldComment_reloadFromNico.label = "������(������������������)";
937    
938     });
939     renewDownloadManagerForOldComment.addEventListener(RenewDownloadManager.PROCCESS_FAIL, function(event:Event):void{
940     videoInfoView.button_oldComment_reloadFromNico.label = "������(������������������)";
941     logManager.addLog("������������������������������:" + event);
942    
943     renewDownloadManagerForOldComment = null;
944    
945     Application.application.activate();
946     Alert.show("���������������������������������������������", Message.M_ERROR);
947     });
948    
949     var videoId:String = PathMaker.getVideoID(this._videoID);
950     var videoName:String = null;
951     var videoPath:File = null;
952     if(isStreamingPlay){
953     videoName = "nndd.flv";
954     videoPath = LibraryManagerBuilder.instance.libraryManager.tempDir;
955     }else{
956     videoName = PathMaker.getVideoName(this.source);
957     videoPath = new File(this.source.substring(0, this.source.lastIndexOf("/")+1))
958     }
959    
960     // maxCount���������������������������������������������������������������������������������������������
961     var maxCount:Number = Application.application.getSaveCommentMaxCount();
962     if(maxCount < 10000){
963     maxCount = 10000;
964     }
965    
966     // ���������������������������������������������������������������������
967     renewDownloadManagerForOldComment.renewForCommentOnly(this.mailAddress,
968     this.password, videoId, videoName, videoPath, true,
969     date, maxCount);
970    
971     }
972    
973     }
974    
975     /**
976     *
977     * @param event
978     *
979     */
980     protected function metadetaRecevedEventHandler(event:Event):void{
981     trace(event.type);
982     if(videoInfoView.isResizePlayerEachPlay){
983     resizePlayerJustVideoSize(videoPlayer.nowRatio);
984     }else{
985     resizePlayerJustVideoSize();
986     }
987     }
988    
989     /**
990     *
991     * @param videoId
992     * @return
993     *
994     */
995     public function myListGroupUpdate(videoId:String):void{
996    
997     myListLoader = new MyListLoader();
998     myListLoader.addEventListener(MyListLoader.GET_MYLISTGROUP_SUCCESS, function(event:Event):void{
999     var myLists:Array = myListLoader.getMyLists();
1000    
1001     if(myLists.length > 0){
1002     var myListNames:Array = new Array();
1003     var myListIds:Array = new Array();
1004    
1005     for each(var array:Array in myLists){
1006     myListNames.push(array[0]);
1007     myListIds.push(array[1]);
1008     }
1009    
1010     videoInfoView.setMyLists(myListNames, myListIds);
1011     }
1012     myListLoader.close();
1013     });
1014     myListLoader.addEventListener(MyListLoader.GET_MYLISTGROUP_FAILURE, function(event:ErrorEvent):void{
1015     myListLoader.close();
1016     logManager.addLog("���������������������������������������:" + event + ":" + event.text);
1017     });
1018     myListLoader.getMyListGroup(videoId);
1019    
1020     }
1021    
1022    
1023     /**
1024     *
1025     * @param event
1026     *
1027     */
1028     private function bufferingHandler(event:VideoEvent):void{
1029     if(videoDisplay != null && !isPlayerClosing){
1030     if(event.state != VideoEvent.BUFFERING){
1031     videoPlayer.label_downloadStatus.text = "";
1032     videoDisplay.removeEventListener(VideoEvent.PLAYHEAD_UPDATE, bufferingHandler);
1033     if(commentTimer != null && !commentTimer.running){
1034     time = (new Date).time;
1035     commentTimer.start();
1036     }
1037     }
1038     }else{
1039     (event.currentTarget as VideoDisplay).stop();
1040     (event.currentTarget as VideoDisplay).removeEventListener(VideoEvent.PLAYHEAD_UPDATE, bufferingHandler);
1041     destructor();
1042     }
1043     }
1044    
1045     /**
1046     *
1047     * @param event
1048     *
1049     */
1050     private function convertCompleteHandler(event:Event):void{
1051    
1052     isSwfConverting = false;
1053    
1054     if(loader != null && !isPlayerClosing){
1055    
1056     mc = LoaderInfo(event.currentTarget).loader.content as MovieClip;
1057     swfFrameRate = LoaderInfo(event.currentTarget).loader.contentLoaderInfo.frameRate;
1058     setVolume(videoPlayer.videoController.slider_volume.value);
1059    
1060     if(videoInfoView.isResizePlayerEachPlay){
1061     resizePlayerJustVideoSize(videoPlayer.nowRatio);
1062     }else{
1063     resizePlayerJustVideoSize();
1064     }
1065    
1066     videoPlayer.label_downloadStatus.text = "";
1067    
1068     commentTimer.start();
1069     time = (new Date).time;
1070    
1071     }else{
1072    
1073     if(mc != null){
1074     mc.stop();
1075     }
1076     destructor();
1077     if(event.currentTarget as LoaderInfo){
1078     LoaderInfo(event.currentTarget).loader.unloadAndStop(true);
1079     }
1080    
1081     }
1082    
1083     LoaderInfo(event.currentTarget).loader.removeEventListener(Event.COMPLETE, convertCompleteHandler);
1084    
1085     }
1086    
1087     /**
1088     * ���������������������������������������������������������������������
1089     *
1090     * @param videoPath
1091     * @param windowType
1092     * @param comments
1093     * @param ngList
1094     * @param playList ���������������������m3u���������
1095     * @param videoNameList ���������������������������������URL���������������������������������������������������������������������������������
1096     * @param playingIndex ������������������������������
1097     * @param autoPlay ������������
1098     * @param isStreamingPlay ���������������������������������������
1099     * @param downLoadedURL ���������������������URL
1100     * @return
1101     *
1102     */
1103     private function initWithPlayList(videoPath:String, windowType:int, comments:Comments, playList:Array, videoNameList:Array, playListName:String, playingIndex:int,
1104     autoPlay:Boolean = false, isStreamingPlay:Boolean = false, downLoadedURL:String = null, videoTitle:String = null):void{
1105    
1106     // this.streamingRetryCount = 0;
1107    
1108     this.playingIndex = playingIndex;
1109     this.isPlayListingPlay = true;
1110     var videoNameArray:Array = videoNameList;
1111     if(videoNameArray == null){
1112     videoNameArray = new Array();
1113     for(var i:int; i<playList.length; i++){
1114     var url:String = playList[i];
1115     videoNameArray.push(url.substring(url.lastIndexOf("/") + 1));
1116     }
1117     }
1118    
1119     if(downLoadedURL == null){
1120     downLoadedURL = videoPath;
1121     }
1122    
1123     this.videoInfoView.resetPlayList();
1124     this.videoInfoView.setPlayList(playList, videoNameArray, playListName);
1125    
1126     trace("\t"+playList);
1127    
1128     this.init(videoPath, windowType, comments, PathMaker.createThmbInfoPathByVideoPath(downLoadedURL), autoPlay, isStreamingPlay, videoTitle, true, LibraryUtil.getVideoKey(videoTitle));
1129     }
1130    
1131     /**
1132     * VideoPlayer������������������������������������������������������������������������������
1133     *
1134     * @param url
1135     * @param index
1136     * @return
1137     *
1138     */
1139     public function initForVideoPlayer(url:String, index:int):void{
1140     playMovie(url, this.videoInfoView.playList, index, PathMaker.getVideoName(this.videoInfoView.getPlayListUrl(index)));
1141     }
1142    
1143     /**
1144     * videoDisplay���������������������������������������������������������������������������������������������
1145     * ���������������������������������������������������������������
1146     */
1147     public function resizePlayerJustVideoSize(windowSizeRatio:Number = -1):void{
1148    
1149     try{
1150     var ratio:Number = 1;
1151     if(windowSizeRatio != -1){
1152     ratio = windowSizeRatio;
1153     }
1154    
1155     //������������������������������
1156     var videoWindowHeight:int = PlayerController.NICO_VIDEO_WINDOW_HEIGHT * ratio;
1157     var videoWindowWidth:int = PlayerController.NICO_VIDEO_WINDOW_WIDTH * ratio;
1158    
1159     //���������������������������������
1160     var nicowariWindowHeight:int = PlayerController.NICO_WARI_HEIGHT * ratio;
1161     var nicowariWindowWidth:int = PlayerController.NICO_WARI_WIDTH * ratio;
1162    
1163     //InfoView���������������������������������������
1164     if(isPlayListingPlay){
1165     if(this.videoInfoView != null){
1166     videoInfoView.showPlayingTitle(playingIndex);
1167     }
1168     }
1169    
1170     //���������������������������������������
1171     if(this.videoPlayer.stage != null && this.videoPlayer.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE){
1172     //������������������������������������������ ������������������������������������������������������������
1173     if(this.videoInfoView.isResizePlayerEachPlay || windowSizeRatio != -1){
1174    
1175     if(this.windowType == PlayerController.WINDOW_TYPE_FLV && this.videoDisplay != null){
1176     //FLV������������
1177    
1178     if(this.videoInfoView.selectedResizeType == VideoInfoView.RESIZE_TYPE_NICO && this.videoDisplay.videoHeight > 0){
1179    
1180     //��������������������������������������������������������������� && ��������������������������������������������������� (���������������������������������������������������������������������������������)
1181     var isWideVideo:Boolean = false;
1182     if(WIDE_MODE_ASPECT_RATIO < Number(this.videoDisplay.videoWidth)/Number(this.videoDisplay.videoHeight)){
1183     // ���������������16:9���
1184     isWideVideo = true;
1185     trace("enable 16:9 mode");
1186     }
1187    
1188     videoWindowHeight = PlayerController.NICO_VIDEO_WINDOW_HEIGHT * ratio;
1189     if(this.videoInfoView.isEnableWideMode && isWideVideo){
1190     // logManager.addLog("���������(16:9)���������");
1191     videoWindowWidth = PlayerController.NICO_VIDEO_WINDOW_WIDTH_WIDE_MODE * ratio;
1192     //������������������������������������������
1193     this.videoDisplay.setConstraintValue("left", (PlayerController.NICO_VIDEO_WINDOW_WIDTH - PlayerController.NICO_SWF_WIDTH)/2);
1194     this.videoDisplay.setConstraintValue("right", (PlayerController.NICO_VIDEO_WINDOW_WIDTH - PlayerController.NICO_SWF_WIDTH)/2);
1195    
1196     }else{
1197     // logManager.addLog("������������(4:3)���������");
1198     videoWindowWidth = PlayerController.NICO_VIDEO_WINDOW_WIDTH * ratio;
1199     //������������������������������������������
1200     this.videoDisplay.setConstraintValue("left", (PlayerController.NICO_VIDEO_WINDOW_WIDTH - PlayerController.NICO_SWF_WIDTH)/2);
1201     this.videoDisplay.setConstraintValue("right", (PlayerController.NICO_VIDEO_WINDOW_WIDTH - PlayerController.NICO_SWF_WIDTH)/2);
1202    
1203     }
1204    
1205     if(videoDisplay.hasEventListener(MetadataEvent.METADATA_RECEIVED)){
1206     //init������������������������������������������������������������������������������������������������������������������
1207     videoDisplay.removeEventListener(MetadataEvent.METADATA_RECEIVED, metadetaRecevedEventHandler);
1208     // resizePlayerJustVideoSize(windowSizeRatio);
1209     }
1210    
1211     }else if(this.videoInfoView.selectedResizeType == VideoInfoView.RESIZE_TYPE_VIDEO && this.videoDisplay.videoHeight > 0){
1212    
1213     //���������������������������������������������������������������������(videoHeight���0���������������������������������������������������������������������)
1214    
1215     videoWindowHeight = this.videoDisplay.videoHeight * ratio;
1216     videoWindowWidth = this.videoDisplay.videoWidth * ratio;
1217    
1218     this.videoDisplay.setConstraintValue("bottom", 0);
1219     this.videoDisplay.setConstraintValue("left", 0);
1220     this.videoDisplay.setConstraintValue("right", 0);
1221     this.videoDisplay.setConstraintValue("top", 0);
1222    
1223     if(videoDisplay.hasEventListener(MetadataEvent.METADATA_RECEIVED)){
1224     //init������������������������������������������������������������������������������������������������������������������
1225     videoDisplay.removeEventListener(MetadataEvent.METADATA_RECEIVED, metadetaRecevedEventHandler);
1226     // resizePlayerJustVideoSize(windowSizeRatio);
1227     }
1228     }else{
1229     //������������������������������������������������
1230     return;
1231     }
1232    
1233     }else if(this.windowType == PlayerController.WINDOW_TYPE_SWF){
1234     //SWF������������
1235    
1236     //SWF���������������������������������������
1237     videoWindowHeight = PlayerController.NICO_VIDEO_WINDOW_HEIGHT * ratio;
1238     videoWindowWidth = PlayerController.NICO_VIDEO_WINDOW_WIDTH * ratio;
1239    
1240     }
1241    
1242     //TODO ���������������VideoDisplay���������������������������������������������������������������
1243    
1244     var rate:Number = PlayerController.NICO_WARI_WIDTH / PlayerController.NICO_WARI_HEIGHT;
1245     if(videoPlayer.canvas_nicowari.height < 1 ){
1246     //������������������������������������������������������������������������������������
1247     videoWindowHeight += int(videoWindowWidth / rate);
1248     }
1249    
1250     this.videoPlayer.nativeWindow.height += int(videoWindowHeight - this.videoPlayer.canvas_video_back.height);
1251     this.videoPlayer.nativeWindow.width += int(videoWindowWidth - this.videoPlayer.canvas_video_back.width);
1252    
1253     (this.videoPlayer as Window).validateDisplayList();
1254     (this.videoPlayer as Window).validateNow();
1255    
1256     //������������������������������������������������������������������������������������������������������������������
1257     // var diffH:int = this.videoPlayer.nativeWindow.height - this.videoPlayer.stage.stageHeight;
1258     // var diffW:int = this.videoPlayer.nativeWindow.width - this.videoPlayer.stage.stageWidth;
1259    
1260     }
1261    
1262     }
1263    
1264     }catch(error:Error){ //������������������������������������������������������������������������������������������
1265     trace(error.getStackTrace());
1266     logManager.addLog("������������������������������������������:" + error + ", " + error.getStackTrace());
1267     stop();
1268     destructor();
1269     }
1270     }
1271    
1272    
1273     /**
1274     * ������������������������������������������������������������������
1275     * ���������������������������������������������������������������������������������������������
1276     * @return
1277     *
1278     */
1279     public function play():void
1280     {
1281     try{
1282     videoPlayer.canvas_video_back.setFocus();
1283    
1284     var newComments:Comments = null;
1285     videoPlayer.canvas_video.toolTip = null;
1286     if(this.windowType == PlayerController.WINDOW_TYPE_FLV){
1287     if(videoDisplay != null && videoDisplay.playing){
1288     videoPlayer.videoController.button_play.setStyle("icon", icon_Play);
1289     videoPlayer.videoController_under.button_play.setStyle("icon", icon_Play);
1290     this.commentTimer.stop();
1291     this.commentTimer.reset();
1292     videoDisplay.pause();
1293     pausing = true;
1294     }else{
1295     videoPlayer.videoController.button_play.setStyle("icon", icon_Pause);
1296     videoPlayer.videoController_under.button_play.setStyle("icon", icon_Pause);
1297     if(pausing){
1298     this.videoPlayer.videoController.slider_timeline.enabled = true;
1299     this.videoPlayer.videoController_under.slider_timeline.enabled = true;
1300     this.videoDisplay.play();
1301     this.time = (new Date).time;
1302     this.commentTimer.start();
1303     }else{
1304     this.videoPlayer.videoController.slider_timeline.enabled = true;
1305     this.videoPlayer.videoController_under.slider_timeline.enabled = true;
1306     if(!isStreamingPlay){
1307     newComments = new Comments(PathMaker.createNomalCommentPathByVideoPath(source),
1308     PathMaker.createOwnerCommentPathByVideoPath(source), this.videoPlayer.getCommentListProvider(),
1309     this.videoPlayer.videoInfoView.ownerCommentProvider, this.ngListManager,
1310     this.videoInfoView.isShowOnlyPermissionComment, this.videoInfoView.isHideSekaShinComment,
1311     this.videoInfoView.showCommentCount, this.videoInfoView.isNgUpEnable);
1312     init(source, PlayerController.WINDOW_TYPE_FLV, newComments, PathMaker.createThmbInfoPathByVideoPath(source), true, isStreamingPlay, null, this.isPlayListingPlay, this._videoID);
1313     }else{
1314     this.playMovie(source, null, -1, this.downLoadedURL);
1315     }
1316     }
1317     pausing = false;
1318     }
1319     }else if(this.windowType == PlayerController.WINDOW_TYPE_SWF){
1320     if(isMovieClipPlaying){
1321     videoPlayer.videoController.button_play.setStyle("icon", icon_Play);
1322     videoPlayer.videoController_under.button_play.setStyle("icon", icon_Play);
1323     this.commentTimer.stop();
1324     this.commentTimer.reset();
1325     mc.stop();
1326     isMovieClipPlaying = false;
1327     pausing = true;
1328     }else{
1329     videoPlayer.videoController.button_play.setStyle("icon", icon_Pause);
1330     videoPlayer.videoController_under.button_play.setStyle("icon", icon_Pause);
1331     if(pausing){
1332     this.videoPlayer.videoController.slider_timeline.enabled = true;
1333     this.videoPlayer.videoController_under.slider_timeline.enabled = true;
1334     mc.play();
1335     isMovieClipPlaying = true;
1336     this.time = (new Date).time;
1337     this.commentTimer.start();
1338     }else{
1339     this.videoPlayer.canvas_video.removeAllChildren();
1340     this.videoPlayer.videoController.slider_timeline.enabled = true;
1341     this.videoPlayer.videoController_under.slider_timeline.enabled = true;
1342     if(!isStreamingPlay){
1343     newComments = new Comments(PathMaker.createNomalCommentPathByVideoPath(source),
1344     PathMaker.createOwnerCommentPathByVideoPath(source), this.videoPlayer.getCommentListProvider(),
1345     this.videoPlayer.videoInfoView.ownerCommentProvider, this.ngListManager,
1346     this.videoInfoView.isShowOnlyPermissionComment, this.videoInfoView.isHideSekaShinComment,
1347     this.videoInfoView.showCommentCount, this.videoInfoView.isNgUpEnable);
1348     init(source, PlayerController.WINDOW_TYPE_SWF, newComments, PathMaker.createThmbInfoPathByVideoPath(source), true, isStreamingPlay, null, this.isPlayListingPlay, this._videoID);
1349     }else{
1350     this.playMovie(source, null, -1, this.downLoadedURL);
1351     }
1352     }
1353     pausing = false;
1354     }
1355     }else{
1356     if(this.videoPlayer != null && this.videoPlayer.title != null){
1357     this.playMovie(this.videoPlayer.title);
1358     }
1359     }
1360    
1361     }catch(error:Error){
1362     trace(error.getStackTrace());
1363     logManager.addLog("���������������������������:" + error + ":" + error.getStackTrace());
1364     }
1365    
1366     }
1367    
1368    
1369     /**
1370     * ������������������������������������������������
1371     * @return
1372     *
1373     */
1374     public function stop():void
1375     {
1376     try{
1377    
1378     pausing = false;
1379    
1380     if(videoInfoView.isShowAlwaysNicowariArea){
1381     videoPlayer.showNicowariArea();
1382     }else{
1383     videoPlayer.hideNicowariArea();
1384     }
1385    
1386     if(videoPlayer != null && videoPlayer.label_downloadStatus != null){
1387     videoPlayer.canvas_video_back.setFocus();
1388     videoPlayer.label_downloadStatus.text = "";
1389     videoPlayer.canvas_video.toolTip = "���������������������������������������������������������������������������������";
1390     }
1391    
1392     if(this.movieEndTimer != null){
1393     this.movieEndTimer.stop();
1394     this.movieEndTimer = null;
1395     }
1396    
1397     if(renewDownloadManager != null){
1398     try{
1399     renewDownloadManager.close();
1400     renewDownloadManager = null;
1401     logManager.addLog("���������������������������������������������������������");
1402     }catch(error:Error){
1403     trace(error);
1404     }
1405     }else{
1406    
1407     this.videoPlayer.videoController.button_play.enabled = true;
1408     this.videoPlayer.videoController_under.button_play.enabled = true;
1409     videoPlayer.videoController.button_play.setStyle("icon", icon_Play);
1410     videoPlayer.videoController_under.button_play.setStyle("icon", icon_Play);
1411    
1412     this.videoPlayer.videoController_under.slider_timeline.value = 0;
1413     this.videoPlayer.videoController.slider_timeline.value = 0;
1414    
1415     this.commentTimerVpos = 0;
1416     this.commentTimer.stop();
1417     this.commentTimer.reset();
1418     this.commentManager.removeAll();
1419    
1420     //���������������������������������������������
1421     this.destructor();
1422    
1423     //������������������������������������������������������
1424     videoPlayer.canvas_nicowari.removeAllChildren();
1425     if(nicowariMC != null){
1426     this.pauseByNicowari(true);
1427     }
1428    
1429     }
1430    
1431     }catch(error:Error){
1432     trace(error.getStackTrace());
1433     logManager.addLog("������������������������������������������:" + error + ":" + error.getStackTrace());
1434     }
1435    
1436     }
1437    
1438    
1439     /**
1440     * VideoDisplay���������������������������������������������������������
1441     * @param videoDisplay
1442     *
1443     */
1444     private function addVideoDisplayEventListeners(videoDisplay:VideoDisplay):void{
1445     videoDisplay.addEventListener(VideoEvent.PLAYHEAD_UPDATE, videoProgressHandler);
1446     videoDisplay.addEventListener(VideoEvent.COMPLETE, videoCompleteHandler);
1447     }
1448    
1449     /**
1450     * VideoDisplay���������������������������������������������������������
1451     * @param videoDisplay
1452     *
1453     */
1454     private function removeVideoDisplayEventListeners(videoDisplay:VideoDisplay):void{
1455     if(videoDisplay.hasEventListener(VideoEvent.PLAYHEAD_UPDATE)){
1456     videoDisplay.removeEventListener(VideoEvent.PLAYHEAD_UPDATE, videoProgressHandler);
1457     }
1458     if(videoDisplay.hasEventListener(VideoEvent.STATE_CHANGE)){
1459     videoDisplay.removeEventListener(VideoEvent.STATE_CHANGE, resizePlayerJustVideoSize);
1460     }
1461     if(videoDisplay.hasEventListener(VideoEvent.COMPLETE)){
1462     videoDisplay.removeEventListener(VideoEvent.COMPLETE, videoCompleteHandler);
1463     }
1464     }
1465    
1466     /**
1467     *
1468     * @param loader
1469     *
1470     */
1471     // private function removeMovieClipEventHandlers(loader:Loader):void{
1472     // if(loader.hasEventListener(Event.COMPLETE)){
1473     // loader.removeEventListener(Event.COMPLETE, convertCompleteHandler);
1474     // }
1475     // }
1476    
1477     /**
1478     * ������������������������������������������������������������������������������
1479     * @return
1480     *
1481     */
1482     public function getStreamingProgress():int{
1483     var value:int = 0;
1484     if(isStreamingPlay){
1485     if(videoDisplay != null){
1486     value = (videoDisplay.bytesLoaded*100 / videoDisplay.bytesTotal);
1487     }else if(loader != null && loader.contentLoaderInfo != null){
1488     value = (loader.contentLoaderInfo.bytesLoaded*100 / loader.contentLoaderInfo.bytesTotal);
1489     }else{
1490     value = 100;
1491     }
1492     }else{
1493     value = 100;
1494     }
1495     return value;
1496     }
1497    
1498     /**
1499     *
1500     * @return
1501     *
1502     */
1503     public function get bytesLoaded():Number{
1504    
1505     var value:Number = 0.0;
1506    
1507     if(videoDisplay != null){
1508     value = videoDisplay.bytesLoaded;
1509     }else if(loader != null && loader.contentLoaderInfo != null){
1510     value = loader.contentLoaderInfo.bytesLoaded;
1511     }
1512    
1513     return value;
1514     }
1515    
1516     /**
1517     *
1518     * @param event
1519     *
1520     */
1521     private function streamingProgressHandler(event:TimerEvent):void{
1522     if(isStreamingPlay){
1523     var value:int = getStreamingProgress();
1524     if(value >= 100){
1525     this.videoPlayer.label_playSourceStatus.text = "Streaming:100%";
1526     streamingProgressCount = 0;
1527     videoPlayer.videoController.resetStatusAlpha();
1528     if(streamingProgressTimer != null){
1529     streamingProgressTimer.stop();
1530     }
1531    
1532     // 100%���������������������������������������������������������������������������������������
1533     if(this.bytesLoaded <= 64){
1534     if(this.streamingRetryCount <= 3 ){
1535     // ���������������
1536     this.streamingRetryCount++;
1537     stop();
1538     logManager.addLog("���������������������������������������(���������������������������:������������������������������:" + this.bytesLoaded + ")");
1539     videoPlayer.label_downloadStatus.text = "������������������������������������������������������������������(" + this.streamingRetryCount +"������ )";
1540    
1541     if(nicoVideoAccessRetryTimer != null){
1542     nicoVideoAccessRetryTimer.stop();
1543     nicoVideoAccessRetryTimer = null;
1544     }
1545     nicoVideoAccessRetryTimer = new Timer(1000*this.streamingRetryCount, 1);
1546     nicoVideoAccessRetryTimer.addEventListener(TimerEvent.TIMER_COMPLETE, function(event:Event):void{
1547     (event.currentTarget as Timer).stop();
1548     play();
1549     });
1550     nicoVideoAccessRetryTimer.start();
1551    
1552     }else{
1553     stop();
1554     logManager.addLog("���������������������������:������������������������������:" + this.bytesLoaded);
1555     videoPlayer.label_downloadStatus.text = "���������������������������������������������(���������������������������������������������������)";
1556     }
1557     }else{
1558     // ������������������
1559     this.streamingRetryCount = 0;
1560     }
1561    
1562     }else{
1563    
1564     var str:String = " ";
1565     if(streamingProgressCount <= 10){
1566     str = ". ";
1567     }else if(streamingProgressCount > 10 && streamingProgressCount <= 20){
1568     str = ".. ";
1569     }else if(streamingProgressCount > 20 && streamingProgressCount <= 30){
1570     str = "...";
1571     }
1572    
1573     this.videoPlayer.label_playSourceStatus.text = "Streaming:" + value + "%" + str;
1574     if(streamingProgressCount >= 30){
1575     streamingProgressCount = 0;
1576     }else{
1577     streamingProgressCount = streamingProgressCount + 2;
1578     }
1579     }
1580     }else{
1581     if(streamingProgressTimer != null){
1582     streamingProgressTimer.stop();
1583     }
1584     }
1585     }
1586    
1587     /**
1588     * ������������������������������������������������������
1589     * @param evt
1590     *
1591     */
1592     private function videoProgressHandler(evt:VideoEvent = null):void{
1593     try{
1594     var allSec:String="00",allMin:String="0";
1595     var nowSec:String="00",nowMin:String="0";
1596    
1597     this.commentTimerVpos = evt.playheadTime*1000;
1598    
1599     nowSec = String(int(this.videoDisplay.playheadTime%60));
1600     nowMin = String(int(this.videoDisplay.playheadTime/60));
1601    
1602     allSec = String(int(this.videoDisplay.totalTime%60));
1603     allMin = String(int(this.videoDisplay.totalTime/60));
1604    
1605     if(nowSec.length == 1){
1606     nowSec = "0" + nowSec;
1607     }
1608     if(allSec.length == 1){
1609     allSec = "0" + allSec;
1610     }
1611    
1612     videoPlayer.videoController_under.slider_timeline.enabled = true;
1613     videoPlayer.videoController_under.slider_timeline.minimum = 0;
1614     videoPlayer.videoController_under.slider_timeline.maximum = videoDisplay.totalTime;
1615     if(!this.sliderChanging){
1616    
1617     this.videoPlayer.videoController.slider_timeline.maximum = videoDisplay.totalTime;
1618     this.videoPlayer.videoController_under.slider_timeline.maximum = videoDisplay.totalTime;
1619     videoPlayer.videoController_under.slider_timeline.value = videoDisplay.playheadTime;
1620    
1621     }
1622     videoPlayer.videoController_under.label_time.text = nowMin + ":" + nowSec + "/" + allMin + ":" + allSec;
1623     videoPlayer.videoController_under.slider_timeline.enabled = true;
1624    
1625     videoPlayer.videoController.slider_timeline.enabled = true;
1626     videoPlayer.videoController.slider_timeline.minimum = 0;
1627     videoPlayer.videoController.slider_timeline.maximum = videoDisplay.totalTime;
1628     if(!this.sliderChanging){
1629     videoPlayer.videoController.slider_timeline.value = videoDisplay.playheadTime;
1630     }
1631     videoPlayer.videoController.label_time.text = nowMin + ":" + nowSec + "/" + allMin + ":" + allSec;
1632     videoPlayer.videoController.slider_timeline.enabled = true;
1633     }catch(error:Error){
1634     VideoDisplay(evt.currentTarget).stop();
1635     trace(error.getStackTrace());
1636     }
1637     }
1638    
1639     /**
1640     * ������������������������������������������������������������������������
1641     * @param evt
1642     *
1643     */
1644     private function videoCompleteHandler(evt:VideoEvent = null):void{
1645    
1646     if(movieEndTimer != null){
1647     movieEndTimer.stop();
1648     movieEndTimer = null;
1649     }
1650     //���������������������������������������������������������
1651     movieEndTimer = new Timer(2000, 1);
1652     movieEndTimer.addEventListener(TimerEvent.TIMER_COMPLETE, videoPlayCompleteWaitHandler);
1653     movieEndTimer.start();
1654    
1655     }
1656    
1657     /**
1658     *
1659     *
1660     */
1661     private function videoPlayCompleteWaitHandler(event:TimerEvent):void{
1662     if(!isCounted){
1663     //���������������������
1664     var videoId:String = LibraryUtil.getVideoKey(this.videoPlayer.title);
1665     if(videoId != null){
1666     addVideoPlayCount(videoId, true);
1667     }
1668     isCounted = true;
1669     }
1670    
1671     logManager.addLog("***���������������***");
1672    
1673     if(videoPlayer.isRepeat){
1674     if(isPlayListingPlay){
1675     if(isStreamingPlay){
1676     logManager.addLog("***���������������������(���������������������)***");
1677     this.seek(0);
1678     if(this.videoDisplay != null){
1679     this.videoDisplay.play();
1680     }
1681     }else{
1682     logManager.addLog("***���������������������(������������)***");
1683     this.stop();
1684     playMovie(this.videoInfoView.getPlayListUrl(playingIndex), this.videoInfoView.playList, playingIndex, this.videoPlayer.title);
1685    
1686     }
1687     }else if(isStreamingPlay){
1688     logManager.addLog("***���������������������(���������������������)***");
1689     this.seek(0);
1690     if(this.videoDisplay != null){
1691     this.videoDisplay.play();
1692     }
1693     }else{
1694     logManager.addLog("***���������������������(������������)***");
1695     this.stop();
1696     this.play();
1697     }
1698     }else{
1699     this.stop();
1700     if(isPlayListingPlay){
1701     logManager.addLog("***���������������(������������)***");
1702     var windowType:int = PlayerController.WINDOW_TYPE_FLV;
1703     if(playingIndex >= this.videoInfoView.getPlayList().length-1){
1704     playingIndex = 0;
1705     if(this.videoPlayer.videoInfoView.isRepeatAll()){
1706     playMovie(this.videoInfoView.getPlayListUrl(playingIndex), this.videoInfoView.playList,
1707     playingIndex, PathMaker.getVideoName(this.videoInfoView.getPlayListUrl(playingIndex)));
1708     }
1709     }else{
1710     playingIndex++;
1711     playMovie(this.videoInfoView.getPlayListUrl(playingIndex), this.videoInfoView.playList,
1712     playingIndex, PathMaker.getVideoName(this.videoInfoView.getPlayListUrl(playingIndex)));
1713     }
1714     }
1715     }
1716     }
1717    
1718    
1719     /**
1720     * SWF������������������������������������������������������������������
1721     *
1722     */
1723     private function movieClipCompleteHandler():void{
1724    
1725     this.lastFrame = 0;
1726     this.lastNicowariFrame = 0;
1727    
1728     if(movieEndTimer != null){
1729     movieEndTimer.stop();
1730     movieEndTimer = null;
1731     }
1732     //���������������������������������������������������������
1733     movieEndTimer = new Timer(2000, 1);
1734     movieEndTimer.addEventListener(TimerEvent.TIMER_COMPLETE, movieClipPlayCompleteWaitHandler);
1735     movieEndTimer.start();
1736    
1737    
1738     }
1739    
1740     /**
1741     *
1742     *
1743     */
1744     private function movieClipPlayCompleteWaitHandler(event:TimerEvent):void{
1745     if(!isCounted){
1746     //���������������������
1747     var videoId:String = LibraryUtil.getVideoKey(this.source);
1748     if(videoId == null){
1749     //���������������������������������������������������������
1750     videoId = LibraryUtil.getVideoKey(this.videoPlayer.title);
1751     }
1752     if(videoId != null){
1753     addVideoPlayCount(videoId, true);
1754     }
1755     isCounted = true;
1756     }
1757    
1758     logManager.addLog("***���������������***");
1759     this.lastFrame = 0;
1760     this.lastNicowariFrame = 0;
1761    
1762     if(videoPlayer.isRepeat){
1763     if(isPlayListingPlay){
1764     if(isStreamingPlay){
1765     logManager.addLog("***���������������������(���������������������)***");
1766     this.seek(0);
1767     }else{
1768     logManager.addLog("***���������������������(������������)***");
1769     this.stop();
1770     mc.gotoAndStop(0);
1771     playMovie(this.videoInfoView.getPlayListUrl(playingIndex), this.videoInfoView.playList,
1772     playingIndex, this.videoPlayer.title);
1773     }
1774     }else if(isStreamingPlay){
1775     logManager.addLog("***���������������������(���������������������)***");
1776     this.seek(0);
1777     }else{
1778     logManager.addLog("***���������������������(������������)***");
1779     this.stop();
1780     mc.gotoAndStop(0);
1781     this.play();
1782     }
1783     }else{
1784     this.stop();
1785     mc.gotoAndStop(0);
1786     if(isPlayListingPlay){
1787     logManager.addLog("***���������������(������������)***");
1788     var windowType:int = PlayerController.WINDOW_TYPE_FLV;
1789     if(playingIndex >= this.videoInfoView.getPlayList().length-1){
1790     playingIndex = 0;
1791     if(this.videoPlayer.videoInfoView.isRepeatAll()){
1792     playMovie(this.videoInfoView.getPlayListUrl(playingIndex), this.videoInfoView.playList,
1793     playingIndex, PathMaker.getVideoName(this.videoInfoView.getPlayListUrl(playingIndex)));
1794     }
1795     }else{
1796     playingIndex++;
1797     playMovie(this.videoInfoView.getPlayListUrl(playingIndex), this.videoInfoView.playList,
1798     playingIndex, PathMaker.getVideoName(this.videoInfoView.getPlayListUrl(playingIndex)));
1799     }
1800     }
1801     }
1802    
1803     isMovieClipStopping = false;
1804     }
1805    
1806    
1807     /**
1808     * ���������������������ID������������������������������������������������������������1���������������
1809     * @param videoId ���������������������������������������������������ID
1810     * @param isSave ���������������������������������������������������
1811     */
1812     private function addVideoPlayCount(videoId:String, isSave:Boolean):void{
1813     var nnddVideo:NNDDVideo = libraryManager.isExist(videoId);
1814     if(nnddVideo != null){
1815     nnddVideo.playCount = nnddVideo.playCount + 1;
1816     libraryManager.update(nnddVideo, isSave);
1817     trace("���������������������:" + nnddVideo.videoName + "," + nnddVideo.playCount);
1818     }else{
1819     //���������������
1820     trace("������������������������������������:" + videoId);
1821     }
1822     }
1823    
1824     /**
1825     * ���������������������������������������������
1826     * swf���������������SWF���������������������������������������������������
1827     *
1828     * @param event
1829     *
1830     */
1831     private function commentTimerHandler(event:TimerEvent):void{
1832    
1833     if(isPlayerClosing){
1834     if(commentTimer != null){
1835     commentTimer.stop();
1836     commentTimer.reset();
1837     }
1838     return;
1839     }
1840    
1841     // ���������������
1842     this.setVolume(this.videoPlayer.videoController.slider_volume.value);
1843    
1844     var nowSec:String="00",nowMin:String="0";
1845     nowSec = String(int(commentTimerVpos/1000%60));
1846     nowMin = String(int(commentTimerVpos/1000/60));
1847     if(nowSec.length == 1){
1848     nowSec = "0" + nowSec;
1849     }
1850     var nowTime:String = nowMin + ":" + nowSec;
1851    
1852     var allSec:String="00",allMin:String="0"
1853     if(this.windowType==PlayerController.WINDOW_TYPE_SWF && this.mc != null){
1854     allSec = String(int(mc.totalFrames/swfFrameRate%60));
1855     allMin = String(int(mc.totalFrames/swfFrameRate/60));
1856     }else if(this.windowType==PlayerController.WINDOW_TYPE_FLV && this.videoDisplay != null){
1857     allSec = String(int(videoDisplay.totalTime%60));
1858     allMin = String(int(videoDisplay.totalTime/60));
1859     }
1860     if(allSec.length == 1){
1861     allSec = "0" + allSec;
1862     }
1863     var allTime:String = allMin +":" + allSec;
1864    
1865     if(!isCounted && commentTimerVpos > 10000){
1866     //���������������������
1867     var videoId:String = LibraryUtil.getVideoKey(this.videoPlayer.title);
1868     if(videoId != null){
1869     addVideoPlayCount(videoId, false);
1870     }
1871     isCounted = true;
1872     }
1873    
1874     //SWF���������������������������������������������������������������������
1875     if(isMovieClipPlaying && this.windowType==PlayerController.WINDOW_TYPE_SWF && this.mc != null){
1876    
1877     videoPlayer.videoController_under.slider_timeline.enabled = true;
1878     videoPlayer.videoController_under.slider_timeline.minimum = 0;
1879     videoPlayer.videoController_under.slider_timeline.maximum = mc.totalFrames;
1880    
1881     videoPlayer.videoController.slider_timeline.enabled = true;
1882     videoPlayer.videoController.slider_timeline.minimum = 0;
1883     videoPlayer.videoController.slider_timeline.maximum = mc.totalFrames;
1884    
1885     if(!this.sliderChanging){
1886     videoPlayer.videoController_under.slider_timeline.value = mc.currentFrame;
1887     videoPlayer.videoController.slider_timeline.value = mc.currentFrame;
1888     }
1889    
1890     // trace(nowMin + "/" + nowSec);
1891    
1892     videoPlayer.videoController_under.label_time.text = nowTime + "/"+ allTime;
1893     videoPlayer.videoController.label_time.text = nowTime + "/"+ allTime;
1894    
1895     if(mc.currentFrame >= mc.totalFrames-1 || mc.currentFrame == this.lastFrame ){
1896     this.lastFrame = mc.currentFrame;
1897     //���������movieClip������������������������������������������������������
1898     if(!isMovieClipStopping){
1899     isMovieClipStopping = true;
1900     movieClipCompleteHandler();
1901     }
1902     return;
1903     }else{
1904     if(!isMovieClipStopping){
1905     this.lastFrame = mc.currentFrame;
1906     }
1907     }
1908     }
1909    
1910     var tempTime:Number = (new Date).time;
1911    
1912     //SWF������������������������������������������������������������������
1913     if(this.windowType == PlayerController.WINDOW_TYPE_SWF){
1914     this.commentTimerVpos += (tempTime - this.time);
1915     }
1916    
1917     //���������������������
1918     var commentArray:Vector.<NNDDComment> = this.commentManager.setComment(commentTimerVpos, (tempTime - this.time)*3, this.videoPlayer.isShowComment);
1919     this.commentManager.moveComment(tempTime/1000 - this.time/1000, videoInfoView.showCommentSec);
1920     this.commentManager.removeComment(commentTimerVpos, videoInfoView.showCommentSec * 1000);
1921     this.time = tempTime;
1922    
1923     //������������������������������������������������������
1924     if(videoPlayer.videoInfoView.checkbox_SyncComment.selected && videoPlayer.videoInfoView.visible
1925     // && (videoPlayer.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE
1926     // && videoInfoView.isActive)
1927     ){
1928    
1929     var lastMin:String = commentManager.getComments().lastMin;
1930    
1931     var tempNowTime:String = nowTime;
1932     if(lastMin.length == 3){
1933     //���������������3���������������:���������������������
1934     if(tempNowTime.length == 4){
1935     //���������������:������������4���
1936     tempNowTime = "00" + tempNowTime;
1937     }else if(tempNowTime.length == 5){
1938     //���������������:������������5���
1939     tempNowTime = "0" + tempNowTime;
1940     }
1941     }else if(lastMin.length == 2){
1942     //���������������2���������������:������������5������
1943     if(tempNowTime.length == 4){
1944     //���������������:������������4���
1945     tempNowTime = "0" + tempNowTime;
1946     }
1947    
1948     }else if(lastMin.length == 1){
1949     //���������������1���������������:������������4������
1950    
1951     }
1952    
1953     if(tempNowTime.length > lastMin.length+3){
1954     tempNowTime = tempNowTime.substring(1);
1955     }
1956    
1957    
1958     var index:int = 0;
1959     if(commentArray.length > 0 && comments != null){
1960     var myComment:NNDDComment = commentArray[0];
1961     for each(var comment:NNDDComment in commentArray){
1962     if(comment.vpos > myComment.vpos){
1963     myComment = comment;
1964     }
1965     }
1966     index = comments.getCommentIndex(tempNowTime, myComment.text);
1967    
1968     if(this.videoPlayer.videoInfoView.tabNavigator_comment.selectedIndex == 0){
1969    
1970     if(this.videoPlayer.videoInfoView.dataGrid_comment.verticalScrollPosition < index){
1971     index = index - (this.videoPlayer.videoInfoView.dataGrid_comment.rowCount) + 2;
1972     if(index > 0){
1973     if(index < this.videoPlayer.videoInfoView.dataGrid_comment.maxVerticalScrollPosition){
1974     this.videoPlayer.videoInfoView.dataGrid_comment.verticalScrollPosition = index;
1975     }else{
1976     this.videoPlayer.videoInfoView.dataGrid_comment.verticalScrollPosition = this.videoPlayer.videoInfoView.dataGrid_comment.maxVerticalScrollPosition;
1977     }
1978     }
1979     }
1980    
1981     }else if(this.videoPlayer.videoInfoView.tabNavigator_comment.selectedIndex == 1){
1982    
1983     if(this.videoPlayer.videoInfoView.dataGrid_oldComment.verticalScrollPosition < index){
1984     index = index - (this.videoPlayer.videoInfoView.dataGrid_oldComment.rowCount) + 2;
1985     if(index > 0){
1986     if(index < this.videoPlayer.videoInfoView.dataGrid_oldComment.maxVerticalScrollPosition){
1987     this.videoPlayer.videoInfoView.dataGrid_oldComment.verticalScrollPosition = index;
1988     }else{
1989     this.videoPlayer.videoInfoView.dataGrid_oldComment.verticalScrollPosition = this.videoPlayer.videoInfoView.dataGrid_oldComment.maxVerticalScrollPosition;
1990     }
1991     }
1992     }
1993    
1994     }
1995    
1996     }
1997     }
1998    
1999    
2000     //������������������������
2001     var date:Date = new Date();
2002     var hh:String = new String(int(date.getHours()));
2003     var mm:String = new String(int(date.getMinutes()));
2004     if(hh.length == 1){
2005     hh = "0" + hh;
2006     }
2007     if(mm.length == 1){
2008     mm = "0" + mm;
2009     }
2010     var jihouResult:Array = commentManager.isJihouSettingTime(hh + mm);
2011     if(jihouResult != null && playingJihou == null){
2012     //������������
2013     playingJihou = hh+mm;
2014     playNicowari(jihouResult[0], jihouResult[1]);
2015     }
2016     if(playingJihou != null && playingJihou != (hh+mm)){
2017     playingJihou = null;
2018     }
2019    
2020     if(!this.videoPlayer.isShowComment){
2021     this.commentManager.removeAll();
2022     }
2023    
2024     }
2025    
2026     /**
2027     * ������������������������������������������������������������������������
2028     * @param volume 0������1���������������������������������������������
2029     * @return ������������������������������������
2030     *
2031     */
2032     public function setVolume(volume:Number):Number{
2033     if(this.windowReady){
2034     if(this.windowType == PlayerController.WINDOW_TYPE_FLV){
2035     if(videoDisplay != null){
2036     videoDisplay.volume = volume;
2037     this.videoPlayer.videoController.slider_volume.value = volume;
2038     this.videoPlayer.videoController_under.slider_volume.value = volume;
2039     return videoDisplay.volume;
2040     }
2041     }else if(this.windowType == PlayerController.WINDOW_TYPE_SWF){
2042     if(mc != null){
2043     var transForm:SoundTransform = new SoundTransform(volume, 0);
2044     mc.soundTransform = transForm;
2045     this.videoPlayer.videoController.slider_volume.value = volume;
2046     this.videoPlayer.videoController_under.slider_volume.value = volume;
2047     return mc.soundTransform.volume;
2048     }
2049     }
2050     }
2051     return 0;
2052     }
2053    
2054     /**
2055     * PlayerController���������������CommentManager������������������
2056     * @return
2057     *
2058     */
2059     public function getCommentManager():CommentManager{
2060     return commentManager;
2061     }
2062    
2063     /**
2064     * ���������������������������������������������������������������������������������������������������
2065     * ���������SWF������������������������������������������������������������������������Loader������������������������������������������������������
2066     */
2067     public function windowResized(isCommentRemove:Boolean = true):void{
2068    
2069     if(this.windowReady){
2070    
2071     //SWFLoader���������������������������������������
2072     if(swfLoader != null && this.windowType == PlayerController.WINDOW_TYPE_SWF){
2073     //������������������
2074    
2075     (swfLoader.getChildAt(0) as Loader).x = 0;
2076     (swfLoader.getChildAt(0) as Loader).y = 0;
2077     var flashDistX:int = (swfLoader.getChildAt(0) as Loader).width - PlayerController.NICO_SWF_WIDTH;
2078     var flashDistY:int = (swfLoader.getChildAt(0) as Loader).height - PlayerController.NICO_SWF_HEIGHT;
2079     var scaleX:Number = swfLoader.width / ((swfLoader.getChildAt(0) as Loader).width - flashDistX);
2080     var scaleY:Number = swfLoader.height / ((swfLoader.getChildAt(0) as Loader).height - flashDistY);
2081     if(scaleX < scaleY){
2082     (swfLoader.getChildAt(0) as Loader).scaleX = scaleX;
2083     (swfLoader.getChildAt(0) as Loader).scaleY = scaleX;
2084     var centorY:int = swfLoader.height / 2;
2085     var newY:int = centorY - (PlayerController.NICO_SWF_HEIGHT*scaleX)/2;
2086     // trace("newY:"+newY);
2087     if(newY > 0){
2088     (swfLoader.getChildAt(0) as Loader).y = newY;
2089     }
2090     }else{
2091     (swfLoader.getChildAt(0) as Loader).scaleX = scaleY;
2092     (swfLoader.getChildAt(0) as Loader).scaleY = scaleY;
2093     var centorX:int = swfLoader.width / 2;
2094     var newX:int = centorX - (PlayerController.NICO_SWF_WIDTH*scaleY)/2;
2095     // trace("newX:"+newX);
2096     if(newX > 0){
2097     (swfLoader.getChildAt(0) as Loader).x = newX;
2098     }
2099     }
2100    
2101     }
2102    
2103     //���������SWF������������������������������������������
2104     if(nicowariSwfLoader != null){
2105    
2106     (nicowariSwfLoader.getChildAt(0) as Loader).x = 0;
2107     (nicowariSwfLoader.getChildAt(0) as Loader).y = 0;
2108    
2109     var nicowariDistX:Number = (nicowariSwfLoader.getChildAt(0) as Loader).width - PlayerController.NICO_WARI_WIDTH;
2110     var nicowariDistY:Number = (nicowariSwfLoader.getChildAt(0) as Loader).height - PlayerController.NICO_WARI_HEIGHT;
2111    
2112     var nicowariScaleX:Number = nicowariSwfLoader.width / ((nicowariSwfLoader.getChildAt(0) as Loader).width - nicowariDistX);
2113     var nicowariScaleY:Number = nicowariSwfLoader.height / ((nicowariSwfLoader.getChildAt(0) as Loader).height - nicowariDistY);
2114     if(nicowariScaleX < nicowariScaleY){
2115     (nicowariSwfLoader.getChildAt(0) as Loader).scaleX = nicowariScaleX;
2116     (nicowariSwfLoader.getChildAt(0) as Loader).scaleY = nicowariScaleX;
2117     centorY = nicowariSwfLoader.height / 2;
2118     newY = centorY - (PlayerController.NICO_WARI_HEIGHT*nicowariScaleX)/2;
2119     // trace("newY:"+newY);
2120     if(newY > 0){
2121     (nicowariSwfLoader.getChildAt(0) as Loader).y = newY;
2122     }
2123     }else{
2124     (nicowariSwfLoader.getChildAt(0) as Loader).scaleX = nicowariScaleY;
2125     (nicowariSwfLoader.getChildAt(0) as Loader).scaleY = nicowariScaleY;
2126     centorX = nicowariSwfLoader.width / 2;
2127     newX = centorX - (PlayerController.NICO_WARI_WIDTH*nicowariScaleY)/2;
2128     // trace("newX:"+newX);
2129     if(newX > 0){
2130     (nicowariSwfLoader.getChildAt(0) as Loader).x = newX;
2131     }
2132     }
2133     }
2134    
2135     //���������������������������������
2136     if(isCommentRemove){
2137     commentManager.removeAll();
2138     }
2139     }
2140     }
2141    
2142     /**
2143     * ���������������seekTime������������������������������������������������
2144     * @param seekTime ������������������������������������������������������������������������������������������������������
2145     *
2146     */
2147     public function seek(seekTime:Number):void{
2148     trace(seekTime);
2149     if(this.windowReady){
2150     if((new Date().time)-lastSeekTime > 1000){
2151     if((videoDisplay != null && videoDisplay.initialized && videoDisplay.totalTime > 0) || (swfLoader != null && swfLoader.initialized)){
2152    
2153    
2154     trace("seekStart:" + seekTime);
2155     this.commentTimer.stop();
2156     this.commentTimer.reset();
2157    
2158     //������������������������������������������������������
2159     commentManager.getComments().resetEnableShowFlag();
2160    
2161     //���������������������������������������������
2162     this.videoPlayer.videoInfoView.dataGrid_comment.verticalScrollPosition = 0;
2163    
2164     if(this.windowType == PlayerController.WINDOW_TYPE_FLV){
2165     videoDisplay.playheadTime = seekTime;
2166     commentTimerVpos = seekTime*1000;
2167     }else if(this.windowType == PlayerController.WINDOW_TYPE_SWF){
2168     mc.gotoAndPlay(int(seekTime));
2169     commentTimerVpos = (seekTime/swfFrameRate)*1000;
2170     }
2171    
2172     commentManager.removeAll();
2173    
2174     if(!this.pausing || this.windowType == PlayerController.WINDOW_TYPE_SWF){
2175     commentTimer.start();
2176     }
2177     lastSeekTime = new Date().time;
2178    
2179    
2180    
2181     }
2182     }
2183     }
2184     }
2185    
2186    
2187     /**
2188     * ������Player������������������������������������������������
2189     * @return Player���������������������������true������������������������������false���
2190     *
2191     */
2192     public function isOpen():Boolean{
2193     if(this.videoPlayer.nativeWindow != null){
2194     return !this.videoPlayer.closed;
2195     }
2196     return false;
2197     }
2198    
2199     /**
2200     * Player������������������Open������������
2201     *
2202     */
2203     public function open():Boolean{
2204     if(this.videoPlayer != null){
2205     this.videoPlayer.open();
2206     }else{
2207     return false;
2208     }
2209     if(this.videoInfoView != null){
2210     this.videoInfoView.open();
2211     }else{
2212     return false;
2213     }
2214