週末加個班,懟了一項新需求,只是沒想到轉了產品又來搞研發,那就好好搞吧。
公司要做一個屏幕管控系統,需要技術用winform +cefsharp 播放MP3 MP4 以及flash
網上看了很多,不管是什麼有償,50積分啊,總體看來還是有解決方式的,下面說一下大概思路然後再分享具體步驟
首先大家都知道 cefsharp 是不支持MP3MP4的播放的,所以 要對cefsharp進行重新打包,具體有多麻煩,網上一看就一大堆
解決辦法:用大佬二次打包出來的各種 cef_binary_3.2623.1401包
下面進入正題:
首先VS上下載NuGet庫
下載完以後 右鍵點擊項目 選擇NuGet庫
搜索cefsharp就可以收到 然後下載這四個鬼
讓你下載完以後 你的目錄下多了packages
因爲我是64位機器所以 我選擇64位的包
現在基本上就已經完成一半瞭然後
創建一個winform 項目
在默認窗口腳本Form1中
using CefSharp;
using CefSharp.WinForms;
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;
namespace lmqBrowser2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
CefExample.Init();//初始化內核
}
public static ChromiumWebBrowser browser;
private void Form1_Load(object sender, EventArgs e)
{
// if (this.WindowState == FormWindowState.Maximized) //如果當前的窗體是最大化
// {
// this.FormBorderStyle = FormBorderStyle.Fixed3D; //固定的三圍邊框
// this.WindowState = FormWindowState.Normal; //把當前窗體還原默認大小
// }
// else
// {
//this.FormBorderStyle = FormBorderStyle.None; //將該窗體的邊框設置爲無
//this.WindowState = FormWindowState.Maximized; //將該窗體設置爲最大
// }
//this.TopMost = true; //置頂
InitBrowser();//啓動瀏覽器
}
public void InitBrowser()
{
//var setting = new CefSettings();
/*
setting.Locale = "zh-CN";
//緩存路徑
setting.CachePath = "C:\\temp\\BrowserCache";
//瀏覽器引擎的語言
setting.AcceptLanguageList = "zh-CN,zh;q=0.8";
setting.LocalesDirPath = "C:\\temp\\localeDir";
//日誌文件
setting.LogFile = "C:\\temp\\LogData";
setting.PersistSessionCookies = true;
setting.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36";
setting.UserDataPath = "C:\\temp\\userData";
//設置flash版本
*/
//setting.CefCommandLineArgs.Add("ppapi-flash-path", System.AppDomain.CurrentDomain.BaseDirectory + "plugins\\pepflashplayer.dll"); //指定的flash版本,不要使用系統安裝的flash版本
//setting.CefCommandLineArgs.Add("ppapi-flash-version", "32_29_0_0_113");
//setting.CefCommandLineArgs.Add("ppapi-flash-version", "27_0_0_130");//PepperFlash\manifest.json中的version
//setting.CefCommandLineArgs.Add("ppapi-flash-path", "plugins\\pepflashplayer.dll");
//CefSharp.Cef.Initialize(setting);
//browser = new ChromiumWebBrowser("chrome://version");//"http://192.168.56.1:8083/html/14/index.html"
//browser = new ChromiumWebBrowser("https://www.bilibili.com/video/av26238012/?spm_id_from=333.334.chief_recommend.21");
//browser = new ChromiumWebBrowser("http://58.87.107.253/testfintech/56dddf2de99ea8e91d097c107df9ddf7.mp4");
browser = new ChromiumWebBrowser("http://ssfw.njfy.gov.cn/ssfwzx/ext/flash/flash.jsp");
//browser.Load("chrome://version");
this.Controls.Add(browser);
browser.Dock = DockStyle.Fill;
}
}
}
在Form1.Designer.cs中
namespace lmqBrowser2
{
partial class Form1
{
/// <summary>
/// 必需的設計器變量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的資源。
/// </summary>
/// <param name="disposing">如果應釋放託管資源,爲 true;否則爲 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows 窗體設計器生成的代碼
/// <summary>
/// 設計器支持所需的方法 - 不要修改
/// 使用代碼編輯器修改此方法的內容。
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
}
}
還有一個是支持flash 的腳本 CefExample
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CefSharp;
namespace lmqBrowser2
{
public static class CefExample
{
public const string DefaultUrl = "http://www.google.com/";
private static readonly bool DebuggingSubProcess = Debugger.IsAttached;
public static void Init()
{
var settings = new CefSettings();
settings.RemoteDebuggingPort = 8088;
settings.Locale = "zh-CN";
settings.CefCommandLineArgs.Add("ppapi-flash-path", System.AppDomain.CurrentDomain.BaseDirectory + "pepflashplayer.dll"); //指定flash的版本,不使用系統安裝的flash版本
settings.CefCommandLineArgs.Add("ppapi-flash-version", "29.0.0.171");
settings.CefCommandLineArgs.Add("enable-media-stream", "enable-media-stream");
settings.IgnoreCertificateErrors = true;
settings.LogSeverity = LogSeverity.Verbose;
if (DebuggingSubProcess)
{
//var architecture = Environment.Is64BitProcess ? "x64" : "x86";
//settings.BrowserSubprocessPath = "..\\..\\..\\..\\CefSharp.BrowserSubprocess\\bin\\" + architecture + "\\Debug\\CefSharp.BrowserSubprocess.exe";
}
//settings.RegisterScheme(new CefCustomScheme
//{
// SchemeName = CefSharpSchemeHandlerFactory.SchemeName,
// SchemeHandlerFactory = new CefSharpSchemeHandlerFactory()
//});
if (!Cef.Initialize(settings))
{
if (Environment.GetCommandLineArgs().Contains("--type=renderer"))
{
Environment.Exit(0);
}
else
{
return;
}
}
}
}
}
因爲是一個測試所以,program中都是默認,沒有發生任何改變
先彆着急編譯,下面是項目中一些細節,cefsharp 不支持anycpu 所以只有32位和64位 這要先選好
最後還有一點 爲了支持flash 要把 pepflashplayer.dll 放到 你的當前項目\bin\x64\Debug 下
最後我附上 大佬們的二次編譯的包
以及 pepflashplayer.dll
pepflashplayer.dll下載地址:https://download.csdn.net/download/ldy597321444/10821710
64位包:https://download.csdn.net/download/ldy597321444/10821756
32位包:https://download.csdn.net/download/ldy597321444/10821757