项目作者: RayJi0428

项目描述 :
winform-obs
高级语言: C#
项目地址: git://github.com/RayJi0428/winform-obs.git
创建时间: 2021-09-02T04:04:08Z
项目社区:https://github.com/RayJi0428/winform-obs

开源协议:

下载


winform-obs

winform-obs

環境建置

建立OBS環境

  • 安裝 OBS軟體 目前使用版本27.0.1

  • 為本機OBS安裝 websocket插件,這樣WinForm才有辦法連接發指令。obs-websocket API文件

  • 開啟obs設定port位及密碼

  • 設定輸出錄影格式
    • 類型:自訂輸出(FFmpeg)
    • 封裝格式:mpegts(目前使用jsmpeg播放)
    • 影像位元率(kbit/s):10000kbps(越大越清楚)
    • 影像編碼器:mpeg1video
    • 音效位元率(kbit/s):128kbps
    • 音軌:勾選1(全勾選會有效能問題,影片播放變超慢)
    • 音效編碼器:mp2(要注意錄影時主介面下方輸出音效是否有反應,沒有表示沒錄到聲音)

      建立winform專案

  • Windows Forms App(.NET Framework 4.6.1)

    • 設定Form1.cs寬高
    • 啟動OBS調整顯示器擷取範圍
  • 建立WebView

    • 下載 EO.Browser 相關檔案並安裝
    • 安裝完畢照說明操作VisualStudio
    • 開啟VisualStudio後, 先確認工具箱是否有EO.WebBrowser.WebControl、WebView
    • 沒有就從”工具->選擇工具箱項目->瀏覽”,找到安裝目錄(C:\Program Files\Essential Objects\EO.Total 2021)內的dll套件
      • EO.WebBrowser.dll
      • EO.WebBrowser.WinForm.dll
    • 再看看專案”參考”是否存在EO.WebBrowser、EO.WebBrowser.WinForm
    • 若有缺漏,右鍵點擊”參考”加入參考,同樣瀏覽dll檔案並加入
    • 在工具箱EO.WebBrowser找到WebControl,拖到視窗內同時自動創建WebView,設定寬高、名稱(預設webView1)
  • obs-websocket

流程串接

  • 對Form1.cs介面雙擊生成基本代碼,在From1建構式內指定URL
    1. webView1.Url = "https://google.com.tw";
  • 設定記憶體上限(否則會有記憶體不足問題)
    1. EO.Base.Runtime.EnableEOWP = true;
  • 建立OBS實體並監聽連接事件,開始連線
    1. _obs = new OBSWebsocket();
    2. _obs.Connected += onConnect;
    3. _obs.Connect("ws://127.0.0.1:4444", "123456");
  • 連線成功開始取得OBSScene實體並設定
    1. private void onConnect(object sender, EventArgs e)
    2. {
    3. //更換影片放置資料夾(目前測試無法更換...)
    4. _obs.SetRecordingFolder("D:\\git\\VisualStudio\\WebViewTest\\WebViewTest\\video");
    5. string profile = _obs.GetCurrentProfile();
    6. OBSScene scene = _obs.GetCurrentScene();
    7. this.isConnect = true;
    8. }
  • WebView添加自定義function讓頁面能驅動WinForm(Form1.Designer.cs)
    1. //對webview註冊自定義function
    2. this.webView1.RegisterJSExtensionFunction("demoAbout", new JSExtInvokeHandler(WebView_JSDemoAbout));
  • 接著讓webview內的網頁在適當時機呼叫對外function並帶入參數
    1. window['demoAbout']("start_record");
  • WinForm接收通知後開始/停止錄影

    1. void WebView_JSDemoAbout(object sender, JSExtInvokeArgs e)
    2. {
    3. if (this.isConnect == false)
    4. {
    5. Console.WriteLine("尚未連線");
    6. }
    7. string command = e.Arguments[0] as string;
    8. if (command == "start_record")
    9. {
    10. _obs.StartRecording();
    11. }
    12. else
    13. {
    14. _obs.StopRecording();
    15. //等待5秒存檔,並上傳FTP
    16. wait(5000);
    17. this.UploadFtpFile("Client\\Test\\Ray", "D:\\git\\VisualStudio\\WebViewTest\\WebViewTest\\video\\aaa.ts");
    18. }
    19. }