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