Develop and Download Open Source Software

Browse Subversion Repository

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 573 - (show annotations) (download)
Sun May 22 09:09:58 2011 UTC (12 years, 10 months ago) by mineap
File size: 154723 byte(s)
有害報告されている動画が再生できない場合があるのを修正(本当は確認ダイアログとか作るべきだろうけどとりあえず省略)
1 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.display.StageQuality;
9 import flash.events.ErrorEvent;
10 import flash.events.Event;
11 import flash.events.EventDispatcher;
12 import flash.events.HTTPStatusEvent;
13 import flash.events.IOErrorEvent;
14 import flash.events.MouseEvent;
15 import flash.events.TimerEvent;
16 import flash.filesystem.File;
17 import flash.media.SoundMixer;
18 import flash.media.SoundTransform;
19 import flash.net.URLRequest;
20 import flash.utils.Timer;
21
22 import mx.collections.ArrayCollection;
23 import mx.controls.Alert;
24 import mx.controls.DataGrid;
25 import mx.controls.SWFLoader;
26 import mx.controls.Text;
27 import mx.controls.videoClasses.VideoError;
28 import mx.core.FlexGlobals;
29 import mx.core.Window;
30 import mx.events.AIREvent;
31 import mx.events.FlexEvent;
32 import mx.events.VideoEvent;
33 import mx.formatters.DateFormatter;
34 import mx.formatters.NumberFormatter;
35
36 import org.libspark.utils.ForcibleLoader;
37 import org.mineap.nicovideo4as.MyListLoader;
38 import org.mineap.nicovideo4as.WatchVideoPage;
39 import org.mineap.nicovideo4as.analyzer.GetRelationResultAnalyzer;
40 import org.mineap.nicovideo4as.loader.api.ApiGetRelation;
41 import org.mineap.nicovideo4as.model.RelationResultItem;
42 import org.mineap.nicovideo4as.util.HtmlUtil;
43 import org.mineap.nndd.Access2Nico;
44 import org.mineap.nndd.FileIO;
45 import org.mineap.nndd.LogManager;
46 import org.mineap.nndd.Message;
47 import org.mineap.nndd.NNDDDownloader;
48 import org.mineap.nndd.NNDDVideoPageWatcher;
49 import org.mineap.nndd.RenewDownloadManager;
50 import org.mineap.nndd.history.HistoryManager;
51 import org.mineap.nndd.library.ILibraryManager;
52 import org.mineap.nndd.library.LibraryManagerBuilder;
53 import org.mineap.nndd.library.LocalVideoInfoLoader;
54 import org.mineap.nndd.model.NNDDComment;
55 import org.mineap.nndd.model.NNDDVideo;
56 import org.mineap.nndd.model.PlayList;
57 import org.mineap.nndd.playList.PlayListManager;
58 import org.mineap.nndd.player.comment.Command;
59 import org.mineap.nndd.player.comment.CommentManager;
60 import org.mineap.nndd.player.comment.Comments;
61 import org.mineap.nndd.player.model.PlayerTagString;
62 import org.mineap.nndd.user.UserManager;
63 import org.mineap.nndd.util.DateUtil;
64 import org.mineap.nndd.util.IchibaBuilder;
65 import org.mineap.nndd.util.LibraryUtil;
66 import org.mineap.nndd.util.NumberUtil;
67 import org.mineap.nndd.util.PathMaker;
68 import org.mineap.nndd.util.RelationTypeUtil;
69 import org.mineap.nndd.util.ThumbInfoAnalyzer;
70 import org.mineap.nndd.util.ThumbInfoUtil;
71 import org.mineap.nndd.util.WebServiceAccessUtil;
72 import org.mineap.util.config.ConfigIO;
73 import org.mineap.util.config.ConfigManager;
74 import org.osmf.events.LoadEvent;
75 import org.osmf.events.MediaPlayerStateChangeEvent;
76 import org.osmf.events.TimeEvent;
77 import org.osmf.layout.ScaleMode;
78 import org.osmf.media.MediaPlayerState;
79
80 import spark.components.VideoDisplay;
81
82 /**
83 * ���������������������������������������������������������������������������GUI������������������������
84 *
85 * @author shiraminekeisuke(MineAP)
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:VideoDisplay = 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 mc:MovieClip;
137 private var nicowariMC:MovieClip;
138 public var swfFrameRate:Number = 0;
139
140 public var sliderChanging:Boolean = false;
141
142 private var nicowariTimer:Timer;
143
144 private var isCounted:Boolean = false;
145
146 private var isMovieClipStopping:Boolean = false;
147
148 public var isPlayerClosing:Boolean = false;
149
150 public var _isEconomyMode:Boolean = false;
151
152 private var renewDownloadManager:RenewDownloadManager;
153 private var nnddDownloaderForStreaming:NNDDDownloader;
154 private var playerHistoryManager:PlayerHistoryManager;
155 private var renewDownloadManagerForOldComment:RenewDownloadManager;
156
157 public static const NICO_WARI_HEIGHT:int = 56;
158 public static const NICO_WARI_WIDTH:int = 544;
159
160 public static const NICO_SWF_HEIGHT:int = 384;
161 public static const NICO_SWF_WIDTH:int = 512;
162
163 public static const NICO_VIDEO_WINDOW_HEIGHT:int = 384;
164 public static const NICO_VIDEO_WINDOW_WIDTH:int = 512;
165 public static const NICO_VIDEO_WINDOW_WIDTH_WIDE_MODE:int = 640;
166
167 public static const NICO_VIDEO_PADDING:int = 10;
168
169 public static const WIDE_MODE_ASPECT_RATIO:Number = 1.7;
170
171 //������������������������������������������������������null���
172 private var playingJihou:String = null;
173
174 private var movieEndTimer:Timer = null;
175
176 private var isSwfConverting:Boolean = false;
177
178 private var streamingProgressTimer:Timer = null;
179
180 private var _videoID:String = null;
181
182 private var nnddDownloaderForWatch:NNDDDownloader = null;
183
184 private var lastFrame:int = 0;
185
186 private var lastNicowariFrame:int = 0;
187
188 private var myListLoader:MyListLoader = null;
189
190 private var nicowariCloseTimer:Timer = null;
191
192 private var configManager:ConfigManager;
193
194 private var configIO:ConfigIO;
195
196 private var streamingRetryCount:int = 0;
197
198 private var nicoVideoPageGetRetryTimer:Timer;
199
200 private var nicoVideoAccessRetryTimer:Timer;
201
202 private var nicoRelationInfoLoader:ApiGetRelation = null;
203
204 private var lastLoadedBytes:Number = 0;
205
206 [Embed(source="/player/NNDDicons_play_20x20.png")]
207 private var icon_Play:Class;
208
209 [Embed(source="/player/NNDDicons_pause_20x20.png")]
210 private var icon_Pause:Class;
211
212 [Embed(source="/player/NNDDicons_stop_20x20.png")]
213 private var icon_Stop:Class;
214
215
216 /**
217 * ������������������������Player���������������PlayerController���������<br>
218 * FLV���MP4������������������������Player���SWF������������������������Player���������������<br>
219 * ���������������������������������������<br>
220 *
221 */
222 public function PlayerController()
223 {
224 this.logManager = LogManager.instance;
225 this.libraryManager = LibraryManagerBuilder.instance.libraryManager;
226 this.playListManager = PlayListManager.instance;
227 this.videoPlayer = new VideoPlayer();
228 this.videoInfoView = new VideoInfoView();
229 this.videoInfoView.type = NativeWindowType.UTILITY;
230 ConfigManager.getInstance().reload();
231 this.videoPlayer.init(this, videoInfoView, logManager);
232 this.videoInfoView.init(this, videoPlayer, logManager);
233 this.videoPlayer.addEventListener(AIREvent.WINDOW_COMPLETE, function():void{
234 videoInfoView.activate();
235 videoPlayer.activate();
236 });
237 this.ngListManager = new NGListManager(this, videoPlayer, videoInfoView, logManager);
238 if(libraryManager != null){
239 if(!this.ngListManager.loadNgList(LibraryManagerBuilder.instance.libraryManager.systemFileDir)){
240 this.ngListManager.loadNgList(LibraryManagerBuilder.instance.libraryManager.libraryDir);
241 }
242 }
243 this.commentTimer.addEventListener(TimerEvent.TIMER, commentTimerHandler);
244 this.commentManager = new CommentManager(videoPlayer, videoInfoView, this);
245
246 this.playerHistoryManager = new PlayerHistoryManager();
247
248 }
249
250 /**
251 * ���������������������������
252 * Comments���NgList���null���������������GC������������������
253 *
254 */
255 public function destructor():void{
256
257 isMovieClipStopping = false;
258
259 if(this.movieEndTimer != null){
260 this.movieEndTimer.stop();
261 this.movieEndTimer = null;
262 }
263
264 if(this.commentTimer != null){
265 this.commentTimer.stop();
266 this.commentTimer.reset()
267 }else{
268 this.commentTimer = new Timer(1000/15);
269 this.commentTimer.addEventListener(TimerEvent.TIMER, commentTimerHandler);
270 }
271
272 if(this.comments != null){
273 this.comments.destructor();
274 }
275 this.comments = null;
276 // this.ngList = null;
277
278 if(videoDisplay != null){
279 try{
280 videoDisplay.stop();
281 }catch(error:VideoError){
282 trace(error.getStackTrace());
283 }
284 removeVideoDisplayEventListeners(videoDisplay);
285 videoDisplay.source = null;
286 videoDisplay = null;
287 this.videoPlayer.canvas_video.removeAllChildren();
288 }
289
290 isMovieClipPlaying = false;
291 if(loader != null && !isSwfConverting){
292 SoundMixer.stopAll();
293 loader.unloadAndStop(true);
294 // removeMovieClipEventHandlers(loader);
295 loader = null;
296 this.videoPlayer.canvas_video.removeAllChildren();
297 isSwfConverting = false;
298 }
299 if(swfLoader != null && !isSwfConverting){
300 SoundMixer.stopAll();
301 swfLoader.unloadAndStop(true);
302 swfLoader = null;
303 this.videoPlayer.canvas_video.removeAllChildren();
304 isSwfConverting = false;
305 }
306
307 if(this.nicowariSwfLoader != null){
308 videoPlayer.canvas_nicowari.removeAllChildren();
309 if(nicowariMC != null){
310 this.pauseByNicowari(true);
311 }
312 }
313
314 if(videoPlayer != null && videoPlayer.canvas_nicowari != null){
315 videoPlayer.canvas_nicowari.removeAllChildren();
316 videoPlayer.canvas_nicowari.setConstraintValue("backgroundColor", new int("0x969696"));
317
318 }
319
320 if(streamingProgressTimer != null){
321 streamingProgressTimer.stop();
322 streamingProgressTimer = null;
323 }
324
325 playingJihou = null;
326
327 if(nnddDownloaderForWatch != null){
328 nnddDownloaderForWatch.close(false, false);
329 nnddDownloaderForWatch = null;
330 }
331
332 if(myListLoader != null){
333 myListLoader.close();
334 myListLoader = null;
335 }
336
337 this.lastFrame = 0;
338 this.lastNicowariFrame = 0;
339
340 this.lastLoadedBytes = 0;
341
342 if(videoInfoView != null){
343 videoInfoView.pubUserLinkButtonText = "(���������)";
344 videoInfoView.pubUserNameIconUrl = null;
345 videoInfoView.pubUserName = "(���������)";
346
347 if(videoInfoView.pubUserLinkButton != null){
348 videoInfoView.pubUserLinkButton.label = videoInfoView.pubUserLinkButtonText;
349 videoInfoView.image_pubUserIcon.source = videoInfoView.pubUserNameIconUrl;
350 videoInfoView.label_pubUserName.text = videoInfoView.pubUserName;
351 }
352 }
353
354 isCounted = false;
355
356 }
357
358 /**
359 * ������������������������Player���������������������������<br>
360 * autoPlay���true������������������������init()���������������������������������������������������������������<br>
361 * <b>playMovie()���������������������������</b>
362 *
363 * @param videoPath
364 * @param windowType
365 * @param comments
366 * @param thumbInfoPath
367 * @param ngList
368 * @param autoPlay
369 * @param isStreamingPlay
370 * @param downLoadedURL
371 * @param isPlayListingPlay
372 *
373 */
374 private function init(videoPath:String, windowType:int, comments:Comments, thumbInfoPath:String,
375 autoPlay:Boolean = false, isStreamingPlay:Boolean = false,
376 downLoadedURL:String = null, isPlayListingPlay:Boolean = false, videoId:String = ""):void
377 {
378 this.destructor();
379
380 if(videoPlayer != null){
381 videoPlayer.resetInfo();
382 if(videoPlayer.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE){
383 videoPlayer.restore();
384 }
385 }
386
387 if(videoInfoView != null){
388 videoInfoView.resetInfo();
389 // videoInfoView.restore();
390 }
391
392 videoPlayer.setControllerEnable(false);
393
394 this._videoID = null;
395 if(videoId != null && videoId != ""){
396 this._videoID = videoId;
397 }
398
399 this.windowReady = false;
400 this.source = videoPath;
401 this.comments = comments;
402 this.time = (new Date).time;
403 this.isStreamingPlay = isStreamingPlay;
404 this.downLoadedURL = downLoadedURL;
405 this.isPlayListingPlay = isPlayListingPlay;
406 this.windowType = windowType;
407
408 if(!isPlayListingPlay){
409 this.videoInfoView.resetPlayList();
410 }
411
412 this.videoPlayer.videoController.resetAlpha(true);
413
414 if(isStreamingPlay){
415 if(streamingProgressTimer != null){
416 streamingProgressTimer.stop();
417 streamingProgressTimer = null;
418 }
419
420 this.videoPlayer.label_playSourceStatus.text = "Streaming:0%";
421 videoInfoView.connectionType = "Streaming";
422 streamingProgressTimer = new Timer(500);
423 streamingProgressTimer.addEventListener(TimerEvent.TIMER, streamingProgressHandler);
424 streamingProgressTimer.start();
425
426 if(this.videoPlayer.title == null){
427 this.videoPlayer.addEventListener(FlexEvent.CREATION_COMPLETE, function():void{
428 this.videoPlayer.title = downLoadedURL.substr(downLoadedURL.lastIndexOf("/") + 1);
429 });
430 }else{
431 this.videoPlayer.title = downLoadedURL.substr(downLoadedURL.lastIndexOf("/") + 1);
432 }
433 }else{
434 this.videoPlayer.label_playSourceStatus.text = "[Local]";
435 videoInfoView.connectionType = "Local";
436 this.streamingRetryCount = 0;
437 if(this.videoPlayer.title == null){
438 this.videoPlayer.addEventListener(FlexEvent.CREATION_COMPLETE, function():void{
439 this.videoPlayer.title = videoPath.substr(videoPath.lastIndexOf("/") + 1);
440 });
441 }else{
442 this.videoPlayer.title = videoPath.substr(videoPath.lastIndexOf("/") + 1);
443 }
444 var file:File = new File(videoPath);
445 if(!file.exists){
446 Alert.show("������������������������������������\n������������������������������������������������������������������������������", "���������");
447 logManager.addLog("������������������������������������������������������������������������������������������������������������������:" + file.nativePath);
448 FlexGlobals.topLevelApplication.activate();
449 return;
450 }
451
452 }
453
454 /* ������������������������������������������������������������������������ */
455 if(!isStreamingPlay && this.videoInfoView.isRenewCommentEachPlay){
456 //���������������������������������������������������������������
457
458 logManager.addLog(Message.START_PLAY_EACH_COMMENT_DOWNLOAD);
459 videoPlayer.label_downloadStatus.text = Message.START_PLAY_EACH_COMMENT_DOWNLOAD;
460
461 if(this._videoID == null){
462 this._videoID = PathMaker.getVideoID(videoPath);
463 }
464
465 if(this._videoID != null && PathMaker.getVideoID(videoPath) == LibraryUtil.getVideoKey(videoPath)){
466
467 if((UserManager.instance.user != null && UserManager.instance.password != null) && (UserManager.instance.user != "" && UserManager.instance.password != null && UserManager.instance.password != "")){
468
469 /* ������������������������������������������������ */
470
471 var videoUrl:String = "http://www.nicovideo.jp/watch/"+PathMaker.getVideoID(this._videoID);
472
473 renewCommentAtStart(PathMaker.getVideoID(this._videoID), videoPath, thumbInfoPath, autoPlay);
474
475 }else{
476
477 /* ��������������������������������������������������� */
478 logManager.addLog(Message.FAIL_PLAY_EACH_COMMENT_DOWNLOAD + "(������������������������������)");
479 initStart(videoPath, thumbInfoPath, autoPlay);
480
481 }
482
483 }else{
484
485 logManager.addLog(Message.FAIL_PLAY_EACH_COMMENT_DOWNLOAD + "(������ID���������������������)");
486 videoPlayer.label_downloadStatus.text = Message.FAIL_PLAY_EACH_COMMENT_DOWNLOAD + "(������ID���������������������)";
487
488 var timer:Timer = new Timer(1000, 1);
489 timer.addEventListener(TimerEvent.TIMER_COMPLETE, function(event:TimerEvent):void{
490 initStart(videoPath, thumbInfoPath, autoPlay);
491
492 timer.stop();
493 timer = null;
494
495 });
496 timer.start();
497
498 }
499 }else{
500 //���������������������������������������������������(������������������������������������������������)
501
502 this._videoID = videoId;
503
504 if(this._videoID == null || this._videoID == ""){
505 this._videoID = PathMaker.getVideoID(videoPlayer.title);
506 }
507
508 logManager.addLog("���������������������������������������:" + this._videoID);
509
510 if(this._videoID != null && this._videoID != ""){
511
512 if(UserManager.instance.user != null && UserManager.instance.user != "" &&
513 UserManager.instance.password != null && UserManager.instance.password != ""){
514
515 myListGroupUpdate(PathMaker.getVideoID(this._videoID));
516
517 }else{
518 //���������������������������������
519 logManager.addLog("���������������������������������������(���������������������������)");
520 }
521
522 }else{
523 //
524 logManager.addLog("���������������������������������������(������ID���������������������)");
525 }
526
527 initStart(videoPath, thumbInfoPath, autoPlay);
528 }
529
530 }
531
532 /**
533 * VideoDisplay���������������SWFLoader���������������������������������������������������������������������
534 *
535 * @param videoPath ���������������
536 * @param thumbInfoPath ������������������������������
537 * @param autoPlay ������������������������������������������
538 */
539 private function initStart(videoPath:String, thumbInfoPath:String, autoPlay:Boolean):void
540 {
541 trace(videoPlayer.stage.quality);
542
543 try{
544 if(_isEconomyMode){
545 videoPlayer.label_economyStatus.text = "������������������������";
546 }else{
547 videoPlayer.label_economyStatus.text = "";
548 }
549
550 videoPlayer.canvas_video.toolTip = null;
551
552 if(isPlayerClosing){
553 stop();
554 destructor();
555 return;
556 }
557
558 commentTimerVpos = 0;
559
560 var text:Text = new Text();
561 text.text = "������������������������������������������������������������������������������������������������\n������������������������������������������������������������������";
562 text.setConstraintValue("left", 10);
563 text.setConstraintValue("top", 10);
564 videoPlayer.canvas_nicowari.addChild(text);
565
566 videoPlayer.label_downloadStatus.text = "";
567 videoInfoView.image_thumbImg.source = "";
568 videoInfoView.text_info.htmlText ="(������������������������)<br />(������������������������)<br />������: ������������: ���������������:"
569
570 if(isStreamingPlay){
571 //������������������DL������������������������������
572 setInfo(downLoadedURL, thumbInfoPath, thumbInfoPath.substring(0, thumbInfoPath.lastIndexOf("/")) + "/nndd[IchibaInfo].html", true);
573
574 videoInfoView.image_thumbImg.source = thumbInfoPath.substring(0, thumbInfoPath.lastIndexOf("/")) + "/nndd[ThumbImg].jpeg";
575 }else{
576 setInfo(videoPath, thumbInfoPath, PathMaker.createNicoIchibaInfoPathByVideoPath(videoPath), false);
577
578 var nnddVideo:NNDDVideo = libraryManager.isExist(PathMaker.getVideoID(videoPath));
579
580 if(nnddVideo != null){
581 videoInfoView.image_thumbImg.source = nnddVideo.thumbUrl;
582 }
583 }
584
585 changeFps(videoInfoView.fps);
586
587 videoPlayer.videoController.label_time.text = "0:00/0:00";
588 videoPlayer.videoController_under.label_time.text = "0:00/0:00";
589
590 if(videoInfoView.isShowAlwaysNicowariArea){
591 //������������������������������������
592 videoPlayer.showNicowariArea();
593
594 }else{
595 //���������������������������������
596 videoPlayer.hideNicowariArea();
597
598 }
599
600 var video:NNDDVideo = libraryManager.isExist(LibraryUtil.getVideoKey(_videoID));
601 if(video != null){
602 HistoryManager.instance.addVideoByNNDDVideo(video);
603 }else{
604 video = new NNDDVideo("http://www.nicovideo.jp/watch/" + PathMaker.getVideoID(_videoID), videoPlayer.title, false, null, null, null, PathMaker.getThumbImgUrl(PathMaker.getVideoID(_videoID)));
605
606 HistoryManager.instance.addVideoByNNDDVideo(video, null, false);
607 }
608
609 if(windowType == PlayerController.WINDOW_TYPE_FLV){
610 //WINDOW_TYPE_FLV���������������������������������
611
612 isMovieClipPlaying = false;
613
614 videoDisplay = new VideoDisplay();
615
616 videoPlayer.label_downloadStatus.text = "";
617
618 if(isStreamingPlay){
619 videoPlayer.label_downloadStatus.text = "���������������...";
620 videoDisplay.addEventListener(MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE, mediaPlayerStateChanged);
621 }
622
623 videoPlayer.canvas_video.removeAllChildren();
624 videoPlayer.canvas_video.addChild(videoDisplay);
625
626 videoDisplay.setConstraintValue("bottom", 0);
627 videoDisplay.setConstraintValue("left", 0);
628 videoDisplay.setConstraintValue("right", 0);
629 videoDisplay.setConstraintValue("top", 0);
630
631 if(videoPath.length > 4 && videoPath.substr(0,4) == "http"){
632 videoInfoView.videoServerUrl = videoPath.substring(0, videoPath.lastIndexOf("/"));
633 }else{
634 videoInfoView.videoServerUrl = videoPath;
635 var messageServerUrl:String = PathMaker.createNomalCommentPathByVideoPath(videoPath);
636 if(messageServerUrl != null){
637 videoInfoView.messageServerUrl = messageServerUrl;
638 }
639 }
640 videoInfoView.videoType = "FLV/MP4";
641
642 videoDisplay.autoPlay = autoPlay;
643 videoDisplay.source = videoPath;
644 videoDisplay.autoRewind = false;
645 videoDisplay.volume = videoPlayer.videoController.slider_volume.value;
646 videoPlayer.videoController_under.slider_volume.value = videoPlayer.videoController.slider_volume.value;
647
648 addVideoDisplayEventListeners(videoDisplay);
649
650 commentManager.initComment(comments, videoPlayer.canvas_video);
651 commentManager.setCommentAlpha(videoInfoView.commentAlpha/100);
652
653 windowReady = true;
654
655 if(autoPlay && !isStreamingPlay){
656 time = (new Date).time;
657 commentTimer.start();
658 }
659
660 videoDisplay.addEventListener(LoadEvent.BYTES_LOADED_CHANGE, byteloadedChangedEventHandler);
661 videoDisplay.addEventListener(TimeEvent.CURRENT_TIME_CHANGE, osmfCurrentTimeChangeEventHandler);
662 videoDisplay.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void{
663 event.currentTarget.setFocus();
664 });
665
666 videoPlayer.videoController.button_play.setStyle("icon", icon_Pause);
667 videoPlayer.videoController_under.button_play.setStyle("icon", icon_Pause);
668 setVolume(videoPlayer.videoController.slider_volume.value);
669
670 // if(videoInfoView.visible){
671 // videoInfoView.restore();
672 // }
673 if(videoPlayer.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE){
674 videoPlayer.restore();
675 }
676
677 // if(videoInfoView.visible){
678 // videoInfoView.activate();
679 // }
680 // videoPlayer.activate();
681 videoPlayer.showVideoPlayerAndVideoInfoView();
682
683 windowResized(false);
684
685 videoPlayer.setControllerEnable(true);
686
687 }else if(windowType == PlayerController.WINDOW_TYPE_SWF){
688 //WINODW_TYPE_SWF���������������������������������
689
690 isMovieClipPlaying = true;
691 isSwfConverting = true;
692
693 videoPlayer.label_downloadStatus.text = "SWF������������������������...";
694
695 loader = new Loader();
696 loader.contentLoaderInfo.addEventListener(Event.COMPLETE, convertCompleteHandler);
697 var fLoader:ForcibleLoader = new ForcibleLoader(loader);
698 swfLoader = new SWFLoader();
699 swfLoader.addChild(loader);
700
701 videoPlayer.canvas_video.removeAllChildren();
702 videoPlayer.canvas_video.addChild(swfLoader);
703
704 swfLoader.setConstraintValue("bottom", 0);
705 swfLoader.setConstraintValue("left", 0);
706 swfLoader.setConstraintValue("right", 0);
707 swfLoader.setConstraintValue("top", 0);
708
709 swfLoader.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void{
710 event.currentTarget.setFocus();
711 });
712
713 commentManager.initComment(comments, videoPlayer.canvas_video);
714 commentManager.setCommentAlpha(videoInfoView.commentAlpha/100);
715
716 windowReady = true;
717
718 if(videoPath.length > 4 && videoPath.substr(0,4) == "http"){
719 videoInfoView.videoServerUrl = videoPath.substring(0, videoPath.lastIndexOf("/"));
720 }else{
721 videoInfoView.videoServerUrl = videoPath;
722 var messageServerUrl:String = PathMaker.createNomalCommentPathByVideoPath(videoPath);
723 if(messageServerUrl != null){
724 videoInfoView.messageServerUrl = messageServerUrl;
725 }
726 }
727 videoInfoView.videoType = "SWF";
728 if(autoPlay){
729 fLoader.load(new URLRequest(videoPath));
730 }
731
732 var timer:Timer = new Timer(500, 4);
733 timer.addEventListener(TimerEvent.TIMER, function():void{
734 windowResized(false);
735 });
736 timer.start();
737
738 videoPlayer.videoController_under.button_play.setStyle("icon", icon_Pause);
739 videoPlayer.videoController.button_play.setStyle("icon", icon_Pause);
740
741 // if(videoInfoView.visible){
742 // videoInfoView.restore();
743 // }
744
745 if(videoPlayer.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE){
746 videoPlayer.restore();
747 }
748
749 // if(videoInfoView.visible){
750 // videoInfoView.activate();
751 // }
752 // videoPlayer.activate();
753 videoPlayer.showVideoPlayerAndVideoInfoView();
754
755 videoPlayer.setControllerEnable(true);
756
757 }
758
759 if(videoInfoView != null && videoInfoView.tabNavigator_comment != null){
760 if(videoInfoView.tabNavigator_comment.selectedIndex == 1){
761 // ���������������������������������������������������������������������������������
762 videoInfoView.reloadOldComment();
763 }else{
764 // ������������������������������������������������������
765 videoInfoView.resetOldCommentDate();
766 }
767 }
768
769 return;
770 }catch(error:Error){
771 trace(error.getStackTrace());
772 logManager.addLog(error + ":" + error.getStackTrace());
773 }
774 }
775
776
777 /**
778 * ���������������������������������������
779 *
780 * @param videoId
781 * @param videoPath
782 * @param thumbInfoPath
783 * @param autoPlay
784 *
785 */
786 private function renewCommentAtStart(videoId:String, videoPath:String, thumbInfoPath:String, autoPlay:Boolean):void{
787
788 var videoName:String = PathMaker.getVideoName(videoPath);
789
790 if(renewDownloadManager != null){
791 renewDownloadManager.close();
792 renewDownloadManager = null;
793 }
794
795 renewDownloadManager = new RenewDownloadManager(null, logManager);
796 renewDownloadManager.addEventListener(RenewDownloadManager.PROCCESS_COMPLETE, function(event:Event):void{
797 var video:NNDDVideo = libraryManager.isExist(PathMaker.getVideoID(videoPath));
798 if(video == null){
799 try{
800 video = new LocalVideoInfoLoader().loadInfo(videoPath);
801 video.creationDate = new File(videoPath).creationDate;
802 video.modificationDate = new File(videoPath).modificationDate;
803 }catch(error:Error){
804 video = new NNDDVideo(videoPath);
805 }
806 libraryManager.add(video, false);
807 video = libraryManager.isExist(video.key);
808 }
809 var thumbUrl:String = (event.currentTarget as RenewDownloadManager).localThumbUri;
810 var isLocal:Boolean = false;
811 try{
812 //������������������������������������������������������������������������������������
813 var file:File = new File(video.thumbUrl);
814 if(file.exists){
815 isLocal = true;
816 }
817 }catch(e:Error){
818 trace(e);
819 }
820
821 //thumbUrl���URL���������������������������������������������������
822 if(!isLocal){
823 if(thumbUrl != null){
824 //���������������������thumbUrl���������
825 video.thumbUrl = thumbUrl;
826 }else if (video.thumbUrl == null || video.thumbUrl == ""){
827 //thumbUrl���������������==������������������
828 var videoId:String = PathMaker.getVideoID(_videoID);
829 if(videoId != null){
830 video.thumbUrl = PathMaker.getThumbImgUrl(videoId);
831 }else{
832 video.thumbUrl = "";
833 }
834 }
835 }
836
837 libraryManager.update(video, false);
838
839
840 var videoMin:int = video.time / 60;
841 ++videoMin;
842
843 var commentPath:String = PathMaker.createNomalCommentPathByVideoPath(video.getDecodeUrl());
844 var ownerCommentPath:String = PathMaker.createOwnerCommentPathByVideoPath(video.getDecodeUrl());
845 comments = new Comments(commentPath,
846 ownerCommentPath,
847 getCommentListProvider(),
848 getOwnerCommentListProvider(),
849 ngListManager,
850 videoInfoView.isShowOnlyPermissionComment,
851 videoInfoView.isHideSekaShinComment,
852 videoInfoView.showCommentCountPerMin * videoMin,
853 videoInfoView.showOwnerCommentCountPerMin * videoMin,
854 videoInfoView.isNgUpEnable);
855
856 renewDownloadManager = null;
857
858 myListGroupUpdate(PathMaker.getVideoID(_videoID));
859
860 initStart(videoPath, thumbInfoPath, autoPlay);
861 });
862 renewDownloadManager.addEventListener(NNDDDownloader.COMMENT_GET_SUCCESS, getProgressListener);
863 renewDownloadManager.addEventListener(NNDDDownloader.GETFLV_API_ACCESS_SUCCESS, getProgressListener);
864 renewDownloadManager.addEventListener(NNDDDownloader.ICHIBA_INFO_GET_SUCCESS, getProgressListener);
865 renewDownloadManager.addEventListener(NNDDDownloader.LOGIN_SUCCESS, getProgressListener);
866 renewDownloadManager.addEventListener(NNDDDownloader.NICOWARI_GET_SUCCESS, getProgressListener);
867 renewDownloadManager.addEventListener(NNDDDownloader.OWNER_COMMENT_GET_SUCCESS, getProgressListener);
868 renewDownloadManager.addEventListener(NNDDDownloader.THUMB_IMG_GET_SUCCESS, getProgressListener);
869 renewDownloadManager.addEventListener(NNDDDownloader.THUMB_INFO_GET_SUCCESS, getProgressListener);
870 renewDownloadManager.addEventListener(NNDDDownloader.VIDEO_GET_SUCCESS, getProgressListener);
871 renewDownloadManager.addEventListener(NNDDDownloader.WATCH_SUCCESS, getProgressListener);
872 renewDownloadManager.addEventListener(NNDDDownloader.DOWNLOAD_PROCESS_COMPLETE, getProgressListener);
873
874 renewDownloadManager.addEventListener(NNDDDownloader.COMMENT_GET_FAIL, getFailListener);
875 renewDownloadManager.addEventListener(NNDDDownloader.GETFLV_API_ACCESS_FAIL, getFailListener);
876 renewDownloadManager.addEventListener(NNDDDownloader.ICHIBA_INFO_GET_FAIL, getFailListener);
877 renewDownloadManager.addEventListener(NNDDDownloader.LOGIN_FAIL, getFailListener);
878 renewDownloadManager.addEventListener(NNDDDownloader.NICOWARI_GET_FAIL, getFailListener);
879 renewDownloadManager.addEventListener(NNDDDownloader.OWNER_COMMENT_GET_FAIL, getFailListener);
880 renewDownloadManager.addEventListener(NNDDDownloader.THUMB_IMG_GET_FAIL, getFailListener);
881 renewDownloadManager.addEventListener(NNDDDownloader.THUMB_INFO_GET_FAIL, getFailListener);
882 renewDownloadManager.addEventListener(NNDDDownloader.VIDEO_GET_FAIL, getFailListener);
883 renewDownloadManager.addEventListener(NNDDDownloader.WATCH_FAIL, getFailListener);
884
885 renewDownloadManager.addEventListener(RenewDownloadManager.PROCCESS_FAIL, function(event:Event):void{
886 renewDownloadManager = null;
887 videoPlayer.label_downloadStatus.text = Message.FAIL_PLAY_EACH_COMMENT_DOWNLOAD;
888 logManager.addLog(Message.FAIL_PLAY_EACH_COMMENT_DOWNLOAD);
889
890 var timer:Timer = new Timer(1000, 1);
891 timer.addEventListener(TimerEvent.TIMER_COMPLETE, function(event:Event):void{
892 myListGroupUpdate(PathMaker.getVideoID(_videoID));
893 initStart(videoPath, thumbInfoPath, autoPlay);
894 });
895 timer.start();
896 });
897 renewDownloadManager.addEventListener(RenewDownloadManager.PROCCESS_CANCEL, function(event:Event):void{
898 renewDownloadManager = null;
899 videoPlayer.label_downloadStatus.text = Message.PLAY_EACH_COMMENT_DOWNLOAD_CANCEL;
900 logManager.addLog(Message.PLAY_EACH_COMMENT_DOWNLOAD_CANCEL);
901
902 var timer:Timer = new Timer(1000, 1);
903 timer.addEventListener(TimerEvent.TIMER_COMPLETE, function():void{
904 myListGroupUpdate(PathMaker.getVideoID(_videoID));
905 initStart(videoPath, thumbInfoPath, autoPlay);
906 });
907 timer.start();
908 });
909
910 if(this.videoInfoView.isRenewOtherCommentWithCommentEachPlay){
911 renewDownloadManager.renewForOtherVideo(UserManager.instance.user,
912 UserManager.instance.password, PathMaker.getVideoID(videoId), videoName,
913 new File(videoPath.substring(0, videoPath.lastIndexOf("/")+1)),
914 videoInfoView.isAppendComment, null, (FlexGlobals.topLevelApplication as NNDD).getSaveCommentMaxCount());
915 }else{
916 renewDownloadManager.renewForCommentOnly(UserManager.instance.user,
917 UserManager.instance.password, PathMaker.getVideoID(videoId), videoName,
918 new File(videoPath.substring(0, videoPath.lastIndexOf("/")+1)),
919 videoInfoView.isAppendComment, null, (FlexGlobals.topLevelApplication as NNDD).getSaveCommentMaxCount());
920 }
921 }
922
923 /**
924 * ���������������������������������
925 * @param date
926 *
927 */
928 public function getOldCommentFromNico(date:Date):void{
929
930 if(renewDownloadManagerForOldComment != null){
931 // ���������������������������
932 renewDownloadManagerForOldComment.close();
933 renewDownloadManagerForOldComment = null;
934 videoInfoView.button_oldComment_reloadFromNico.label = "������(������������������)";
935 logManager.addLog("���������������������������������");
936
937 }else{
938 // ������������
939
940 videoInfoView.button_oldComment_reloadFromNico.label = "���������������";
941 logManager.addLog("������������������������������:" + DateUtil.getDateString(date));
942
943 renewDownloadManagerForOldComment = new RenewDownloadManager(null, LogManager.instance);
944 renewDownloadManagerForOldComment.addEventListener(NNDDDownloader.GETWAYBACKKEY_API_ACCESS_FAIL, function(event:Event):void{
945 videoInfoView.button_oldComment_reloadFromNico.label = "������(������������������)";
946 logManager.addLog("������������������������������:" + event);
947
948 FlexGlobals.topLevelApplication.activate();
949 Alert.show("���������������������������������������������\n���������������������������������������������������������������������������������������������\n(���������������������������������������������������������������������������)", Message.M_ERROR);
950 });
951 renewDownloadManagerForOldComment.addEventListener(RenewDownloadManager.PROCCESS_CANCEL, function(event:Event):void{
952 videoInfoView.button_oldComment_reloadFromNico.label = "������(������������������)";
953 logManager.addLog("���������������������������������������:" + event);
954
955 renewDownloadManagerForOldComment = null;
956 });
957 renewDownloadManagerForOldComment.addEventListener(RenewDownloadManager.PROCCESS_COMPLETE, function(event:Event):void{
958 logManager.addLog("������������������������������:" + event);
959 //������������������������������
960 reloadLocalComment(date);
961
962 renewDownloadManagerForOldComment.close();
963 renewDownloadManagerForOldComment = null;
964
965 videoInfoView.button_oldComment_reloadFromNico.label = "������(������������������)";
966
967 });
968 renewDownloadManagerForOldComment.addEventListener(RenewDownloadManager.PROCCESS_FAIL, function(event:Event):void{
969 videoInfoView.button_oldComment_reloadFromNico.label = "������(������������������)";
970 logManager.addLog("������������������������������:" + event);
971
972 renewDownloadManagerForOldComment = null;
973
974 FlexGlobals.topLevelApplication.activate();
975 Alert.show("���������������������������������������������", Message.M_ERROR);
976 });
977
978 var videoId:String = PathMaker.getVideoID(this._videoID);
979 var videoName:String = null;
980 var videoPath:File = null;
981 if(isStreamingPlay){
982 videoName = "nndd.flv";
983 videoPath = LibraryManagerBuilder.instance.libraryManager.tempDir;
984 }else{
985 videoName = PathMaker.getVideoName(this.source);
986 videoPath = new File(this.source.substring(0, this.source.lastIndexOf("/")+1))
987 }
988
989 // maxCount���������������������������������������������������������������������������������������������
990 var maxCount:Number = (FlexGlobals.topLevelApplication as NNDD).getSaveCommentMaxCount();
991 if(maxCount < 10000){
992 maxCount = 10000;
993 }
994
995 // ���������������������������������������������������������������������
996 renewDownloadManagerForOldComment.renewForCommentOnly(UserManager.instance.user,
997 UserManager.instance.password, videoId, videoName, videoPath, true,
998 date, maxCount);
999
1000 }
1001
1002 }
1003
1004 /**
1005 *
1006 * @param event
1007 *
1008 */
1009 protected function byteloadedChangedEventHandler(event:Event):void{
1010 trace(event.type);
1011 if(videoInfoView.isResizePlayerEachPlay){
1012 resizePlayerJustVideoSize(videoPlayer.nowRatio);
1013 }else{
1014 resizePlayerJustVideoSize();
1015 }
1016 }
1017
1018 /**
1019 *
1020 * @param event
1021 *
1022 */
1023 protected function osmfCurrentTimeChangeEventHandler(event:TimeEvent):void{
1024 trace(event.type + ", time:" + event.time);
1025 if(event.time < 0){
1026 return;
1027 }
1028 if(videoInfoView.isResizePlayerEachPlay){
1029 resizePlayerJustVideoSize(videoPlayer.nowRatio);
1030 }else{
1031 resizePlayerJustVideoSize();
1032 }
1033 }
1034
1035 /**
1036 *
1037 * @param videoId
1038 * @return
1039 *
1040 */
1041 public function myListGroupUpdate(videoId:String):void{
1042
1043 myListLoader = new MyListLoader();
1044 myListLoader.addEventListener(MyListLoader.GET_MYLISTGROUP_SUCCESS, function(event:Event):void{
1045 var myLists:Array = myListLoader.getMyLists();
1046
1047 if(myLists.length > 0){
1048 var myListNames:Array = new Array();
1049 var myListIds:Array = new Array();
1050
1051 for each(var array:Array in myLists){
1052 myListNames.push(array[0]);
1053 myListIds.push(array[1]);
1054 }
1055
1056 videoInfoView.setMyLists(myListNames, myListIds);
1057 }
1058 myListLoader.close();
1059 });
1060 myListLoader.addEventListener(MyListLoader.GET_MYLISTGROUP_FAILURE, function(event:ErrorEvent):void{
1061 myListLoader.close();
1062 logManager.addLog("���������������������������������������:" + event + ":" + event.text);
1063 });
1064 myListLoader.getMyListGroup(videoId);
1065
1066 }
1067
1068
1069 /**
1070 *
1071 * @param event
1072 *
1073 */
1074 private function mediaPlayerStateChanged(event:MediaPlayerStateChangeEvent):void
1075 {
1076 if(videoDisplay != null && !isPlayerClosing){
1077 if(event.state != MediaPlayerState.BUFFERING){
1078 videoPlayer.label_downloadStatus.text = "";
1079 videoDisplay.removeEventListener(MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE, mediaPlayerStateChanged);
1080 if(commentTimer != null && !commentTimer.running){
1081 time = (new Date).time;
1082 commentTimer.start();
1083 }
1084 }
1085 }else{
1086 (event.currentTarget as VideoDisplay).stop();
1087 (event.currentTarget as VideoDisplay).removeEventListener(MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE, mediaPlayerStateChanged);
1088 destructor();
1089 }
1090 }
1091
1092 /**
1093 *
1094 * @param event
1095 *
1096 */
1097 private function convertCompleteHandler(event:Event):void{
1098
1099 isSwfConverting = false;
1100
1101 if(loader != null && !isPlayerClosing){
1102
1103 mc = LoaderInfo(event.currentTarget).loader.content as MovieClip;
1104 swfFrameRate = LoaderInfo(event.currentTarget).loader.contentLoaderInfo.frameRate;
1105 setVolume(videoPlayer.videoController.slider_volume.value);
1106
1107 if(videoInfoView.isResizePlayerEachPlay){
1108 resizePlayerJustVideoSize(videoPlayer.nowRatio);
1109 }else{
1110 resizePlayerJustVideoSize();
1111 }
1112
1113 videoPlayer.label_downloadStatus.text = "";
1114
1115 commentTimer.start();
1116 time = (new Date).time;
1117
1118 }else{
1119
1120 if(mc != null){
1121 mc.stop();
1122 }
1123 destructor();
1124 if(event.currentTarget as LoaderInfo){
1125 LoaderInfo(event.currentTarget).loader.unloadAndStop(true);
1126 }
1127
1128 }
1129
1130 LoaderInfo(event.currentTarget).loader.removeEventListener(Event.COMPLETE, convertCompleteHandler);
1131
1132 }
1133
1134 /**
1135 * ���������������������������������������������������������������������
1136 *
1137 * @param videoPath
1138 * @param windowType
1139 * @param comments
1140 * @param ngList
1141 * @param playList ���������������������m3u���������
1142 * @param videoNameList ���������������������������������URL���������������������������������������������������������������������������������
1143 * @param playingIndex ������������������������������
1144 * @param autoPlay ������������
1145 * @param isStreamingPlay ���������������������������������������
1146 * @param downLoadedURL ���������������������URL
1147 * @return
1148 *
1149 */
1150 private function initWithPlayList(videoPath:String, windowType:int, comments:Comments, playList:Array, videoNameList:Array, playListName:String, playingIndex:int,
1151 autoPlay:Boolean = false, isStreamingPlay:Boolean = false, downLoadedURL:String = null, videoTitle:String = null):void{
1152
1153 // this.streamingRetryCount = 0;
1154
1155 this.playingIndex = playingIndex;
1156 this.isPlayListingPlay = true;
1157 var videoNameArray:Array = videoNameList;
1158 if(videoNameArray == null){
1159 videoNameArray = new Array();
1160 for(var i:int; i<playList.length; i++){
1161 var url:String = playList[i];
1162 videoNameArray.push(url.substring(url.lastIndexOf("/") + 1));
1163 }
1164 }
1165
1166 if(downLoadedURL == null){
1167 downLoadedURL = videoPath;
1168 }
1169
1170 this.videoInfoView.resetPlayList();
1171 this.videoInfoView.setPlayList(playList, videoNameArray, playListName);
1172
1173 trace("\t"+playList);
1174
1175 this.init(videoPath, windowType, comments, PathMaker.createThmbInfoPathByVideoPath(downLoadedURL), autoPlay, isStreamingPlay, videoTitle, true, LibraryUtil.getVideoKey(videoTitle));
1176 }
1177
1178 /**
1179 * VideoPlayer������������������������������������������������������������������������������
1180 *
1181 * @param url
1182 * @param index
1183 * @return
1184 *
1185 */
1186 public function initForVideoPlayer(url:String, index:int):void{
1187 playMovie(url, this.videoInfoView.playList, index, PathMaker.getVideoName(this.videoInfoView.getPlayListUrl(index)));
1188 }
1189
1190 /**
1191 *
1192 * @param isSmoothing
1193 *
1194 */
1195 public function setVideoSmoothing(isSmoothing:Boolean):void{
1196
1197 if (videoDisplay != null && videoDisplay.videoObject != null)
1198 {
1199
1200 if (isSmoothing)
1201 {
1202 // ������������������������
1203
1204 if (videoDisplay.videoObject.videoWidth == videoDisplay.videoObject.width)
1205 {
1206 // ���������������������������������������������������
1207 if (videoInfoView.isSmoothingOnlyNotPixelIdenticalDimensions)
1208 {
1209 // ���������������������������������������������������������
1210 videoDisplay.videoObject.smoothing = false;
1211 }
1212 else
1213 {
1214 // ������������������������������������������������������
1215 videoDisplay.videoObject.smoothing = true;
1216 }
1217 }
1218 else
1219 {
1220 // ���������������������������������������������������������
1221 videoDisplay.videoObject.smoothing = true;
1222 }
1223
1224 }
1225 else
1226 {
1227 // ���������������������������
1228 videoDisplay.videoObject.smoothing = false;
1229 }
1230
1231 }
1232
1233 }
1234
1235 /**
1236 *
1237 * @param value 0-3 default=2
1238 *
1239 */
1240 public function setPlayerQuality(value:int):void{
1241 if(videoPlayer.stage != null){
1242
1243 var qualityStr:String = StageQuality.HIGH;
1244 switch(value){
1245 case 0:
1246 qualityStr = StageQuality.LOW;
1247 break;
1248 case 1:
1249 qualityStr = StageQuality.MEDIUM;
1250 break;
1251 case 2:
1252 qualityStr = StageQuality.HIGH;
1253 break;
1254 case 3:
1255 qualityStr = StageQuality.BEST;
1256 break;
1257 default:
1258 qualityStr = StageQuality.HIGH;
1259 }
1260
1261 videoPlayer.stage.quality = qualityStr;
1262 }
1263 }
1264
1265 /**
1266 * videoDisplay���������������������������������������������������������������������������������������������
1267 * ���������������������������������������������������������������
1268 */
1269 public function resizePlayerJustVideoSize(windowSizeRatio:Number = -1):void{
1270
1271 try{
1272 var ratio:Number = 1;
1273 if(windowSizeRatio != -1){
1274 ratio = windowSizeRatio;
1275 }
1276
1277 //������������������������������
1278 var videoWindowHeight:int = PlayerController.NICO_VIDEO_WINDOW_HEIGHT * ratio;
1279 var videoWindowWidth:int = PlayerController.NICO_VIDEO_WINDOW_WIDTH * ratio;
1280
1281 //���������������������������������
1282 var nicowariWindowHeight:int = PlayerController.NICO_WARI_HEIGHT * ratio;
1283 var nicowariWindowWidth:int = PlayerController.NICO_WARI_WIDTH * ratio;
1284
1285 //InfoView���������������������������������������
1286 if(isPlayListingPlay){
1287 if(this.videoInfoView != null){
1288 videoInfoView.showPlayingTitle(playingIndex);
1289 }
1290 }
1291
1292 //���������������������������������������
1293 if(this.videoPlayer.stage != null && this.videoPlayer.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE){
1294 //������������������������������������������ ������������������������������������������������������������
1295 if(this.videoInfoView.isResizePlayerEachPlay || windowSizeRatio != -1){
1296
1297 if(this.windowType == PlayerController.WINDOW_TYPE_FLV && this.videoDisplay != null && this.videoDisplay.videoObject != null){
1298 //FLV������������
1299
1300 // ���������������������������
1301 this.setVideoSmoothing(videoInfoView.isSmoothing);
1302
1303 if(this.videoInfoView.selectedResizeType == VideoInfoView.RESIZE_TYPE_NICO && this.videoDisplay.videoObject.videoHeight > 0){
1304
1305 //��������������������������������������������������������������� && ��������������������������������������������������� (���������������������������������������������������������������������������������)
1306 var isWideVideo:Boolean = false;
1307 if(WIDE_MODE_ASPECT_RATIO < Number(this.videoDisplay.videoObject.videoWidth)/Number(this.videoDisplay.videoObject.videoHeight)){
1308 // ���������������16:9���
1309 isWideVideo = true;
1310 trace("enable 16:9 mode");
1311 }
1312
1313 videoWindowHeight = PlayerController.NICO_VIDEO_WINDOW_HEIGHT * ratio;
1314 if(this.videoInfoView.isEnableWideMode && isWideVideo){
1315 // logManager.addLog("���������(16:9)���������");
1316 videoWindowWidth = (PlayerController.NICO_VIDEO_WINDOW_WIDTH_WIDE_MODE + PlayerController.NICO_VIDEO_PADDING*2) * ratio;
1317 }else{
1318 // logManager.addLog("������������(4:3)���������");
1319 videoWindowWidth = (PlayerController.NICO_VIDEO_WINDOW_WIDTH + PlayerController.NICO_VIDEO_PADDING*2) * ratio;
1320 }
1321
1322 //������������������������������������������
1323 this.videoDisplay.setConstraintValue("left", PlayerController.NICO_VIDEO_PADDING);
1324 this.videoDisplay.setConstraintValue("right", PlayerController.NICO_VIDEO_PADDING);
1325
1326 trace(videoDisplay.width + "," + videoDisplay.height);
1327
1328 if(videoDisplay.hasEventListener(LoadEvent.BYTES_LOADED_CHANGE)){
1329 //init������������������������������������������������������������������������������������������������������������������
1330 videoDisplay.removeEventListener(LoadEvent.BYTES_LOADED_CHANGE, byteloadedChangedEventHandler);
1331 // resizePlayerJustVideoSize(windowSizeRatio);
1332 }
1333 if(videoDisplay.hasEventListener(TimeEvent.CURRENT_TIME_CHANGE)){
1334 videoDisplay.removeEventListener(TimeEvent.CURRENT_TIME_CHANGE, osmfCurrentTimeChangeEventHandler);
1335 }
1336
1337 }else if(this.videoInfoView.selectedResizeType == VideoInfoView.RESIZE_TYPE_VIDEO && this.videoDisplay.videoObject.videoHeight > 0){
1338
1339 //���������������������������������������������������������������������(videoHeight���0���������������������������������������������������������������������)
1340
1341 videoWindowHeight = this.videoDisplay.videoObject.videoHeight * ratio;
1342 videoWindowWidth = this.videoDisplay.videoObject.videoWidth * ratio;
1343
1344 this.videoDisplay.setConstraintValue("bottom", 0);
1345 this.videoDisplay.setConstraintValue("left", 0);
1346 this.videoDisplay.setConstraintValue("right", 0);
1347 this.videoDisplay.setConstraintValue("top", 0);
1348
1349 if(videoDisplay.hasEventListener(LoadEvent.BYTES_LOADED_CHANGE)){
1350 //init������������������������������������������������������������������������������������������������������������������
1351 videoDisplay.removeEventListener(LoadEvent.BYTES_LOADED_CHANGE, byteloadedChangedEventHandler);
1352 // resizePlayerJustVideoSize(windowSizeRatio);
1353 }
1354 if(videoDisplay.hasEventListener(TimeEvent.CURRENT_TIME_CHANGE)){
1355 videoDisplay.removeEventListener(TimeEvent.CURRENT_TIME_CHANGE, osmfCurrentTimeChangeEventHandler);
1356 }
1357 }else{
1358 //������������������������������������������������
1359 return;
1360 }
1361
1362 }else if(this.windowType == PlayerController.WINDOW_TYPE_SWF){
1363 //SWF������������
1364
1365 //SWF���������������������������������������
1366 videoWindowHeight = PlayerController.NICO_VIDEO_WINDOW_HEIGHT * ratio;
1367 videoWindowWidth = PlayerController.NICO_VIDEO_WINDOW_WIDTH * ratio;
1368
1369 }
1370
1371 //TODO ���������������VideoDisplay���������������������������������������������������������������
1372
1373 var rate:Number = PlayerController.NICO_WARI_WIDTH / PlayerController.NICO_WARI_HEIGHT;
1374 if(videoPlayer.canvas_nicowari.height < 1 ){
1375 //������������������������������������������������������������������������������������
1376 videoWindowHeight += int(videoWindowWidth / rate);
1377 }
1378
1379 this.videoPlayer.nativeWindow.height += int(videoWindowHeight - this.videoPlayer.canvas_video_back.height);
1380 this.videoPlayer.nativeWindow.width += int(videoWindowWidth - this.videoPlayer.canvas_video_back.width);
1381
1382 // (this.videoPlayer as Window).validateDisplayList();
1383 // (this.videoPlayer as Window).validateNow();
1384
1385 //������������������������������������������������������������������������������������������������������������������
1386 // var diffH:int = this.videoPlayer.nativeWindow.height - this.videoPlayer.stage.stageHeight;
1387 // var diffW:int = this.videoPlayer.nativeWindow.width - this.videoPlayer.stage.stageWidth;
1388
1389 }
1390 else
1391 {
1392 // ������������������������������������������
1393 if(this.windowType == PlayerController.WINDOW_TYPE_FLV && this.videoDisplay != null && this.videoDisplay.videoObject != null){
1394 //FLV������������
1395
1396 // ���������������������������
1397 this.setVideoSmoothing(videoInfoView.isSmoothing);
1398
1399 if(videoDisplay.hasEventListener(LoadEvent.BYTES_LOADED_CHANGE)){
1400 //init������������������������������������������������������������������������������������������������������������������
1401 videoDisplay.removeEventListener(LoadEvent.BYTES_LOADED_CHANGE, byteloadedChangedEventHandler);
1402 }
1403 if(videoDisplay.hasEventListener(TimeEvent.CURRENT_TIME_CHANGE)){
1404 videoDisplay.removeEventListener(TimeEvent.CURRENT_TIME_CHANGE, osmfCurrentTimeChangeEventHandler);
1405 }
1406
1407 }
1408
1409 }
1410
1411 }
1412 else
1413 {
1414 if (PlayerController.WINDOW_TYPE_FLV == this.windowType)
1415 {
1416 if (videoInfoView != null)
1417 {
1418 this.setVideoSmoothing(videoInfoView.isSmoothing);
1419 }
1420 }
1421 }
1422
1423 }catch(error:Error){ //������������������������������������������������������������������������������������������
1424 trace(error.getStackTrace());
1425 logManager.addLog("������������������������������������������:" + error + ", " + error.getStackTrace());
1426 stop();
1427 destructor();
1428 }
1429 }
1430
1431
1432 /**
1433 * ������������������������������������������������������������������
1434 * ���������������������������������������������������������������������������������������������
1435 * @return
1436 *
1437 */
1438 public function play():void
1439 {
1440 try{
1441 videoPlayer.canvas_video_back.setFocus();
1442
1443 var newComments:Comments = null;
1444 videoPlayer.canvas_video.toolTip = null;
1445 if(this.windowType == PlayerController.WINDOW_TYPE_FLV){
1446 if(videoDisplay != null && videoDisplay.playing){
1447 videoPlayer.videoController.button_play.setStyle("icon", icon_Play);
1448 videoPlayer.videoController_under.button_play.setStyle("icon", icon_Play);
1449 this.commentTimer.stop();
1450 this.commentTimer.reset();
1451 videoDisplay.pause();
1452 pausing = true;
1453 }else{
1454 videoPlayer.videoController.button_play.setStyle("icon", icon_Pause);
1455 videoPlayer.videoController_under.button_play.setStyle("icon", icon_Pause);
1456 if(pausing){
1457 this.videoPlayer.videoController.slider_timeline.enabled = true;
1458 this.videoPlayer.videoController_under.slider_timeline.enabled = true;
1459 this.videoDisplay.play();
1460 this.time = (new Date).time;
1461 this.commentTimer.start();
1462 }else{
1463 this.videoPlayer.videoController.slider_timeline.enabled = true;
1464 this.videoPlayer.videoController_under.slider_timeline.enabled = true;
1465 this.playMovie(source, null, -1, this.downLoadedURL);
1466 }
1467 pausing = false;
1468 }
1469 }else if(this.windowType == PlayerController.WINDOW_TYPE_SWF){
1470 if(isMovieClipPlaying){
1471 videoPlayer.videoController.button_play.setStyle("icon", icon_Play);
1472 videoPlayer.videoController_under.button_play.setStyle("icon", icon_Play);
1473 this.commentTimer.stop();
1474 this.commentTimer.reset();
1475 mc.stop();
1476 isMovieClipPlaying = false;
1477 pausing = true;
1478 }else{
1479 videoPlayer.videoController.button_play.setStyle("icon", icon_Pause);
1480 videoPlayer.videoController_under.button_play.setStyle("icon", icon_Pause);
1481 if(pausing){
1482 this.videoPlayer.videoController.slider_timeline.enabled = true;
1483 this.videoPlayer.videoController_under.slider_timeline.enabled = true;
1484 mc.play();
1485 isMovieClipPlaying = true;
1486 this.time = (new Date).time;
1487 this.commentTimer.start();
1488 }else{
1489 this.videoPlayer.canvas_video.removeAllChildren();
1490 this.videoPlayer.videoController.slider_timeline.enabled = true;
1491 this.videoPlayer.videoController_under.slider_timeline.enabled = true;
1492 this.playMovie(source, null, -1, this.downLoadedURL);
1493
1494 }
1495 pausing = false;
1496 }
1497 }else{
1498 if(this.videoPlayer != null && this.videoPlayer.title != null){
1499 this.playMovie(this.videoPlayer.title);
1500 }
1501 }
1502
1503 }catch(error:Error){
1504 trace(error.getStackTrace());
1505 logManager.addLog("���������������������������:" + error + ":" + error.getStackTrace());
1506 }
1507
1508 }
1509
1510
1511 /**
1512 * ������������������������������������������������
1513 * @return
1514 *
1515 */
1516 public function stop():void
1517 {
1518 try{
1519
1520 pausing = false;
1521
1522 if(videoInfoView.isShowAlwaysNicowariArea){
1523 videoPlayer.showNicowariArea();
1524 }else{
1525 videoPlayer.hideNicowariArea();
1526 }
1527
1528 if(videoPlayer != null && videoPlayer.label_downloadStatus != null){
1529 videoPlayer.canvas_video_back.setFocus();
1530 videoPlayer.label_downloadStatus.text = "";
1531 videoPlayer.canvas_video.toolTip = "���������������������������������������������������������������������������������";
1532 }
1533
1534 if(this.movieEndTimer != null){
1535 this.movieEndTimer.stop();
1536 this.movieEndTimer = null;
1537 }
1538
1539 if(renewDownloadManager != null){
1540 try{
1541 renewDownloadManager.close();
1542 renewDownloadManager = null;
1543 logManager.addLog("���������������������������������������������������������");
1544 }catch(error:Error){
1545 trace(error);
1546 }
1547 }else{
1548
1549 this.videoPlayer.videoController.button_play.enabled = true;
1550 this.videoPlayer.videoController_under.button_play.enabled = true;
1551 videoPlayer.videoController.button_play.setStyle("icon", icon_Play);
1552 videoPlayer.videoController_under.button_play.setStyle("icon", icon_Play);
1553
1554 this.videoPlayer.videoController_under.slider_timeline.value = 0;
1555 this.videoPlayer.videoController.slider_timeline.value = 0;
1556
1557 this.commentTimerVpos = 0;
1558 this.commentTimer.stop();
1559 this.commentTimer.reset();
1560 this.commentManager.removeAll();
1561
1562 //���������������������������������������������
1563 this.destructor();
1564
1565 //������������������������������������������������������
1566 videoPlayer.canvas_nicowari.removeAllChildren();
1567 if(nicowariMC != null){
1568 this.pauseByNicowari(true);
1569 }
1570
1571 }
1572
1573 }catch(error:Error){
1574 trace(error.getStackTrace());
1575 logManager.addLog("������������������������������������������:" + error + ":" + error.getStackTrace());
1576 }
1577
1578 }
1579
1580
1581 /**
1582 * ���������������������������������������������������������������������������������
1583 *
1584 */
1585 public function goToTop():void
1586 {
1587 try{
1588
1589 pausing = false;
1590
1591 if(videoInfoView.isShowAlwaysNicowariArea){
1592 videoPlayer.showNicowariArea();
1593 }else{
1594 videoPlayer.hideNicowariArea();
1595 }
1596
1597 if(videoPlayer != null && videoPlayer.label_downloadStatus != null){
1598 videoPlayer.canvas_video_back.setFocus();
1599 videoPlayer.label_downloadStatus.text = "";
1600 videoPlayer.canvas_video.toolTip = "���������������������������������������������������������������������������������";
1601 }
1602
1603 if(this.movieEndTimer != null){
1604 this.movieEndTimer.stop();
1605 this.movieEndTimer = null;
1606 }
1607
1608 if(renewDownloadManager != null){
1609 try{
1610 renewDownloadManager.close();
1611 renewDownloadManager = null;
1612 logManager.addLog("���������������������������������������������������������");
1613 }catch(error:Error){
1614 trace(error);
1615 }
1616 }else{
1617
1618 this.videoPlayer.videoController.button_play.enabled = true;
1619 this.videoPlayer.videoController_under.button_play.enabled = true;
1620 videoPlayer.videoController.button_play.setStyle("icon", icon_Play);
1621 videoPlayer.videoController_under.button_play.setStyle("icon", icon_Play);
1622
1623 this.videoPlayer.videoController_under.slider_timeline.value = 0;
1624 this.videoPlayer.videoController.slider_timeline.value = 0;
1625
1626 this.commentTimerVpos = 0;
1627 this.commentTimer.stop();
1628 this.commentTimer.reset();
1629
1630 var playing:Boolean = false;
1631 if(this.windowType == PlayerController.WINDOW_TYPE_FLV){
1632 if(videoDisplay != null && videoDisplay.playing){
1633 playing = true;
1634 }
1635 }else if(this.windowType == PlayerController.WINDOW_TYPE_SWF){
1636 if(isMovieClipPlaying){
1637 playing = true;
1638 }
1639 }
1640
1641 if(playing){
1642 this.play();
1643 }
1644 this.seek(0);
1645
1646
1647 //������������������������������������������������������
1648 videoPlayer.canvas_nicowari.removeAllChildren();
1649 if(nicowariMC != null){
1650 this.pauseByNicowari(true);
1651 }
1652
1653 }
1654
1655 }catch(error:Error){
1656 trace(error.getStackTrace());
1657 logManager.addLog("������������������������������������������:" + error + ":" + error.getStackTrace());
1658 }
1659 }
1660
1661 /**
1662 * VideoDisplay���������������������������������������������������������
1663 * @param videoDisplay
1664 *
1665 */
1666 private function addVideoDisplayEventListeners(videoDisplay:VideoDisplay):void{
1667 videoDisplay.addEventListener(TimeEvent.CURRENT_TIME_CHANGE, currentTimeChangeEventHandler);
1668 videoDisplay.addEventListener(TimeEvent.DURATION_CHANGE, durationChangeEventHandler);
1669 videoDisplay.addEventListener(TimeEvent.COMPLETE, videoDisplayCompleteHandler);
1670 }
1671
1672 /**
1673 * VideoDisplay���������������������������������������������������������
1674 * @param videoDisplay
1675 *
1676 */
1677 private function removeVideoDisplayEventListeners(videoDisplay:VideoDisplay):void{
1678 if(videoDisplay.hasEventListener(TimeEvent.CURRENT_TIME_CHANGE)){
1679 videoDisplay.removeEventListener(TimeEvent.CURRENT_TIME_CHANGE, currentTimeChangeEventHandler);
1680 }
1681 if(videoDisplay.hasEventListener(TimeEvent.DURATION_CHANGE)){
1682 videoDisplay.removeEventListener(TimeEvent.DURATION_CHANGE, durationChangeEventHandler);
1683 }
1684 if(videoDisplay.hasEventListener(VideoEvent.COMPLETE)){
1685 videoDisplay.removeEventListener(TimeEvent.COMPLETE, videoDisplayCompleteHandler);
1686 }
1687 }
1688
1689 /**
1690 *
1691 * @param event
1692 *
1693 */
1694 private function durationChangeEventHandler(event:TimeEvent):void{
1695 if(videoInfoView.isResizePlayerEachPlay){
1696 resizePlayerJustVideoSize(videoPlayer.nowRatio);
1697 }else{
1698 resizePlayerJustVideoSize();
1699 }
1700 }
1701
1702 /**
1703 *
1704 * @param loader
1705 *
1706 */
1707 // private function removeMovieClipEventHandlers(loader:Loader):void{
1708 // if(loader.hasEventListener(Event.COMPLETE)){
1709 // loader.removeEventListener(Event.COMPLETE, convertCompleteHandler);
1710 // }
1711 // }
1712
1713 /**
1714 * ������������������������������������������������������������������������������
1715 * @return
1716 *
1717 */
1718 public function getStreamingProgress():int{
1719 var value:int = 0;
1720 if(isStreamingPlay){
1721 if(videoDisplay != null){
1722 value = (videoDisplay.bytesLoaded*100 / videoDisplay.bytesTotal);
1723 }else if(loader != null && loader.contentLoaderInfo != null){
1724 value = (loader.contentLoaderInfo.bytesLoaded*100 / loader.contentLoaderInfo.bytesTotal);
1725 }else{
1726 value = 100;
1727 }
1728 }else{
1729 value = 100;
1730 }
1731 return value;
1732 }
1733
1734
1735 /**
1736 * ���������������������������������������������������MB/s������������������
1737 * @return
1738 *
1739 */
1740 public function getStreamingSpeed():Number
1741 {
1742
1743 // timer������1000ms���������������������
1744
1745 var value:Number = 0;
1746 if (isStreamingPlay)
1747 {
1748 if(videoDisplay != null){
1749 value = videoDisplay.bytesLoaded - this.lastLoadedBytes;
1750 this.lastLoadedBytes = videoDisplay.bytesLoaded;
1751 }else if(loader != null && loader.contentLoaderInfo != null){
1752 value = loader.contentLoaderInfo.bytesLoaded - this.lastLoadedBytes;
1753 this.lastLoadedBytes = loader.contentLoaderInfo.bytesLoaded;
1754 }else{
1755 return value;
1756 }
1757
1758 trace(value);
1759
1760 //MB���������
1761 value = value / 1000000;
1762
1763 // MB/s���������
1764 value = value / 1;
1765 }
1766 else
1767 {
1768 // ���������������
1769 }
1770
1771 return value;
1772
1773 }
1774
1775 /**
1776 *
1777 * @return
1778 *
1779 */
1780 public function get bytesLoaded():Number{
1781
1782 var value:Number = 0.0;
1783
1784 if(videoDisplay != null){
1785 value = videoDisplay.bytesLoaded;
1786 }else if(loader != null && loader.contentLoaderInfo != null){
1787 value = loader.contentLoaderInfo.bytesLoaded;
1788 }
1789
1790 return value;
1791 }
1792
1793 /**
1794 *
1795 * @param event
1796 *
1797 */
1798 private function streamingProgressHandler(event:TimerEvent):void{
1799 if(isStreamingPlay){
1800 var value:int = getStreamingProgress();
1801 var speed:Number = getStreamingSpeed();
1802 if(value >= 100){
1803 this.videoPlayer.label_playSourceStatus.text = "Streaming:100%";
1804 videoPlayer.videoController.resetStatusAlpha();
1805 if(streamingProgressTimer != null){
1806 streamingProgressTimer.stop();
1807 }
1808
1809 // 100%���������������������������������������������������������������������������������������
1810 if(this.bytesLoaded <= 64){
1811 if(this.streamingRetryCount <= 1 ){
1812 // ���������������
1813 this.streamingRetryCount++;
1814 var timeStr:String = String(int(10000*this.streamingRetryCount / 1000));
1815 stop();
1816 logManager.addLog("���������������������������������������(���������������������������:������������������������������:" + this.bytesLoaded + ")");
1817 videoPlayer.label_downloadStatus.text = "������������������������������������������������������������������(" + timeStr + "���������" + this.streamingRetryCount +"������ )";
1818
1819 if(nicoVideoAccessRetryTimer != null){
1820 nicoVideoAccessRetryTimer.stop();
1821 nicoVideoAccessRetryTimer = null;
1822 }
1823 nicoVideoAccessRetryTimer = new Timer(10000*this.streamingRetryCount, 1);
1824 nicoVideoAccessRetryTimer.addEventListener(TimerEvent.TIMER_COMPLETE, function(event:Event):void{
1825 (event.currentTarget as Timer).stop();
1826 play();
1827 });
1828 nicoVideoAccessRetryTimer.start();
1829
1830 }else{
1831 stop();
1832 logManager.addLog("���������������������������:������������������������������:" + this.bytesLoaded);
1833 videoPlayer.label_downloadStatus.text = "���������������������������������������������(���������������������������������������������������)";
1834 }
1835 }else{
1836 // ������������������
1837 this.streamingRetryCount = 0;
1838 }
1839
1840 }else{
1841
1842 var formatter:NumberFormatter = new NumberFormatter();
1843 formatter.precision = 2;
1844 var str:String = formatter.format(speed) + "MB/s"
1845
1846 this.videoPlayer.label_playSourceStatus.text = "Streaming:" + value + "% (" + str + ")";
1847 }
1848 }else{
1849 if(streamingProgressTimer != null){
1850 streamingProgressTimer.stop();
1851 }
1852 }
1853 }
1854
1855 /**
1856 * ������������������������������������������������������
1857 * @param evt
1858 *
1859 */
1860 private function currentTimeChangeEventHandler(event:TimeEvent = null):void{
1861 try{
1862 var allSec:String="00",allMin:String="0";
1863 var nowSec:String="00",nowMin:String="0";
1864
1865 this.commentTimerVpos = event.time*1000;
1866
1867 nowSec = String(int(this.videoDisplay.currentTime%60));
1868 nowMin = String(int(this.videoDisplay.currentTime/60));
1869
1870 allSec = String(int(this.videoDisplay.duration%60));
1871 allMin = String(int(this.videoDisplay.duration/60));
1872
1873 if(nowSec.length == 1){
1874 nowSec = "0" + nowSec;
1875 }
1876 if(allSec.length == 1){
1877 allSec = "0" + allSec;
1878 }
1879
1880 videoPlayer.videoController_under.slider_timeline.enabled = true;
1881 videoPlayer.videoController_under.slider_timeline.minimum = 0;
1882 videoPlayer.videoController_under.slider_timeline.maximum = videoDisplay.duration;
1883 if(!this.sliderChanging){
1884
1885 this.videoPlayer.videoController.slider_timeline.maximum = videoDisplay.duration;
1886 this.videoPlayer.videoController_under.slider_timeline.maximum = videoDisplay.duration;
1887 videoPlayer.videoController_under.slider_timeline.value = videoDisplay.currentTime;
1888
1889 }
1890 videoPlayer.videoController_under.label_time.text = nowMin + ":" + nowSec + "/" + allMin + ":" + allSec;
1891 videoPlayer.videoController_under.slider_timeline.enabled = true;
1892
1893 videoPlayer.videoController.slider_timeline.enabled = true;
1894 videoPlayer.videoController.slider_timeline.minimum = 0;
1895 videoPlayer.videoController.slider_timeline.maximum = videoDisplay.duration;
1896 if(!this.sliderChanging){
1897 videoPlayer.videoController.slider_timeline.value = videoDisplay.currentTime;
1898 }
1899 videoPlayer.videoController.label_time.text = nowMin + ":" + nowSec + "/" + allMin + ":" + allSec;
1900 videoPlayer.videoController.slider_timeline.enabled = true;
1901 }catch(error:Error){
1902 VideoDisplay(event.currentTarget).stop();
1903 trace(error.getStackTrace());
1904 }
1905 }
1906
1907 /**
1908 * ������������������������������������������������������������������������
1909 * @param evt
1910 *
1911 */
1912 private function videoDisplayCompleteHandler(evt:TimeEvent = null):void{
1913
1914 if(movieEndTimer != null){
1915 movieEndTimer.stop();
1916 movieEndTimer = null;
1917 }
1918 //���������������������������������������������������������
1919 movieEndTimer = new Timer(2000, 1);
1920 movieEndTimer.addEventListener(TimerEvent.TIMER_COMPLETE, videoPlayCompleteWaitHandler);
1921 movieEndTimer.start();
1922
1923 }
1924
1925 /**
1926 *
1927 *
1928 */
1929 private function videoPlayCompleteWaitHandler(event:TimerEvent):void{
1930 if (!isCounted)
1931 {
1932 //���������������������
1933 var videoId:String = LibraryUtil.getVideoKey(this.videoPlayer.title);
1934 if (videoId != null)
1935 {
1936 addVideoPlayCount(videoId, true);
1937 }
1938 isCounted = true;
1939 }
1940
1941 logManager.addLog("***���������������***");
1942
1943 if (videoPlayer.isRepeat)
1944 {
1945
1946 /* ���������1��������������� */
1947
1948 if (isPlayListingPlay)
1949 {
1950 if(isStreamingPlay)
1951 {
1952 logManager.addLog("***���������������������(���������������������)***");
1953 this.seek(0);
1954 if (this.videoDisplay != null)
1955 {
1956 this.videoDisplay.play();
1957 }
1958 }
1959 else
1960 {
1961 logManager.addLog("***���������������������(������������)***");
1962 this.stop();
1963 playMovie(
1964 this.videoInfoView.getPlayListUrl(playingIndex),
1965 this.videoInfoView.playList,
1966 playingIndex,
1967 this.videoPlayer.title);
1968
1969 }
1970 }
1971 else if(isStreamingPlay)
1972 {
1973 logManager.addLog("***���������������������(���������������������)***");
1974 this.seek(0);
1975 if (this.videoDisplay != null)
1976 {
1977 this.videoDisplay.play();
1978 }
1979 }
1980 else
1981 {
1982 logManager.addLog("***���������������������(������������)***");
1983 this.stop();
1984 this.play();
1985 }
1986 }
1987 else
1988 {
1989
1990 /* ������������������������������ */
1991
1992 this.stop();
1993
1994 if (isPlayListingPlay)
1995 {
1996
1997 /* ��������������������������� */
1998
1999 logManager.addLog("***���������������(������������)***");
2000 var windowType:int = PlayerController.WINDOW_TYPE_FLV;
2001 if (playingIndex >= this.videoInfoView.getPlayList().length-1)
2002 {
2003 /* ������������������������������������ */
2004 playingIndex = 0;
2005 if (this.videoPlayer.videoInfoView.isRepeatAll())
2006 {
2007 playMovie(
2008 this.videoInfoView.getPlayListUrl(playingIndex),
2009 this.videoInfoView.playList,
2010 playingIndex,
2011 PathMaker.getVideoName(this.videoInfoView.getPlayListUrl(playingIndex)));
2012 }
2013 }
2014 else
2015 {
2016 /* ������������������������������������ */
2017 playingIndex++;
2018 playMovie(
2019 this.videoInfoView.getPlayListUrl(playingIndex),
2020 this.videoInfoView.playList,
2021 playingIndex,
2022 PathMaker.getVideoName(this.videoInfoView.getPlayListUrl(playingIndex)));
2023 }
2024 }
2025 }
2026 }
2027
2028
2029 /**
2030 * SWF������������������������������������������������������������������
2031 *
2032 */
2033 private function movieClipCompleteHandler():void{
2034
2035 this.lastFrame = 0;
2036 this.lastNicowariFrame = 0;
2037
2038 if(movieEndTimer != null){
2039 movieEndTimer.stop();
2040 movieEndTimer = null;
2041 }
2042 //���������������������������������������������������������
2043 movieEndTimer = new Timer(2000, 1);
2044 movieEndTimer.addEventListener(TimerEvent.TIMER_COMPLETE, movieClipPlayCompleteWaitHandler);
2045 movieEndTimer.start();
2046
2047
2048 }
2049
2050 /**
2051 *
2052 *
2053 */
2054 private function movieClipPlayCompleteWaitHandler(event:TimerEvent):void{
2055 if(!isCounted){
2056 //���������������������
2057 var videoId:String = LibraryUtil.getVideoKey(this.source);
2058 if(videoId == null){
2059 //���������������������������������������������������������
2060 videoId = LibraryUtil.getVideoKey(this.videoPlayer.title);
2061 }
2062 if(videoId != null){
2063 addVideoPlayCount(videoId, true);
2064 }
2065 isCounted = true;
2066 }
2067
2068 logManager.addLog("***���������������***");
2069 this.lastFrame = 0;
2070 this.lastNicowariFrame = 0;
2071
2072 if(videoPlayer.isRepeat){
2073 if(isPlayListingPlay){
2074 if(isStreamingPlay){
2075 logManager.addLog("***���������������������(���������������������)***");
2076 this.seek(0);
2077 }else{
2078 logManager.addLog("***���������������������(������������)***");
2079 this.stop();
2080 mc.gotoAndStop(0);
2081 playMovie(this.videoInfoView.getPlayListUrl(playingIndex), this.videoInfoView.playList,
2082 playingIndex, this.videoPlayer.title);
2083 }
2084 }else if(isStreamingPlay){
2085 logManager.addLog("***���������������������(���������������������)***");
2086 this.seek(0);
2087 }else{
2088 logManager.addLog("***���������������������(������������)***");
2089 this.stop();
2090 mc.gotoAndStop(0);
2091 this.play();
2092 }
2093 }else{
2094 this.stop();
2095 mc.gotoAndStop(0);
2096 if(isPlayListingPlay){
2097 logManager.addLog("***���������������(������������)***");
2098 var windowType:int = PlayerController.WINDOW_TYPE_FLV;
2099 if(playingIndex >= this.videoInfoView.getPlayList().length-1){
2100 playingIndex = 0;
2101 if(this.videoPlayer.videoInfoView.isRepeatAll()){
2102 playMovie(this.videoInfoView.getPlayListUrl(playingIndex), this.videoInfoView.playList,
2103 playingIndex, PathMaker.getVideoName(this.videoInfoView.getPlayListUrl(playingIndex)));
2104 }
2105 }else{
2106 playingIndex++;
2107 playMovie(this.videoInfoView.getPlayListUrl(playingIndex), this.videoInfoView.playList,
2108 playingIndex, PathMaker.getVideoName(this.videoInfoView.getPlayListUrl(playingIndex)));
2109 }
2110 }
2111 }
2112
2113 isMovieClipStopping = false;
2114 }
2115
2116
2117 /**
2118 * ���������������������ID������������������������������������������������������������1���������������
2119 * @param videoId ���������������������������������������������������ID
2120 * @param isSave ���������������������������������������������������
2121 */
2122 private function addVideoPlayCount(videoId:String, isSave:Boolean):void{
2123 var nnddVideo:NNDDVideo = libraryManager.isExist(videoId);
2124 if(nnddVideo != null){
2125 nnddVideo.playCount = nnddVideo.playCount + 1;
2126 libraryManager.update(nnddVideo, isSave);
2127 trace("���������������������:" + nnddVideo.videoName + "," + nnddVideo.playCount);
2128 }else{
2129 //���������������
2130 trace("������������������������������������:" + videoId);
2131 }
2132 }
2133
2134 /**
2135 * ���������������������������������������������
2136 * swf���������������SWF���������������������������������������������������
2137 *
2138 * @param event
2139 *
2140 */
2141 private function commentTimerHandler(event:TimerEvent):void{
2142
2143 if(isPlayerClosing){
2144 if(commentTimer != null){
2145 commentTimer.stop();
2146 commentTimer.reset();
2147 }
2148 return;
2149 }
2150
2151 // ���������������
2152 this.setVolume(this.videoPlayer.videoController.slider_volume.value);
2153
2154 var nowSec:String="00",nowMin:String="0";
2155 nowSec = String(int(commentTimerVpos/1000%60));
2156 nowMin = String(int(commentTimerVpos/1000/60));
2157 if(nowSec.length == 1){
2158 nowSec = "0" + nowSec;
2159 }
2160 var nowTime:String = nowMin + ":" + nowSec;
2161
2162 var allSec:String="00",allMin:String="0"
2163 if(this.windowType==PlayerController.WINDOW_TYPE_SWF && this.mc != null){
2164 allSec = String(int(mc.totalFrames/swfFrameRate%60));
2165 allMin = String(int(mc.totalFrames/swfFrameRate/60));
2166 }else if(this.windowType==PlayerController.WINDOW_TYPE_FLV && this.videoDisplay != null){
2167 allSec = String(int(videoDisplay.duration%60));
2168 allMin = String(int(videoDisplay.duration/60));
2169 }
2170 if(allSec.length == 1){
2171 allSec = "0" + allSec;
2172 }
2173 var allTime:String = allMin +":" + allSec;
2174
2175 if(!isCounted && commentTimerVpos > 10000){
2176 //���������������������
2177 var videoId:String = LibraryUtil.getVideoKey(this.videoPlayer.title);
2178 if(videoId != null){
2179 addVideoPlayCount(videoId, false);
2180 }
2181 isCounted = true;
2182 }
2183
2184 //SWF���������������������������������������������������������������������
2185 if(isMovieClipPlaying && this.windowType==PlayerController.WINDOW_TYPE_SWF && this.mc != null){
2186
2187 videoPlayer.videoController_under.slider_timeline.enabled = true;
2188 videoPlayer.videoController_under.slider_timeline.minimum = 0;
2189 videoPlayer.videoController_under.slider_timeline.maximum = mc.totalFrames;
2190
2191 videoPlayer.videoController.slider_timeline.enabled = true;
2192 videoPlayer.videoController.slider_timeline.minimum = 0;
2193 videoPlayer.videoController.slider_timeline.maximum = mc.totalFrames;
2194
2195 if(!this.sliderChanging){
2196 videoPlayer.videoController_under.slider_timeline.value = mc.currentFrame;
2197 videoPlayer.videoController.slider_timeline.value = mc.currentFrame;
2198 }
2199
2200 // trace(nowMin + "/" + nowSec);
2201
2202 videoPlayer.videoController_under.label_time.text = nowTime + "/"+ allTime;
2203 videoPlayer.videoController.label_time.text = nowTime + "/"+ allTime;
2204
2205 if(mc.currentFrame >= mc.totalFrames-1 || mc.currentFrame == this.lastFrame ){
2206 this.lastFrame = mc.currentFrame;
2207 //���������movieClip������������������������������������������������������
2208 if(!isMovieClipStopping){
2209 isMovieClipStopping = true;
2210 movieClipCompleteHandler();
2211 }
2212 return;
2213 }else{
2214 if(!isMovieClipStopping){
2215 this.lastFrame = mc.currentFrame;
2216 }
2217 }
2218 }
2219
2220 var tempTime:Number = (new Date).time;
2221
2222 //SWF������������������������������������������������������������������
2223 if(this.windowType == PlayerController.WINDOW_TYPE_SWF){
2224 this.commentTimerVpos += (tempTime - this.time);
2225 }
2226
2227 //���������������������
2228 var commentArray:Vector.<NNDDComment> = this.commentManager.setComment(commentTimerVpos, (tempTime - this.time)*3, this.videoPlayer.isShowComment);
2229 this.commentManager.moveComment(tempTime/1000 - this.time/1000, videoInfoView.showCommentSec);
2230 this.commentManager.removeComment(commentTimerVpos, videoInfoView.showCommentSec * 1000);
2231 this.time = tempTime;
2232
2233 //������������������������������������������������������
2234 if(videoPlayer.videoInfoView.checkbox_SyncComment.selected && videoPlayer.videoInfoView.visible
2235 // && (videoPlayer.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE
2236 // && videoInfoView.isActive)
2237 ){
2238
2239 var lastMin:String = commentManager.getComments().lastMin;
2240
2241 var tempNowTime:String = nowTime;
2242 if(lastMin.length == 3){
2243 //���������������3���������������:���������������������
2244 if(tempNowTime.length == 4){
2245 //���������������:������������4���
2246 tempNowTime = "00" + tempNowTime;
2247 }else if(tempNowTime.length == 5){
2248 //���������������:������������5���
2249 tempNowTime = "0" + tempNowTime;
2250 }
2251 }else if(lastMin.length == 2){
2252 //���������������2���������������:������������5������
2253 if(tempNowTime.length == 4){
2254 //���������������:������������4���
2255 tempNowTime = "0" + tempNowTime;
2256 }
2257
2258 }else if(lastMin.length == 1){
2259 //���������������1���������������:������������4������
2260
2261 }
2262
2263 if(tempNowTime.length > lastMin.length+3){
2264 tempNowTime = tempNowTime.substring(1);
2265 }
2266
2267
2268 var index:int = 0;
2269 if(commentArray.length > 0 && comments != null){
2270 var myComment:NNDDComment = commentArray[0];
2271 for each(var comment:NNDDComment in commentArray){
2272 if(comment.vpos > myComment.vpos){
2273 myComment = comment;
2274 }
2275 }
2276 index = comments.getCommentIndex(tempNowTime, myComment.text);
2277
2278 if(this.videoPlayer.videoInfoView.tabNavigator_comment.selectedIndex == 0){
2279
2280 if(this.videoPlayer.videoInfoView.dataGrid_comment.verticalScrollPosition < index){
2281 index = index - (this.videoPlayer.videoInfoView.dataGrid_comment.rowCount) + 2;
2282 if(index > 0){
2283 if(index < this.videoPlayer.videoInfoView.dataGrid_comment.maxVerticalScrollPosition){
2284 this.videoPlayer.videoInfoView.dataGrid_comment.verticalScrollPosition = index;
2285 }else{
2286 this.videoPlayer.videoInfoView.dataGrid_comment.verticalScrollPosition = this.videoPlayer.videoInfoView.dataGrid_comment.maxVerticalScrollPosition;
2287 }
2288 }
2289 }
2290
2291 }else if(this.videoPlayer.videoInfoView.tabNavigator_comment.selectedIndex == 1){
2292
2293 if(this.videoPlayer.videoInfoView.dataGrid_oldComment.verticalScrollPosition < index){
2294 index = index - (this.videoPlayer.videoInfoView.dataGrid_oldComment.rowCount) + 2;
2295 if(index > 0){
2296 if(index < this.videoPlayer.videoInfoView.dataGrid_oldComment.maxVerticalScrollPosition){
2297 this.videoPlayer.videoInfoView.dataGrid_oldComment.verticalScrollPosition = index;
2298 }else{
2299 this.videoPlayer.videoInfoView.dataGrid_oldComment.verticalScrollPosition = this.videoPlayer.videoInfoView.dataGrid_oldComment.maxVerticalScrollPosition;
2300 }
2301 }
2302 }
2303
2304 }
2305
2306 }
2307 }
2308
2309
2310 //������������������������
2311 var date:Date = new Date();
2312 var hh:String = new String(int(date.getHours()));
2313 var mm:String = new String(int(date.getMinutes()));
2314 if(hh.length == 1){
2315 hh = "0" + hh;
2316 }
2317 if(mm.length == 1){
2318 mm = "0" + mm;
2319 }
2320 var jihouResult:Array = commentManager.isJihouSettingTime(hh + mm);
2321 if(jihouResult != null && playingJihou == null){
2322 //������������
2323 playingJihou = hh+mm;
2324 playNicowari(jihouResult[0], jihouResult[1]);
2325 }
2326 if(playingJihou != null && playingJihou != (hh+mm)){
2327 playingJihou = null;
2328 }
2329
2330 if(!this.videoPlayer.isShowComment){
2331 this.commentManager.removeAll();
2332 }
2333
2334 }
2335
2336 /**
2337 * ������������������������������������������������������������������������
2338 * @param volume 0������1���������������������������������������������
2339 * @return ������������������������������������
2340 *
2341 */
2342 public function setVolume(volume:Number):Number{
2343 if(this.windowReady){
2344 if(this.windowType == PlayerController.WINDOW_TYPE_FLV){
2345 if(videoDisplay != null){
2346 videoDisplay.volume = volume;
2347 this.videoPlayer.videoController.slider_volume.value = volume;
2348 this.videoPlayer.videoController_under.slider_volume.value = volume;
2349 return videoDisplay.volume;
2350 }
2351 }else if(this.windowType == PlayerController.WINDOW_TYPE_SWF){
2352 if(mc != null){
2353 var transForm:SoundTransform = new SoundTransform(volume, 0);
2354 mc.soundTransform = transForm;
2355 this.videoPlayer.videoController.slider_volume.value = volume;
2356 this.videoPlayer.videoController_under.slider_volume.value = volume;
2357 return mc.soundTransform.volume;
2358 }
2359 }
2360 }
2361 return 0;
2362 }
2363
2364 /**
2365 * PlayerController���������������CommentManager������������������
2366 * @return
2367 *
2368 */
2369 public function getCommentManager():CommentManager{
2370 return commentManager;
2371 }
2372
2373 /**
2374 * ���������������������������������������������������������������������������������������������������
2375 * ���������SWF������������������������������������������������������������������������Loader������������������������������������������������������
2376 */
2377 public function windowResized(isCommentRemove:Boolean):void{
2378
2379 if(this.windowReady){
2380
2381 //SWFLoader���������������������������������������
2382 if(swfLoader != null && this.windowType == PlayerController.WINDOW_TYPE_SWF){
2383 //������������������
2384
2385 (swfLoader.getChildAt(0) as Loader).x = 0;
2386 (swfLoader.getChildAt(0) as Loader).y = 0;
2387 var flashDistX:int = (swfLoader.getChildAt(0) as Loader).width - PlayerController.NICO_SWF_WIDTH;
2388 var flashDistY:int = (swfLoader.getChildAt(0) as Loader).height - PlayerController.NICO_SWF_HEIGHT;
2389 var scaleX:Number = swfLoader.width / ((swfLoader.getChildAt(0) as Loader).width - flashDistX);
2390 var scaleY:Number = swfLoader.height / ((swfLoader.getChildAt(0) as Loader).height - flashDistY);
2391 if(scaleX < scaleY){
2392 (swfLoader.getChildAt(0) as Loader).scaleX = scaleX;
2393 (swfLoader.getChildAt(0) as Loader).scaleY = scaleX;
2394 var centorY:int = swfLoader.height / 2;
2395 var newY:int = centorY - (PlayerController.NICO_SWF_HEIGHT*scaleX)/2;
2396 // trace("newY:"+newY);
2397 if(newY > 0){
2398 (swfLoader.getChildAt(0) as Loader).y = newY;
2399 }
2400 }else{
2401 (swfLoader.getChildAt(0) as Loader).scaleX = scaleY;
2402 (swfLoader.getChildAt(0) as Loader).scaleY = scaleY;
2403 var centorX:int = swfLoader.width / 2;
2404 var newX:int = centorX - (PlayerController.NICO_SWF_WIDTH*scaleY)/2;
2405 // trace("newX:"+newX);
2406 if(newX > 0){
2407 (swfLoader.getChildAt(0) as Loader).x = newX;
2408 }
2409 }
2410
2411 }
2412
2413 //���������SWF������������������������������������������
2414 if(nicowariSwfLoader != null){
2415
2416 (nicowariSwfLoader.getChildAt(0) as Loader).x = 0;
2417 (nicowariSwfLoader.getChildAt(0) as Loader).y = 0;
2418
2419 var nicowariDistX:Number = (nicowariSwfLoader.getChildAt(0) as Loader).width - PlayerController.NICO_WARI_WIDTH;
2420 var nicowariDistY:Number = (nicowariSwfLoader.getChildAt(0) as Loader).height - PlayerController.NICO_WARI_HEIGHT;
2421
2422 var nicowariScaleX:Number = nicowariSwfLoader.width / ((nicowariSwfLoader.getChildAt(0) as Loader).width - nicowariDistX);
2423 var nicowariScaleY:Number = nicowariSwfLoader.height / ((nicowariSwfLoader.getChildAt(0) as Loader).height - nicowariDistY);
2424 if(nicowariScaleX < nicowariScaleY){
2425 (nicowariSwfLoader.getChildAt(0) as Loader).scaleX = nicowariScaleX;
2426 (nicowariSwfLoader.getChildAt(0) as Loader).scaleY = nicowariScaleX;
2427 centorY = nicowariSwfLoader.height / 2;
2428 newY = centorY - (PlayerController.NICO_WARI_HEIGHT*nicowariScaleX)/2;
2429 // trace("newY:"+newY);
2430 if(newY > 0){
2431 (nicowariSwfLoader.getChildAt(0) as Loader).y = newY;
2432 }
2433 }else{
2434 (nicowariSwfLoader.getChildAt(0) as Loader).scaleX = nicowariScaleY;
2435 (nicowariSwfLoader.getChildAt(0) as Loader).scaleY = nicowariScaleY;
2436 centorX = nicowariSwfLoader.width / 2;
2437 newX = centorX - (PlayerController.NICO_WARI_WIDTH*nicowariScaleY)/2;
2438 // trace("newX:"+newX);
2439 if(newX > 0){
2440 (nicowariSwfLoader.getChildAt(0) as Loader).x = newX;
2441 }
2442 }
2443 }
2444
2445 if(isCommentRemove){
2446 // ���������������������������
2447 commentManager.removeAll();
2448 }else{
2449 // ���������������������������������
2450 commentManager.validateCommentPosition();
2451 }
2452
2453
2454
2455 }
2456 }
2457
2458 /**
2459 * ���������������seekTime������������������������������������������������
2460 * @param seekTime ������������������������������������������������������������������������������������������������������
2461 *
2462 */
2463 public function seek(seekTime:Number):void{
2464 trace(seekTime);
2465 if(this.windowReady){
2466 if((new Date().time)-lastSeekTime > 1000){
2467 if((videoDisplay != null && videoDisplay.initialized && videoDisplay.duration > 0)
2468 || (swfLoader != null && swfLoader.initialized)){
2469
2470
2471 trace("seekStart:" + seekTime);
2472 this.commentTimer.stop();
2473 this.commentTimer.reset();
2474
2475 //������������������������������������������������������
2476 commentManager.getComments().resetEnableShowFlag();
2477
2478 //���������������������������������������������
2479 this.videoPlayer.videoInfoView.dataGrid_comment.verticalScrollPosition = 0;
2480
2481 if(this.windowType == PlayerController.WINDOW_TYPE_FLV){
2482 videoDisplay.seek(seekTime);
2483 commentTimerVpos = seekTime*1000;
2484 }else if(this.windowType == PlayerController.WINDOW_TYPE_SWF){
2485 if(pausing){
2486 mc.gotoAndStop(int(seekTime));
2487 }
2488 else
2489 {
2490 mc.gotoAndPlay(int(seekTime));
2491 }
2492 commentTimerVpos = (seekTime/swfFrameRate)*1000;
2493 }
2494
2495 commentManager.removeAll();
2496
2497 if(!this.pausing){
2498 commentTimer.start();
2499 }
2500 lastSeekTime = new Date().time;
2501
2502
2503
2504 }
2505 }
2506 }
2507 }
2508
2509
2510 /**
2511 * ������Player������������������������������������������������
2512 * @return Player���������������������������true������������������������������false���
2513 *
2514 */
2515 public function isOpen():Boolean{
2516 if(this.videoPlayer.nativeWindow != null){
2517 return !this.videoPlayer.closed;
2518 }
2519 return false;
2520 }
2521
2522 /**
2523 * Player������������������Open������������
2524 *
2525 */
2526 public function open():Boolean{
2527 if(this.videoPlayer != null){
2528 this.videoPlayer.open();
2529 }else{
2530 return false;
2531 }
2532 if(this.videoInfoView != null){
2533 this.videoInfoView.open();
2534 }else{
2535 return false;
2536 }
2537 return true;
2538 }
2539
2540 /**
2541 * ���������������������Player������������������������������
2542 *
2543 */
2544 public function playerExit():void{
2545
2546 this.stop();
2547 if(this.videoPlayer != null && this.videoPlayer.nativeWindow != null && !this.videoPlayer.closed){
2548 this.videoPlayer.restore();
2549 // this.videoPlayer.saveStore();
2550 this.videoPlayer.close();
2551 }
2552 if(this.videoPlayer != null && this.videoInfoView.nativeWindow != null && !this.videoInfoView.closed){
2553 this.saveNgList();
2554 this.videoInfoView.restore();
2555 // this.videoInfoView.saveStore();
2556 this.videoInfoView.close();
2557 }
2558 }
2559
2560 /**
2561 * ���������������������ID������������������������������������
2562 * ���������������������������������������������(������������������������������������������������������������)���������������
2563 * ���������������������������������������������
2564 *
2565 * @param videoId
2566 *
2567 */
2568 public function reload(videoId:String):void
2569 {
2570
2571 stop();
2572
2573 var nnddVideo:NNDDVideo = libraryManager.isExist(videoId);
2574
2575 if (isStreamingPlay || nnddVideo == null)
2576 {
2577 playMovie("http://www.nicovideo.jp/watch/" + videoId);
2578 }
2579 else
2580 {
2581 playMovie(nnddVideo.getDecodeUrl());
2582 }
2583
2584 }
2585
2586 /**
2587 * ���������NG���������������������������������
2588 *
2589 */
2590 public function saveNgList():void{
2591 this.ngListManager.saveNgList(LibraryManagerBuilder.instance.libraryManager.systemFileDir);
2592 }
2593
2594 public function getCommentListProvider():ArrayCollection{
2595 return this.videoPlayer.getCommentListProvider();
2596 }
2597
2598 public function getOwnerCommentListProvider():ArrayCollection{
2599 return this.videoPlayer.videoInfoView.ownerCommentProvider;
2600 }
2601
2602
2603 /**
2604 * ������������������NG���������������������������������������������������
2605 * @param date ������������������������������������
2606 */
2607 public function reloadLocalComment(date:Date = null):void{
2608
2609 if(date != null){
2610 trace(date.time);
2611 }
2612
2613 if(this.videoInfoView.ngListProvider != null){
2614
2615 var videoMin:int = 1;
2616 if(this.windowType==PlayerController.WINDOW_TYPE_SWF && this.mc != null){
2617 videoMin = mc.totalFrames/swfFrameRate/60
2618 }else if(this.windowType==PlayerController.WINDOW_TYPE_FLV && this.videoDisplay != null){
2619 videoMin = videoDisplay.duration/60;
2620 }
2621 ++videoMin;
2622
2623 if(!this.isStreamingPlay && this.source != null && this.source != "" ){
2624 comments = new Comments(
2625 PathMaker.createNomalCommentPathByVideoPath(source),
2626 PathMaker.createOwnerCommentPathByVideoPath(source),
2627 this.videoPlayer.getCommentListProvider(),
2628 this.videoPlayer.videoInfoView.ownerCommentProvider,
2629 this.ngListManager,
2630 this.videoInfoView.isShowOnlyPermissionComment,
2631 this.videoInfoView.isHideSekaShinComment,
2632 this.videoInfoView.showCommentCountPerMin * videoMin,
2633 this.videoInfoView.showOwnerCommentCountPerMin * videoMin,
2634 this.videoInfoView.isNgUpEnable, date);
2635 }else if(this.isStreamingPlay){
2636 comments = new Comments(
2637 PathMaker.createNomalCommentPathByVideoPath(LibraryManagerBuilder.instance.libraryManager.tempDir.url + "/nndd.flv"),
2638 PathMaker.createOwnerCommentPathByVideoPath(LibraryManagerBuilder.instance.libraryManager.tempDir.url + "/nndd.flv"),
2639 this.videoPlayer.getCommentListProvider(),
2640 this.videoPlayer.videoInfoView.ownerCommentProvider,
2641 this.ngListManager,
2642 this.videoInfoView.isShowOnlyPermissionComment,
2643 this.videoInfoView.isHideSekaShinComment,
2644 this.videoInfoView.showCommentCountPerMin * videoMin,
2645 this.videoInfoView.showOwnerCommentCountPerMin * videoMin,
2646 this.videoInfoView.isNgUpEnable, date);
2647 }
2648 commentManager.setComments(comments);
2649 }
2650
2651 this.windowResized(true);
2652
2653 }
2654
2655 /**
2656 * ���������������������������������������������������������������
2657 * @param videoPath
2658 *
2659 */
2660 private function setInfo(videoPath:String, thumbInfoPath:String, ichibaInfoPath:String, isStreaming:Boolean):void{
2661
2662 var videoID:String = PathMaker.getVideoID(videoPath);
2663
2664 if(!isStreaming){ //������������������������������������������������������������������������������������������������������������������������������
2665
2666 if(videoID != null && (UserManager.instance.user != null && UserManager.instance.password != null) && (UserManager.instance.user != "" && UserManager.instance.password != "") ){
2667
2668 //���������
2669 videoInfoView.ichibaNicoProvider.addItem({
2670 col_image:"",
2671 col_info:"������������������������������",
2672 col_link:""
2673 });
2674 videoPlayer.videoInfoView.owner_text_nico = "";
2675
2676 }else{
2677 videoInfoView.ichibaNicoProvider.addItem({
2678 col_image:"",
2679 col_info:"������������������������������������������������",
2680 col_link:""
2681 });
2682
2683 var thumbInfoAnalyzer:ThumbInfoAnalyzer = null;
2684
2685 if(videoPath != null){
2686
2687 var thumbInfoPath:String = PathMaker.createThmbInfoPathByVideoPath(videoPath);
2688
2689 var fileIO:FileIO = new FileIO(logManager);
2690 var xml:XML = fileIO.loadXMLSync(thumbInfoPath, false);
2691
2692 if(xml != null){
2693 thumbInfoAnalyzer = new ThumbInfoAnalyzer(xml);
2694 }
2695 }
2696
2697 if(thumbInfoAnalyzer != null){
2698
2699 var dateString:String = "(������������������������������)";
2700 var ownerText:String = "(������������������������������������)";
2701 var htmlInfo:String = "";
2702
2703 if(thumbInfoAnalyzer != null){
2704 var dateFormatter:DateFormatter = new DateFormatter();
2705 dateFormatter.formatString = "YYYY/MM/DD JJ:NN:SS";
2706 var date:Date = thumbInfoAnalyzer.getDateByFirst_retrieve();
2707 dateString = "���������:(������������������������)";
2708 if(date != null){
2709 dateString = "���������:" + dateFormatter.format(date);
2710 }
2711
2712 htmlInfo = thumbInfoAnalyzer.htmlTitle + "<br />" + dateString + "<br />" + thumbInfoAnalyzer.playCountAndCommentCountAndMyListCount;
2713
2714 ownerText = thumbInfoAnalyzer.thumbInfoHtml + "\n(���������������������������������)";
2715 }else{
2716
2717 if(videoPlayer.videoInfoView.owner_text_local.length > 1){
2718 ownerText = videoPlayer.videoInfoView.owner_text_local + "\n(���������������������������������)";
2719 }
2720
2721 htmlInfo = "(������������������������������)<br />" + dateString + "<br />(���������������������������������)";
2722 }
2723
2724 videoPlayer.videoInfoView.text_info.htmlText = htmlInfo;
2725
2726 if(videoPlayer.videoInfoView.checkbox_showHtml.selected){
2727 videoPlayer.videoInfoView.owner_text_temp = videoPlayer.videoInfoView.owner_text_nico;
2728 videoPlayer.videoInfoView.owner_text_nico = ownerText;
2729 }else{
2730 videoPlayer.videoInfoView.owner_text_temp = ownerText;
2731 }
2732
2733 videoPlayer.videoInfoView.nicoTagProvider = thumbInfoAnalyzer.tagArray;
2734 videoPlayer.videoInfoView.nicoTagProvider.push("(���������������������������������������������������������������)");
2735 videoPlayer.setTagArray(thumbInfoAnalyzer.tagStrings);
2736
2737 }else{
2738
2739 videoPlayer.videoInfoView.text_info.htmlText = "(������������������������������)<br />(������������������������������)<br />(���������������������������������)";
2740 videoPlayer.videoInfoView.owner_text_nico = "(������������������������������)";
2741
2742 videoPlayer.videoInfoView.nicoTagProvider = videoPlayer.videoInfoView.localTagProvider;
2743 videoPlayer.videoInfoView.nicoTagProvider.push("(���������������������������������������������������������������)");
2744
2745 var tagStrings:Vector.<PlayerTagString> = new Vector.<PlayerTagString>();
2746 for each(var string:String in videoPlayer.videoInfoView.nicoTagProvider)
2747 {
2748 var tagString:PlayerTagString = new PlayerTagString(string);
2749 tagStrings.push(tagString);
2750 }
2751 videoPlayer.setTagArray(tagStrings);
2752
2753 }
2754 }
2755 }
2756
2757 if(videoID != null && (UserManager.instance.user != null && UserManager.instance.password != null) && (UserManager.instance.user != "" && UserManager.instance.password != "") ){
2758 retryCount = 0;
2759 setNicoVideoPageInfo(PathMaker.getVideoID(videoID), 0, isStreaming); //���������������������������������������������������
2760 }
2761
2762 setNicoRelationInfo(videoID); //������������������������������������������������������������������������������
2763
2764 setLocalIchibaInfo(ichibaInfoPath, isStreaming);
2765 setLocalThumbInfo(videoID, thumbInfoPath, isStreaming);
2766
2767 }
2768
2769
2770
2771 //-------------------------------------------------------
2772
2773 /**
2774 * ������������������������������������
2775 *
2776 */
2777 public function setNicoRelationInfoForRelationSortTypeChange():void{
2778 var videoId:String = PathMaker.getVideoID(videoPlayer.title);
2779 if(videoId != null){
2780 setNicoRelationInfo(videoId);
2781 }
2782 }
2783
2784 /**
2785 * ������������������������������������������������������������������������
2786 * @param videoID
2787 *
2788 */
2789 private function setNicoRelationInfo(videoID:String):void{
2790
2791 (videoInfoView.relationDataProvider as ArrayCollection).removeAll();
2792
2793 if(videoInfoView == null){
2794 return;
2795 }
2796
2797 if(nicoRelationInfoLoader != null){
2798 try{
2799 nicoRelationInfoLoader.close();
2800 }catch(error:Error){
2801 }
2802 }
2803
2804 videoInfoView.setRelationComboboxEnable(false);
2805
2806 var sort:String = RelationTypeUtil.convertRelationSortType(videoInfoView.relationSortIndex);
2807 var order:String = RelationTypeUtil.convertRelationOrderType(videoInfoView.relationOrderIndex);
2808
2809 logManager.addLog("���������������������������������(videoId:" + videoID + ", sort:" + sort + ", order:" + order + ")");
2810
2811 nicoRelationInfoLoader = new ApiGetRelation();
2812