示例#1
0
        //-------------------------------------------------------------
        // 概要:チャンネル情報取得
        // 詳細:指定URL,指定ストリームIDのチャンネル情報を取得する
        //-------------------------------------------------------------
        private static ChannelInfo GetChannelInfo(string xmlUri, string streamId)
        {
            // URL情報の取得
            StreamUrlInfo info = StreamUrlAnalyzer.GetUrlInfo(TestSettings.StreamUrl);

            info.StreamId = streamId;

            // XMLの読み込み
            XElement elements = XElement.Load(xmlUri);

            // チャンネル情報取得
            PeerCastConnection pecaConnection = new PeerCastConnection(info);
            PrivateObject      accessor       = new PrivateObject(pecaConnection);
            ChannelInfo        channelInfo    = (ChannelInfo)accessor.Invoke("AnlyzeViewXML", new object[] { elements });

            return(channelInfo);
        }
示例#2
0
        //-------------------------------------------------------------
        // 概要:指定URLを再生
        // 詳細:動画を再生し、チャンネル情報を取得する
        //-------------------------------------------------------------
        public void Open(string streamUrl)
        {
            Logger.Instance.DebugFormat("Open(streamUrl:{0})", streamUrl);

            // PeerCast通信の準備
            StreamUrlInfo info = StreamUrlAnalyzer.GetUrlInfo(streamUrl);

            pecaConnect = new PeerCastConnection(info);

            // 動画再生開始
            moviePlayer.PlayMoive(streamUrl);

            // チャンネル更新スレッド
            updateChannelInfoWorker.DoWork += (sender, e) =>
            {
                for (int i = 0; i < UpdateRetryCount; i++)
                {
                    Logger.Instance.DebugFormat("チャンネル更新トライ[{0}回目]", i + 1);
                    ChannelInfo chInfo = pecaConnect.GetChannelInfo();
                    if (!String.IsNullOrEmpty(chInfo.Name))
                    {
                        ChannelInfo = chInfo;
                        e.Result    = true;
                        return;
                    }

                    System.Threading.Thread.Sleep(1000);
                }
                Logger.Instance.Debug("チャンネル更新に失敗しました。");
                e.Result = false;
            };
            updateChannelInfoWorker.RunWorkerCompleted += (sender, e) =>
            {
                if ((bool)e.Result)
                {
                    Logger.Instance.InfoFormat("チャンネル更新完了 [チャンネル名:{0}] [ジャンル:{1}] [詳細:{2}] [コメント:{3}] [コンタクトURL:{4}]", ChannelInfo.Name, ChannelInfo.Genre, ChannelInfo.Desc, ChannelInfo.Comment, ChannelInfo.Url);
                    ChannelInfoChange(sender, e);
                }
            };

            // チャンネル情報の取得
            Timer timer = new Timer();

            timer.Interval = UpdateInterval;
            timer.Tick    += (sender, e) =>
            {
                // チャンネル更新
                UpdateChannelInfo();

                /*
                 * // メモリリーク防止
                 * if (moviePlayer.Ctlcontrols != null)
                 * {
                 *      moviePlayer.Ctlcontrols.play();
                 * }
                 */
            };
            timer.Start();

            // チャンネル更新
            UpdateChannelInfo();
        }