|
本帖最后由 jenkins 于 2018-12-7 17:15 编辑
程序说明:
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;
using System.IO;
namespace CefSharpLive
{
public partial class Form1 : Form
{
public ChromiumWebBrowser browser;
MyRequestHandler myRequestHandler;
public Form1()
{
//使能cache
var settings = new CefSettings
{
Locale = "zh-CN",
AcceptLanguageList = "zh-CN",
MultiThreadedMessageLoop = true,
CachePath = Directory.GetCurrentDirectory() + @"\cache",
WindowlessRenderingEnabled = true
};
//设置flash插件
settings.CefCommandLineArgs.Add("ppapi-flash-version", "32_0_0_101");
settings.CefCommandLineArgs.Add("ppapi-flash-path", @"plugins\pepflashplayer64_32_0_0_101.dll");
settings.PersistSessionCookies = true;
Cef.Initialize(settings);
//直播地址
browser = new ChromiumWebBrowser("https://live.wasu.cn/show/id/1938165");
browser.FrameLoadEnd += Browser_FrameLoadEnd;
myRequestHandler = new MyRequestHandler();
browser.RequestHandler = myRequestHandler;
browser.Dock = DockStyle.Fill;
Controls.Add(browser);
InitializeComponent();
pictureBox1.BringToFront();
}
//页面加载完成后使用js代码删除无关内容, 并修改flash播放器尺寸
private void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
{
string script = @"
(function() {
document.body.style.backgroundColor='#000000';
if (typeof(wsplayer)=='undefined')
{
return;
}
for (j = 0; j < 8; j++)
{
var div = document.getElementsByTagName('div');
for(i = 0; i < div.length; i++)
{
if(div[ i ].innerHTML.indexOf('WsPlayer.swf') == -1)
{
div[ i ].remove();
}
}
}
for (j = 0; j < 8; j++)
{
var link = document.getElementsByTagName('link');
for(i = 0; i < link.length; i++)
{
link[ i ].remove();
}
}
wsplayer.style.marginTop = '0px';
wsplayer.style.marginLeft = '0px';
wsplayer.style.width = '" + (this.Width - 20).ToString() + @"px';
wsplayer.style.height = '" + (this.Height - 50).ToString() + @"px';
})();";
browser.ExecuteScriptAsync(script);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Cef.Shutdown();
}
//隐藏遮挡加载过程的黑幕
private void timer1_Tick(object sender, EventArgs e)
{
string script = @"
(function() {
if (typeof(wsplayer)=='undefined')
{
return 999;
}
var div = document.getElementsByTagName('div');
return div.length;
})();";
Task<CefSharp.JavascriptResponse> task = browser.EvaluateScriptAsync(script);
task.ContinueWith(t =>
{
if (!t.IsFaulted)
{
var response = t.Result;
if (response.Success == true)
{
int length = 0;
int.TryParse(response.Result.ToString(), out length);
if (length < 10)
{
pictureBox1.Visible = false;
timer1.Enabled = false;
}
}
}
}, TaskScheduler.FromCurrentSynchronizationContext());
}
}
}
MyRequestHandler.cs
using CefSharp;
using CefSharp.Handler;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography.X509Certificates;
namespace CefSharpLive
{
class MyRequestHandler : DefaultRequestHandler
{
public bool filter = false;
//过滤无用内容, 提高加载速度
public override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
{
if (request.ResourceType == ResourceType.PluginResource)
{
filter = true;
return CefReturnValue.Continue;
}
else if ((!filter) && (request.ResourceType != ResourceType.Image))
{
return CefReturnValue.Continue;
}
return CefReturnValue.Cancel;
}
}
}
运行效果:
程序:
程序中不包含CefSharp packages,请自行通过NuGet安装CefSharp
加载flash闪烁问题,请参考:https://blog.csdn.net/qsy2000/article/details/59522253
单独编译好的可执行文件见3楼
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|