我有一个CNN WinForms应用程序,一个客户要求在其中集成一个CNN流媒体视频播放器。美国有线电视新闻网使用位于http://www.cnn.com/video/live/live.html?stream=stream1的flash播放器
但是,如果我嵌入一个WebBrowser对象并将其指向URL,网站想要在我的WebBrowser控件之外触发一个弹出窗口。如果我禁用它(使用NewWindow事件处理程序),它会抛出一条javascript警告消息。如果我允许,它会在我的应用程序外部打开一个新的IE实例,里面有CNN视频。
我唯一的想法是重新创建HTML并覆盖flash对象(http://z.cdn.turner.com/cnn/.element/apps/CNNLive/2.1.6.2/assets/scripts/liveplayersettings.js)的javascript设置,以便关闭弹出标志。
有没有人想过如何在应用程序中显示站点的同时完成显示?
发布于 2011-07-26 22:18:38
最终破解了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);
}
}发布于 2011-07-02 05:40:33
如果您安装了最新的ffdshow,Windows media player将播放flash文件。您可以将url传递给它,然后让嵌入式windows媒体播放器播放它。
VLC也会做到这一点,无论你喜欢哪一个。不过,Windows媒体播放器的api可能要简单一点。
发布于 2011-07-02 05:54:57
我建议下载并使用Microsoft Expression Encoder SDK。它可以捕获来自其他网站的实时馈送:http://msdn.microsoft.com/en-us/library/gg602440(v=expression.40).aspx
您可以向下滚动到“使用Live Broadcasting项目”一节,它解释了如何从web上捕获实时视频源。
如果Expression SDK对你不起作用,那么我只能建议你对他们的Javascript进行反向工程,并编写某种HttpWebRequest和HttpWebResponse类型的应用程序来获取数据并在你的程序中自己流式传输。
https://stackoverflow.com/questions/6553002
复制相似问题