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