示例#1
0
        private void ShowMediaInfoFlyout(FrameworkElement elem)
        {
            PlayListFile plf = null;

            if (elem != null && (plf = elem.DataContext as PlayListFile) != null)
            {
                MessengerInstance.Send <Message <DecoderTypes> >(
                    new Message <DecoderTypes>(async(decoderType) =>
                {
                    int newIndex          = PlayListFileSource.IndexOf(PlayListFileSource.FirstOrDefault(x => x == plf));
                    _RequestedDecoderType = decoderType;
                    if (SelectedIndex != newIndex)
                    {
                        SelectedIndex = newIndex;
                    }
                    //로딩 패널 표시
                    MessengerInstance.Send(new Message("IsOpen", true), "ShowLoadingPanel");
                    await ThreadPool.RunAsync(async handler =>
                    {
                        await DispatcherHelper.RunAsync(() =>
                        {
                            //재생요청
                            RequestPlayback(false);
                        });
                    }, WorkItemPriority.Normal);
                })
                    .Add("StorageItemInfo", plf)
                    .Add("ButtonName", "CodecInformation"),
                    "ShowMediaFileInformation");
            }
        }
        public void KrakenHeaderTest(byte[] rawData, DecoderTypes type)
        {
            fixed(byte *source = rawData)
            {
                var header = new KrakenHeader(source);

                Assert.Equal(type, header.DecoderType);
                Assert.True(header.RestartDecoder);
                Assert.False(header.Uncompressed);
                Assert.False(header.UseChecksums);
            }
        }
示例#3
0
        public void FromXML(string xml)
        {
            XmlDocument dom = new XmlDocument();

            dom.LoadXml(xml);
            XmlNode xNode = dom.DocumentElement;

            if ((xNode.Name == DECODERS_ELEMENT) && (xNode.HasChildNodes))
            {
                foreach (XmlNode jNode in xNode.ChildNodes)
                {
                    if (jNode.Name == Decoder.DECODER_ELEMENT)
                    {
                        DecoderTypes decoderType = DecoderTypes.Unknown;
                        foreach (XmlAttribute jAttribute in jNode.Attributes)
                        {
                            if (jAttribute.Name == TYPE_ATTRIBUTE)
                            {
                                decoderType = (DecoderTypes)Enum.Parse(typeof(DecoderTypes), jAttribute.Value, true);
                            }
                        }
                        Decoder decoder = null;
#if (PocketPC)
                        if (decoderType == DecoderTypes.HTCDiamondTouch)
                        {
                            decoder = new HTCDiamondTouchDecoder();
                        }
                        else
#endif
                        if (decoderType == DecoderTypes.MITes)
                        {
                            decoder = new MITesDecoder();
                        }
                        else if (decoderType == DecoderTypes.Wockets)
                        {
                            decoder = new WocketsDecoder();
                        }
                        else if (decoderType == DecoderTypes.Sparkfun)
                        {
                            decoder = new SparkfunDecoder();
                        }
                        else if (decoderType == DecoderTypes.HTCDiamondTouch)
                        {
                            decoder = new HTCDiamondTouchDecoder();
                        }

                        decoder.FromXML(jNode.OuterXml);
                        this.Insert(decoder._ID, decoder);
                    }
                }
            }
        }
示例#4
0
        private async void RequestPlayback(DecoderTypes decoderType, StorageItemInfo storageItemInfo, bool isPrevOrNext)
        {
            if (!VersionHelper.IsUnlockNetworkPlay)
            {
                MessengerInstance.Send(new Message(), "CheckInterstitialAd");
                return;
            }

            if (!isPrevOrNext)
            {
                MessengerInstance.Send(new Message("IsOpen", true)
                                       .Add("LoadingTitle", ResourceLoader.GetForCurrentView().GetString("Loading/Playback/Text")), "ShowLoadingPanel");
            }

            //현재 파일 이후의 파일들을 모두 지금 재생중에 추가
            var files = StorageItemGroupSource.Where(x => x.Type == StorageItemTypes.File).SelectMany(x => x.Items).ToList();

            PlayListFile currPlayListFile = null;
            PlayListFile prevPlayListFile = null;
            PlayListFile nextPlayListFile = null;

            for (int i = 0; i < files.Count; i++)
            {
                var file    = await files[i].GetStorageFileAsync();
                var orgFile = await storageItemInfo.GetStorageFileAsync();

                if (file.FolderRelativeId == orgFile.FolderRelativeId)
                {
                    currPlayListFile = new PlayListFile(file);

                    if (i > 0)
                    {
                        prevPlayListFile = new PlayListFile(await files[i - 1].GetStorageFileAsync());
                    }

                    if (i + 1 < files.Count)
                    {
                        nextPlayListFile = new PlayListFile(await files[i + 1].GetStorageFileAsync());
                    }
                    break;
                }
            }

            MessengerInstance.Send(
                new Message()
                .Add("PrevPlayListFile", prevPlayListFile)
                .Add("CurrPlayListFile", currPlayListFile)
                .Add("NextPlayListFile", nextPlayListFile)
                .Add("DecoderType", decoderType),
                "RequestPlayback");
        }
示例#5
0
        protected override void RegisterMessage()
        {
            MessengerInstance.Register <bool>(this, "DLNABackRequested", (val) =>
            {
                ToUpperTapped(null, null);
            });

            MessengerInstance.Register <Message>(this, "DLNANextPlayListFile", (val) =>
            {
                DecoderTypes decoderType  = val.GetValue <DecoderTypes>("DecoderType");
                PlayListFile playListFile = val.GetValue <PlayListFile>("NextPlayListFile");

                RequestPlayback(decoderType, playListFile, true);
            });
        }
示例#6
0
        private async void LoadPlayListFilesAsync(List <PlayListFile> playListFileList)
        {
            await ThreadPool.RunAsync(async handler =>
            {
                if (playListFileList != null)
                {
                    for (int i = 1; i <= playListFileList.Count; i++)
                    {
                        var playListFile = playListFileList[i - 1];
                        //파일에 필요한 정보 셋팅
                        SetPlayListFile(playListFile);
                        //자막 목록 미리 로드
                        await SetSubtitleList(playListFile);

                        int mod = i % LOAD_ITEM_COUNT;
                        if (mod == 0 || i == playListFileList.Count)
                        {
                            await DispatcherHelper.RunAsync(() =>
                            {
                                int j = mod > 0 ? i - mod : i - LOAD_ITEM_COUNT;
                                for (; j < i; j++)
                                {
                                    PlayListFileSource.Add(playListFileList[j]);
                                    //추가 정보 로드
                                    LoadExtraInfoAsync(playListFileList[j]);
                                }
                            });
                        }
                    }
                }

                //로딩 완료 처리
                await DispatcherHelper.RunAsync(() =>
                {
                    IsStopLoadingIndicator = true;
                    if (PlayListFileSource.Any(x => PreparedData?.StorageItemInfo.Path == x.Path))
                    {
                        _RequestedDecoderType = PreparedData.DecoderType;
                        RequestPlaybackWithLoadingPanel(PreparedData.StorageItemInfo);
                        //초기화
                        PreparedData = null;
                    }
                });
            }, WorkItemPriority.Low);
        }
示例#7
0
        private void RequestPlayback(bool resetDecoder)
        {
            var mv = SimpleIoc.Default.GetInstance <MainViewModel>();

            if (!mv.AppProtection.IsHideAppLockPanel)
            {
                return;
            }

            if (SelectedIndex > -1 && SelectedIndex < PlayListFileSource.Count)
            {
                PlayListFile prevPlayListFile = null;
                PlayListFile nextPlayListFile = null;

                if (SelectedIndex - 1 > -1)
                {
                    prevPlayListFile = PlayListFileSource[SelectedIndex - 1];
                }

                if (SelectedIndex + 1 < PlayListFileSource.Count)
                {
                    nextPlayListFile = PlayListFileSource[SelectedIndex + 1];
                }

                //디코더 타입 오버라이드
                if (resetDecoder)
                {
                    _RequestedDecoderType = Settings.Playback.DefaultDecoderType;
                }

                var frame = Window.Current.Content as Frame;
                if (frame != null)
                {
                    //재생 요청
                    MessengerInstance.Send(
                        new Message()
                        .Add("CurrPlayListFile", PlayListFileSource[SelectedIndex])
                        .Add("PrevPlayListFile", prevPlayListFile)
                        .Add("NextPlayListFile", nextPlayListFile)
                        .Add("DecoderType", _RequestedDecoderType)
                        , "RequestPlayback");
                }
            }
        }
示例#8
0
        private async void LoadPlayList()
        {
            _SubtitlesList.Clear();
            //목록 초기화
            PlayListFileSource.Clear();
            //DB에서 조회
            List <PlayListFile> playListFileList = new List <PlayListFile>();

            playListDAO.LoadPlayListFiles(CurrentPlayList, playListFileList);
            if (playListFileList.Count > 0)
            {
                IsStopLoadingIndicator = false;
                int count = playListFileList.Count > PreparedData?.SyncLoadPlayListFileCount ? PreparedData.SyncLoadPlayListFileCount : playListFileList.Count;

                //재생목록 파일들의 폴더 리스트
                foreach (var path in playListFileList.GroupBy(x => x.ParentFolderPath).Select(x => x.Key))
                {
                    _SubtitlesList.Add(path, null);
                }

                //탐색기에서 파일 선택시 선택한 파일 이후를 모두 지금 재생중에 로딩이 되므로 하나를 먼저 로드할 필요가 있음.
                await LoadPlayListFiles(playListFileList.GetRange(0, count));

                if (PlayListFileSource.Any(x => PreparedData?.StorageItemInfo.Path == x.Path))
                {
                    _RequestedDecoderType = PreparedData.DecoderType;
                    RequestPlaybackWithLoadingPanel(PreparedData.StorageItemInfo);
                    //초기화
                    PreparedData = null;
                }

                if (playListFileList.Count == count)
                {
                    //더이상 로딩할 아이템이 없으면 로딩 표시 정지
                    IsStopLoadingIndicator = true;
                }
                else
                {
                    //로딩할 아이템이 남았으면 비동기로 로딩
                    LoadPlayListFilesAsync(playListFileList.GetRange(count, playListFileList.Count - count));
                }
            }
            _ChangedIndexList.Clear();
        }
示例#9
0
        protected override void RegisterMessage()
        {
            MessengerInstance.Register <PlayList>(this, "ChangePlayList", (playList) =>
            {
                CurrentPlayList = playList;
            });

            MessengerInstance.Register <bool>(this, "ResetSelectionMode", (val) =>
            {
                SelectedIndex = -1;
                BackNormalButtonSetTapped(null, null);
            });

            MessengerInstance.Register <Message>(this, "PrepareLoadPlayListFile", (message) =>
            {
                PreparedData = new PreparedData
                {
                    //재생목록에서 지금재생중으로 이동 직전에 동기로드 카운트 설정
                    //지금 재생할 비디오와 다음 재생 프리뷰용으로 총 2개
                    SyncLoadPlayListFileCount = 2,
                    DecoderType     = message.GetValue <DecoderTypes>("DecoderType"),
                    StorageItemInfo = message.GetValue <StorageItemInfo>("StorageItemInfo")
                };
            });

            //FileAssociation에서 이미 "지금 재생중"이 선택되어진 상태에서 넘어온다.
            MessengerInstance.Register <Message>(this, "SelectPlayListFile", async(message) =>
            {
                BackNormalButtonSetTapped(null, null);
                _RequestedDecoderType = message.GetValue <DecoderTypes>("DecoderType");
                var storageItemInfo   = message.GetValue <StorageItemInfo>("StorageItemInfo");
                var orderNo           = PlayListFileSource.LastOrDefault() != null ? (int)PlayListFileSource.LastOrDefault().OrderNo : 0;

                //새롭게 추가된
                List <PlayListFile> playListFileList = new List <PlayListFile>();
                playListDAO.LoadPlayListFiles(CurrentPlayList, orderNo, (playListFile) =>
                {
                    //이벤트 등록 및 표시명 설정
                    SetPlayListFile(playListFile);
                    //리스트에 바인딩
                    if (PlayListFileSource.All(x => x.Path != playListFile.Path))
                    {
                        PlayListFileSource.Add(playListFile);
                    }
                    else if (PlayListFileSource.Any(x => x.Path == playListFile.Path && x.OrderNo != playListFile.OrderNo))
                    {
                        //기존 리스트에 존재하나 순서가 변경된 경우
                        var tmp = PlayListFileSource.First(x => x.Path == playListFile.Path && x.OrderNo != playListFile.OrderNo);
                        PlayListFileSource.Remove(tmp);
                        PlayListFileSource.Add(playListFile);
                    }
                    //추가 정보 로드
                    LoadExtraInfoAsync(playListFile);
                });

                var newIndex = PlayListFileSource.IndexOf(PlayListFileSource.LastOrDefault(x => x.Path == storageItemInfo.Path));
                if (newIndex > -1 && newIndex < PlayListFileSource.Count)
                {
                    SelectedIndex = newIndex;
                    //로딩 패널 표시
                    MessengerInstance.Send(new Message("IsOpen", true), "ShowLoadingPanel");
                    await ThreadPool.RunAsync(async handler =>
                    {
                        await DispatcherHelper.RunAsync(() =>
                        {
                            //재생요청
                            RequestPlayback(true);
                        });
                    }, WorkItemPriority.Normal);
                }
            });

            MessengerInstance.Register <int>(this, "NextPlayListFile", (index) =>
            {
                var nextIndex = SelectedIndex + index;
                if (nextIndex > -1 && nextIndex < PlayListFileSource.Count)
                {
                    SelectedIndex = nextIndex;
                    PlayListFileSource[SelectedIndex].PausedTime = TimeSpan.FromSeconds(0);
                    RequestPlayback(false);
                }
            });

            MessengerInstance.Register <Message>(this, "SavePlayListFile", (message) =>
            {
                var file = message.GetValue <PlayListFile>();
                playListDAO.UpdatePausedTime(file);
                //System.Diagnostics.Debug.WriteLine("PlayListViewModel : Message - SavePlayListFile =>" + file.PausedTime);
            });
        }
示例#10
0
 public void SetResult(DecoderTypes resDecoderType, DecoderStates status)
 {
     _Payload.ResDecoderType = resDecoderType;
     _Payload.Status         = status;
 }
示例#11
0
        private async void RequestPlayback(DecoderTypes decoderType, NetworkItemInfo networkItemInfo, bool isPrevOrNext)
        {
            if (!VersionHelper.IsUnlockNetworkPlay)
            {
                MessengerInstance.Send(new Message(), "CheckInterstitialAd");
                return;
            }

            MessengerInstance.Send(new Message("IsOpen", true)
                                   .Add("LoadingTitle", ResourceLoader.GetForCurrentView().GetString("Loading/Playback/Text")), "ShowLoadingPanel");

            var items = NetworkItemGroupSource.Where(x => x.Type == StorageItemTypes.File).SelectMany(x => x.Items).ToList();
            var item  = networkItemInfo;
            var index = items.IndexOf(item);

            NetworkItemInfo prevItemInfo = null;
            NetworkItemInfo currItemInfo = item;
            NetworkItemInfo nextItemInfo = null;

            if ((bool)items?.Any())
            {
                if (index > 0)
                {
                    prevItemInfo = items[index - 1];
                }

                if (index < items.Count - 1)
                {
                    nextItemInfo = items[index + 1];
                }
            }

            var msg = new Message()
                      .Add("PrevPlayListFile", prevItemInfo)
                      .Add("CurrPlayListFile", currItemInfo)
                      .Add("NextPlayListFile", nextItemInfo)
                      .Add("DecoderType", decoderType);

            //Stream videoStream = null;
            //IItemContentRequest request = null;

            switch (ConnectedServerType)
            {
            case ServerTypes.OneDrive:
                /*
                 * request = OneDriveClient.Drive.Root.ItemWithPath(GetAbsolutePath(networkItemInfo)).Content.Request();
                 * // videoStream = await request.GetAsync();
                 *
                 * var provider = OneDriveClient.AuthenticationProvider as MsaAuthenticationProvider;
                 * var url = request.RequestUrl + "?access_token=" + provider.CurrentAccountSession.AccessToken;
                 *
                 * var webReq = System.Net.WebRequest.Create(url);
                 * var webRes = await webReq.GetResponseAsync();
                 * //Stream stream = webRes.GetResponseStream();
                 * url = url.Replace("https://", "http://");
                 *
                 * //        msg.Add("CurrPlayListFileStream", stream.AsRandomAccessStream());
                 * msg.Add("CurrPlayListFileUrl", url);
                 * msg.Add("CurrPlayListFileContentType", request.ContentType);
                 */

                for (int i = 0; i < currItemInfo.SubtitleList?.Count; i++)
                {
                    currItemInfo.SubtitleList[i] = (await GetStreamingUrlAsync(GetAbsolutePath(currItemInfo.ParentFolderPath, currItemInfo.SubtitleList[i]))).AbsoluteUri;
                }

                currItemInfo.Uri = await GetStreamingUrlAsync(GetAbsolutePath(currItemInfo));

                break;
            }

            MessengerInstance.Send(msg, "RequestPlayback");
        }