예제 #1
0
        public VideoHtml5Handler(WebBrowser browser)
        {
            Browser = browser;

            //忌々しいアクティブコンテンツ云々を無効にする WebBrowserの初期化時にこの値がリセットされるので
            //新しくWebBrowserのインスタンスを生成する度に呼ばないとだめっぽいね
            CoInternetSetFeatureEnabled(FEATURE_LOCALMACHINE_LOCKDOWN, SET_FEATURE_ON_PROCESS, false);

            Browser.ObjectForScripting = new ObjectForScripting(this);
            //
            Browser.LoadCompleted += async(obj, e) => {
                var autoPlay = Settings.Instance.AutoPlay;

                //プレイリストなら強制的にtrue
                if (Owner.IsPlayList())
                {
                    autoPlay = true;
                }

                if (Owner.ApiData.Video.DmcInfo != null && !Owner.ApiData.Video.Title.Contains("ドットバイドット"))
                {
                    var dmc     = new NicoNicoDmcSession(Owner.ApiData.Video.DmcInfo);
                    var session = await dmc.CreateAsync();


                    if (DmcHeartBeatTimer != null)
                    {
                        DmcHeartBeatTimer.Elapsed += async(state, ev) => {
                            await dmc.HeartbeatAsync(session.Id);
                        };

                        DmcHeartBeatTimer.Enabled = true;
                    }

                    Browser?.InvokeScript("VideoViewModel$initialize", new object[] { session.ContentUri, Owner.ApiData.Context.InitialPlaybackPosition ?? 0, autoPlay });
                }
                else
                {
                    if (string.IsNullOrEmpty(Owner.ApiData.Video.SmileInfo.Url))
                    {
                        App.ViewModelRoot.Messenger.Raise(new TransitionMessage(typeof(Views.PaidVideoView), new PaidVideoViewModel(Owner), TransitionMode.NewOrActive));
                        return;
                    }

                    if (VideoType == NicoNicoVideoType.RTMP)
                    {
                        Browser.InvokeScript("VideoViewModel$initialize", new object[] { Owner.ApiData.Video.SmileInfo.Url + "^" + Owner.ApiData.FmsToken, Owner.ApiData.Context.InitialPlaybackPosition ?? 0, autoPlay });
                    }
                    else
                    {
                        Browser.InvokeScript("VideoViewModel$initialize", new object[] { Owner.ApiData.Video.SmileInfo.Url, Owner.ApiData.Context.InitialPlaybackPosition ?? 0, autoPlay });
                    }
                }


                if (VideoType != NicoNicoVideoType.MP4 && VideoType != NicoNicoVideoType.New)
                {
                    Owner.ChangePlayRateAvalilable = PlayBackRateAvalilableReason.NotSupportVideo;
                }
                else
                {
                    Owner.ChangePlayRateAvalilable = PlayBackRateAvalilableReason.Available;
                }

                Owner.Volume = Owner.Volume;
            };

            //ブラウザにキーボードイベントが走らないようにする
            //走られると+とか押された時に動画の再生速度とかが変わっちゃうんだよね
            //それはちょっと困る
            Browser.PreviewKeyDown += (obj, e) => {
                e.Handled = true;
            };
        }