【问题标题】:WinForms - Embedding CNN Live Video URLWinForms - 嵌入 CNN 直播视频 URL
【发布时间】:2011-07-26 22:18:38
【问题描述】:
我有一个 C# WinForms 应用程序,并且一个客户要求在其中集成一个流式 CNN 视频播放器。 CNN 使用位于 http://www.cnn.com/video/live/live.html?stream=stream1 的 Flash 播放器
但是,如果我嵌入一个 WebBrowser 对象并将其指向 URL,则该网站希望在我的 WebBrowser 控件之外触发一个弹出窗口。如果我禁用它(使用 NewWindow 事件处理程序),它会抛出一个 javascript 警报消息。如果我允许,它会在我的应用程序之外打开一个新的 IE 实例,其中包含 CNN 视频。
我唯一的想法是重新创建 HTML 并覆盖其 flash 对象的 javascript 设置 (http://z.cdn.turner.com/cnn/.element/apps/CNNLive/2.1.6.2/assets/ scripts/liveplayersettings.js) 以关闭弹出标志。
有没有人想过如何在应用程序内部显示网站?
【问题讨论】:
标签:
c#
html
winforms
video
popup
【解决方案1】:
最终破解了 CNN 使用的 Javascript,不知道它会持续多久,但这是完成我想要的最快的方法,而不会增加其他解决方案的所有额外开销。
protected void webBrowser_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
{
if (webBrowser.ReadyState == WebBrowserReadyState.Complete && DefaultPage == BrowserPage.CNN)
{
HtmlElement head = webBrowser.Document.GetElementsByTagName("head")[0];
HtmlElement scriptElement = webBrowser.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptElement.DomElement;
string popupBlocker = "if(typeof settings != 'undefined') { settings.FORCE_POPUP = false; }";
element.text = popupBlocker;
head.AppendChild(scriptElement);
}
}
【解决方案2】:
如果您安装了最新的 ffdshow,Windows 媒体播放器将播放 flash 文件。您可以将 url 传递给它,然后让嵌入的 windows 媒体播放器播放它。
VLC 也会这样做,无论您喜欢哪个。不过,Windows 媒体播放器的 api 可能会更简单一些。