{"id":19763,"date":"2019-05-26T13:35:09","date_gmt":"2019-05-26T04:35:09","guid":{"rendered":"https:\/\/agrimo.jp\/wp\/?page_id=19763"},"modified":"2019-05-29T16:35:53","modified_gmt":"2019-05-29T07:35:53","slug":"1-winforms%e3%82%a2%e3%83%97%e3%83%aa%e3%82%92%e4%bd%9c%e6%88%90%e3%81%97%e3%81%a6%e3%80%81nuget%e3%83%91%e3%83%83%e3%82%b1%e3%83%bc%e3%82%b8%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6cefsharp%e3%82%92-2-2-5","status":"publish","type":"page","link":"https:\/\/agrimo.jp\/wp\/?page_id=19763","title":{"rendered":"7.CefSharp\u3092\u4f7f\u3063\u3066\u3001WebRTC\u3092\u3084\u3063\u3066\u307f\u308b\u3002"},"content":{"rendered":"<p>\uff14\uff0e\u3067\u30ed\u30fc\u30ab\u30eb\u306b\u4fdd\u5b58\u3057\u305fHTML\u3092CefSharp\u3092\u7528\u3044\u3066\u8868\u793a\u3055\u305b\u307e\u3057\u305f\u304c\u3001\u3053\u308c\u306b\u5c11\u3057\u624b\u3092\u52a0\u3048\u3066WebRTC\u3092\u3084\u3063\u3066\u307f\u307e\u3059\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\uff11\uff0e\u3053\u308c\u307e\u3067\u306e\u4ee5\u4e0b1\u30012\u30013\u3092\u304a\u3055\u3089\u3044\u3057\u3066\u3001\u65b0\u3057\u304f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<ol>\n<li><a href=\"https:\/\/agrimo.jp\/wp\/?page_id=19741\">WinForms\u30a2\u30d7\u30ea\u3092\u4f5c\u6210\u3057\u3066\u3001NuGet\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f7f\u3063\u3066CefSharp\u3092\u8ffd\u52a0\u3059\u308b\u3002<\/a><\/li>\n<li><a href=\"https:\/\/agrimo.jp\/wp\/?page_id=19743\">\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u69cb\u6210\u3092\u5909\u66f4\u3057\u3066\u3001AnyCPU\u3067\u4f7f\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u3002<\/a><\/li>\n<li><a href=\"https:\/\/agrimo.jp\/wp\/?page_id=19748\">CefSharp\u3092\u4f7f\u3063\u3066\u3001\u30ed\u30fc\u30ab\u30eb\u3067\u52d5\u304fWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u308b\u3002<\/a><\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><a href=\"https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h16_40.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-19896\" src=\"https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h16_40-300x160.png\" alt=\"\" width=\"300\" height=\"160\" srcset=\"https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h16_40-300x160.png 300w, https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h16_40-1024x545.png 1024w, https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h16_40-50x27.png 50w, https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h16_40-820x436.png 820w, https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h16_40.png 1366w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>\uff12\uff0e\u30d5\u30a9\u30fc\u30e0\uff08Form1.cs\uff09\u3092\u5c11\u3057\u5909\u66f4\u3057\u307e\u3059\u3002<\/p>\n<p style=\"padding-left: 40px;\">\u95a2\u6570 InitializeChromium() \u5185\u306b\u4ee5\u4e0b\u4e00\u884c\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<br \/>\nsettings.CefCommandLineArgs.Add(&#8220;enable-media-stream&#8221;, &#8220;1&#8221;);<\/p>\n<p style=\"padding-left: 40px;\"><a href=\"https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h19_36.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-19897\" src=\"https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h19_36-300x160.png\" alt=\"\" width=\"300\" height=\"160\" srcset=\"https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h19_36-300x160.png 300w, https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h19_36-1024x546.png 1024w, https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h19_36-50x27.png 50w, https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h19_36-820x437.png 820w, https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h19_36.png 1366w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>\uff13\uff0e\u30b5\u30f3\u30d7\u30ebHTML\u306e index.html \u3092\u5c11\u3057\u5909\u66f4\u3057\u307e\u3059\u3002<\/p>\n<p style=\"padding-left: 40px;\">\u4ee5\u4e0b\u306e\u4e00\u884c\u3068WebRTC\u7528\u306eJavaScript\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002\uff08\u4e0b\u56f3\u306e\u8d64\u67a0\uff09<\/p>\n<p style=\"padding-left: 40px;\">&lt;video id=&#8221;myVideo&#8221; width=&#8221;400&#8243; height=&#8221;300&#8243; autoplay=&#8221;1&#8243;&gt;&lt;\/video&gt;<\/p>\n<p style=\"padding-left: 40px;\"><a href=\"https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h22_42.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-19898\" src=\"https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h22_42-300x160.png\" alt=\"\" width=\"300\" height=\"160\" srcset=\"https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h22_42-300x160.png 300w, https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h22_42-1024x545.png 1024w, https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h22_42-50x27.png 50w, https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h22_42-820x436.png 820w, https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h22_42.png 1366w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>\uff14\uff0e\u3053\u3053\u307e\u3067\u51fa\u6765\u305f\u3089\u3001\u5b9f\u884c\u3057\u3066\u307f\u307e\u3059\u3002\u30ab\u30e1\u30e9\u3067\u64ae\u3063\u305f\u753b\u9762\u304c\u6620\u3057\u51fa\u3055\u308c\u305f\u3089OK\u3067\u3059\u3002<\/p>\n<p style=\"padding-left: 40px;\"><a href=\"https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h32_26.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-19902\" src=\"https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h32_26-300x160.png\" alt=\"\" width=\"300\" height=\"160\" srcset=\"https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h32_26-300x160.png 300w, https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h32_26-1024x546.png 1024w, https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h32_26-50x27.png 50w, https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h32_26-820x438.png 820w, https:\/\/agrimo.jp\/wp\/wp-content\/uploads\/2019\/05\/2019-05-29_16h32_26.png 1366w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>\u3010\u30b5\u30f3\u30d7\u30ebHTML\u3011<\/p>\n<pre class=\"lang:default decode:true \" title=\"index.html\">&lt;!doctype html&gt;\r\n&lt;html lang=\"jp\"&gt;\r\n  &lt;head&gt;\r\n    &lt;!-- Required meta tags --&gt;\r\n    &lt;meta charset=\"utf-8\"&gt;\r\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\"&gt;\r\n\r\n    &lt;!-- Bootstrap CSS --&gt;\r\n    &lt;link rel=\"stylesheet\" href=\"https:\/\/stackpath.bootstrapcdn.com\/bootstrap\/4.3.1\/css\/bootstrap.min.css\" integrity=\"sha384-ggOyR0iXCbMQv3Xipma34MD+dH\/1fQ784\/j6cY\/iJTQUOhcWr7x9JvoRxT2MZw1T\" crossorigin=\"anonymous\"&gt;\r\n\r\n    &lt;title&gt;\u30b5\u30f3\u30d7\u30eb\u3000\u30cf\u30ed\u30fc\u30ef\u30fc\u30eb\u30c9&lt;\/title&gt;\r\n  &lt;\/head&gt;\r\n  &lt;body&gt;\r\n      &lt;h1&gt;\u3053\u308c\u306fCefSharp\u306e\u30c7\u30e2\u3067\u3059&lt;\/h1&gt;\r\n\r\n      &lt;video id=\"myVideo\" width=\"400\" height=\"300\" autoplay=\"1\"&gt;&lt;\/video&gt;\r\n\r\n      &lt;br&gt;\r\n\r\n      &lt;button class=\"btn btn-info\" onclick=\"cefCustomObject.showDevTools();\"&gt;Open Chrome Dev Tools&lt;\/button&gt;\r\n      &lt;button class=\"btn btn-primary\" onclick=\"cefCustomObject.opencmd();\"&gt;Open cmd.exe&lt;\/button&gt;\r\n\r\n      &lt;script type=\"text\/javascript\"&gt;\r\n          navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || window.navigator.mozGetUserMedia;\r\n          window.URL = window.URL || window.webkitURL;\r\n\r\n          let video = document.getElementById('myVideo');\r\n          let localStream = null;\r\n          navigator.getUserMedia({ video: true, audio: false },\r\n              function (stream) { \/\/ for success case\r\n                  console.log(stream);\r\n                  \/* video.src = window.URL.createObjectURL(stream);\r\n                     Chrome68\u4ee5\u964d\u3067 URL.createObjectURL \u304c\u4f7f\u3048\u306a\u304f\u306a\u3063\u305f\u3089\u3057\u3044\u306e\u3067\u3001\r\n                     \u4ee5\u4e0b\u306esrcObject\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u4f7f\u3046\u3088\u3046\u306b\u4fee\u6b63 *\/\r\n                  video.srcObject = stream;\r\n              },\r\n              function (err) { \/\/ for error case\r\n                  console.log(err);\r\n              });\r\n      &lt;\/script&gt;\r\n\r\n\r\n      &lt;!-- Optional JavaScript --&gt;\r\n      &lt;!-- jQuery first, then Popper.js, then Bootstrap JS --&gt;\r\n      &lt;script src=\"https:\/\/code.jquery.com\/jquery-3.3.1.slim.min.js\" integrity=\"sha384-q8i\/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo\" crossorigin=\"anonymous\"&gt;&lt;\/script&gt;\r\n      &lt;script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/popper.js\/1.14.7\/umd\/popper.min.js\" integrity=\"sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1\" crossorigin=\"anonymous\"&gt;&lt;\/script&gt;\r\n      &lt;script src=\"https:\/\/stackpath.bootstrapcdn.com\/bootstrap\/4.3.1\/js\/bootstrap.min.js\" integrity=\"sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf\/nJGzIxFDsf4x0xIM+B07jRM\" crossorigin=\"anonymous\"&gt;&lt;\/script&gt;\r\n  &lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u3010\u30d5\u30a9\u30fc\u30e0\uff08Form1.cs\uff09\u3011<\/p>\n<pre class=\"lang:c# decode:true \" title=\"Form1.cs\">using System;\r\nusing System.IO;\r\nusing System.Windows.Forms;\r\nusing CefSharp;\r\nusing CefSharp.WinForms;\r\n\r\nnamespace WindowsFormsApp19\r\n{\r\n    public partial class Form1 : Form\r\n    {\r\n        public ChromiumWebBrowser chromeBrowser;\r\n\r\n        public Form1()\r\n        {\r\n            InitializeComponent();\r\n\r\n            \/\/ Start the browser after initialize global component\r\n            InitializeChromium();\r\n\r\n            \/\/For legacy biding we'll still have support for\r\n            CefSharpSettings.LegacyJavascriptBindingEnabled = true;\r\n\r\n            \/\/ Register an object in javascript named \"cefCustomObject\" with function of the CefCustomObject class :3\r\n            chromeBrowser.RegisterJsObject(\"cefCustomObject\", new CefCustomObject(chromeBrowser, this));\r\n        }\r\n\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            chromeBrowser.ShowDevTools();\r\n        }\r\n\r\n        public void InitializeChromium()\r\n        {\r\n            CefSettings settings = new CefSettings();\r\n\r\n            \/\/ Note that if you get an error or a white screen, you may be doing something wrong !\r\n            \/\/ Try to load a local file that you're sure that exists and give the complete path instead to test\r\n            \/\/ for example, replace page with a direct path instead :\r\n            \/\/ String page = @\"C:\\Users\\SDkCarlos\\Desktop\\afolder\\index.html\";\r\n\r\n            String page = string.Format(@\"{0}\\sample_html\\index.html\", Application.StartupPath);\r\n\r\n            if (!File.Exists(page))\r\n            {\r\n                MessageBox.Show(\"Error The html file doesn't exists : \" + page);\r\n            }\r\n\r\n            \/\/ Initialize cef with a command line argument\r\n            \/\/ In this case the enable-media-stream flag that allows you to access the camera and the microphone\r\n            settings.CefCommandLineArgs.Add(\"enable-media-stream\", \"1\");\r\n\r\n            \/\/ Initialize cef with the provided settings\r\n            Cef.Initialize(settings);\r\n\r\n            \/\/ Create a browser component\r\n            chromeBrowser = new ChromiumWebBrowser(page);\r\n\r\n            \/\/ Add it to the form and fill it to the form window.\r\n            this.Controls.Add(chromeBrowser);\r\n            chromeBrowser.Dock = DockStyle.Fill;\r\n\r\n            \/\/ Allow the use of local resources in the browser\r\n            BrowserSettings browserSettings = new BrowserSettings();\r\n            browserSettings.FileAccessFromFileUrls = CefState.Enabled;\r\n            browserSettings.UniversalAccessFromFileUrls = CefState.Enabled;\r\n            chromeBrowser.BrowserSettings = browserSettings;\r\n        }\r\n\r\n        private void Form1_FormClosing(object sender, FormClosingEventArgs e)\r\n        {\r\n            Cef.Shutdown();\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uff14\uff0e\u3067\u30ed\u30fc\u30ab\u30eb\u306b\u4fdd\u5b58\u3057\u305fHTML\u3092CefSharp\u3092\u7528\u3044\u3066\u8868\u793a\u3055\u305b\u307e\u3057\u305f\u304c\u3001\u3053\u308c\u306b\u5c11\u3057\u624b\u3092\u52a0\u3048\u3066WebRTC\u3092 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-19763","page","type-page","status-publish","hentry"],"wppr_data":{"cwp_meta_box_check":"No"},"_links":{"self":[{"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=\/wp\/v2\/pages\/19763","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=19763"}],"version-history":[{"count":9,"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=\/wp\/v2\/pages\/19763\/revisions"}],"predecessor-version":[{"id":19905,"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=\/wp\/v2\/pages\/19763\/revisions\/19905"}],"wp:attachment":[{"href":"https:\/\/agrimo.jp\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=19763"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}