我有一个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)以关闭弹出标记。
任何人都有想法在应用程序内部完成显示网站的方法吗?
答案 0 :(得分: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);
}
}
答案 1 :(得分:0)
如果安装了最新的ffdshow,Windows媒体播放器将播放Flash文件。您可以将其传递给网址并让嵌入式Windows媒体播放器播放它。
VLC也会这样做,无论你喜欢什么。 Windows媒体播放器的api可能稍微容易一点。
答案 2 :(得分:0)
我建议下载并使用Microsoft Expression Encoder SDK。它可以捕获来自其他网站的实时Feed:http://msdn.microsoft.com/en-us/library/gg602440(v=expression.40).aspx
您可以向下滚动到“使用实时广播项目”部分,它介绍了如何从网络上捕获实时视频。
如果Expression SDK不适合您,那么我只能建议您必须对其Javascript进行反向工程并编写某种HttpWebRequest和HttpWebResponse类型的应用程序来获取数据并在程序中自行传输。< / p>