//-------------------------------------------------------------
        // 概要:ストリームURLの解析結果と、想定結果の比較
        //-------------------------------------------------------------
        private static void GetUrlInfoTest(string streamUrl, string host, string portNo, string streamId)
        {
            StreamUrlInfo info = StreamUrlAnalyzer.GetUrlInfo(streamUrl);

            Assert.AreEqual(info.Host, host);
            Assert.AreEqual(info.PortNo, portNo);
            Assert.AreEqual(info.StreamId, streamId);
        }
Example #2
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);
        }
Example #3
0
        //-------------------------------------------------------------
        // 概要:ストリームURL情報の取得
        //-------------------------------------------------------------
        public static StreamUrlInfo GetUrlInfo(string streamUrl)
        {
            Logger.Instance.DebugFormat("GetUrlInfo(streamUrl:{0})", streamUrl);

            StreamUrlInfo info  = new StreamUrlInfo();
            Regex         regex = new Regex(StreamUrlPattern);
            Match         match = regex.Match(streamUrl);

            if (match.Groups.Count == GroupCount)
            {
                info.Host     = match.Groups[1].Value;
                info.PortNo   = match.Groups[2].Value;
                info.StreamId = match.Groups[3].Value.Substring(0, match.Groups[3].Value.Length - 1);
                Logger.Instance.DebugFormat("ストリームURLの取得:正常(Host:{0}, PortNo:{1}, StreamId:{2})", info.Host, info.PortNo, info.StreamId);
            }
            else
            {
                Logger.Instance.Error("ストリームURLの取得:異常");
            }

            return(info);
        }
Example #4
0
 //-------------------------------------------------------------
 // 概要:ストリーム情報の初期化
 //-------------------------------------------------------------
 public PeerCastConnection(StreamUrlInfo streamUrlInfo)
 {
     Logger.Instance.DebugFormat("PeerCastConnection(Host:{0}, PortNo:{1}, StreamId:{2})", streamUrlInfo.Host, streamUrlInfo.PortNo, streamUrlInfo.StreamId);
     urlInfo = streamUrlInfo;
 }
Example #5
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();
        }