//------------------------------------------------------------- // 概要:ストリーム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); }
//------------------------------------------------------------- // 概要:チャンネル情報取得 // 詳細:指定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); }
//------------------------------------------------------------- // 概要:指定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(); }