{"id":229,"date":"2023-02-07T16:25:15","date_gmt":"2023-02-08T00:25:15","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/?p=229"},"modified":"2023-02-07T16:34:08","modified_gmt":"2023-02-08T00:34:08","slug":"using-net-play-dji-ryze-tello","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/using-net-play-dji-ryze-tello\/","title":{"rendered":"\u7528 .NET \u542f\u52a8\u4f60\u7684 DJI Ryze Tello \u65e0\u4eba\u673a"},"content":{"rendered":"<p class=\"code-line\" dir=\"auto\" data-line=\"4\"><span style=\"font-family: arial, helvetica, sans-serif; font-size: 12pt;\">\u5927\u7586\u7684 DJI Ryze Tello \u662f\u5165\u95e8\u7ea7\u7684\u65e0\u4eba\u673a\uff0c\u4e0d\u4ec5\u5728 STEM \u6559\u80b2\u4e2d\u6709\u975e\u5e38\u5e7f\u6cdb\u7684\u5e94\u7528\uff0c\u4e5f\u53ef\u4ee5\u4f5c\u4e3a\u7f16\u7a0b\u5165\u95e8\u7684\u9996\u9009\u3002 \u901a\u8fc7 UDP \u534f\u8bae\u8c03\u7528 DJI Ryze Tello SDK \u53ef\u4ee5\u8ba9 DJI Ryze Tello \u65e0\u4eba\u673a\u6267\u884c\u8d77\u98de\uff0c\u964d\u843d\uff0c\u8f6c\u5411\u4ee5\u53ca\u4e0d\u540c\u7684\u82b1\u5f0f\u52a8\u4f5c\u3002 \u672c\u6587\u5c06\u4f1a\u901a\u8fc7 .NET \u521b\u5efa\u5e94\u7528\u6765\u63a7\u5236 DJI Ryze Tello\u3002<\/span><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"4\"><span style=\"font-family: arial, helvetica, sans-serif; font-size: 14pt;\"><strong>.NET UDP \u7f16\u7a0b<\/strong><\/span><\/p>\n<h3 id=\"%E4%BB%80%E4%B9%88%E6%98%AF-udp\" class=\"code-line\" dir=\"auto\" data-line=\"8\"><span style=\"font-family: arial, helvetica, sans-serif; font-size: 12pt;\"><strong>\u4ec0\u4e48\u662f UDP<\/strong><\/span><\/h3>\n<p class=\"code-line\" dir=\"auto\" data-line=\"10\"><span style=\"font-family: arial, helvetica, sans-serif; font-size: 12pt;\">\u201cUDP\uff08\u7528\u6237\u6570\u636e\u62a5\u534f\u8bae\uff09\u662f\u4e00\u4e2a\u4e0eIP \u534f\u8bae\u4e00\u8d77\u4f7f\u7528\u7684\u957f\u671f\u534f\u8bae\uff0c\u7528\u4e8e\u5728\u4f20\u8f93\u901f\u5ea6\u548c\u6548\u7387\u6bd4\u5b89\u5168\u6027\u548c\u53ef\u9760\u6027\u66f4\u91cd\u8981\u7684\u573a\u5408\u4e0b\u53d1\u9001\u6570\u636e\u3002 UDP \u4f7f\u7528\u4e00\u4e2a\u7b80\u5355\u7684\u3001\u5177\u6709\u6700\u5c0f\u534f\u8bae\u673a\u5236\u7684\u65e0\u8fde\u63a5\u901a\u4fe1\u6a21\u578b\u3002 UDP \u4f7f\u7528\u6821\u9a8c\u548c\u4fdd\u8bc1\u6570\u636e\u5b8c\u6574\u6027\uff0c\u4f7f\u7528\u7aef\u53e3\u53f7\u4ee5\u533a\u5206\u6570\u636e\u53d1\u9001\u65b9\u548c\u63a5\u6536\u65b9\u4e2d\u4e0d\u540c\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u5b83\u65e0\u9700\u63e1\u624b\u4f1a\u8bdd\uff0c\u5373\u5c06\u4e0d\u53ef\u9760\u7684\u5e95\u5c42\u7f51\u7edc\u76f4\u63a5\u66b4\u9732\u7ed9\u4e86\u7528\u6237\u7684\u5e94\u7528\u7a0b\u5e8f\uff1a\u4e0d\u4fdd\u8bc1\u6d88\u606f\u4ea4\u4ed8\u3001\u4e0d\u4fdd\u8bc1\u4ea4\u4ed8\u987a\u5e8f\u4e5f\u4e0d\u4fdd\u8bc1\u6d88\u606f\u4e0d\u91cd\u590d\u3002\u5982\u679c\u9700\u8981\u7f51\u7edc\u63a5\u53e3\u5c42\u9762\u7684\u7ea0\u9519\u529f\u80fd\uff0c\u5219\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u4f7f\u7528\u4e3a\u6b64\u76ee\u7684\u8bbe\u8ba1\u7684\u4f20\u8f93\u63a7\u5236\u534f\u8bae\uff08TCP\uff09\u6216\u8005\u6d41\u63a7\u5236\u4f20\u8f93\u534f\u8bae\uff08SCTP\uff09\u3002\u201d<\/span><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"12\"><span style=\"font-family: arial, helvetica, sans-serif; font-size: 12pt;\">\u5728\u73b0\u573a\u5b9e\u65f6\u6d4b\u63a7\u9886\u57df\uff0c\u5982\u679c\u6709\u5b9e\u65f6\u3001\u6297\u5e72\u6270\u6027\u3001\u5b89\u5168\u6027\u7b49\u8981\u6c42\uff0c\u90fd\u53ef\u4ee5\u91c7\u7528 UDP \u4f20\u8f93\u6570\u636e\u3002\u6211\u60f3\u8fd9\u4e5f\u662f DJI Ryze Tello \u4e3a\u4f55\u4f7f\u7528 UDP \u534f\u8bae\u901a\u4fe1\u7684\u539f\u56e0\u3002<\/span><\/p>\n<h3 id=\"c-%E8%B0%83%E7%94%A8-udp-client\" class=\"code-line\" dir=\"auto\" data-line=\"14\"><span style=\"font-family: arial, helvetica, sans-serif; font-size: 12pt;\"><strong>C# \u8c03\u7528 UDP Client<\/strong><\/span><\/h3>\n<p class=\"code-line\" dir=\"auto\" data-line=\"16\"><span style=\"font-family: arial, helvetica, sans-serif; font-size: 12pt;\">\u5728 System.Net.Sockets \u4e0b\u4f60\u53ef\u4ee5\u901a\u8fc7\u7c7b UdpClient \u6765\u5b8c\u6210 UDP \u534f\u8bae\u7684\u76f8\u5173\u8c03\u7528\u3002 \u8fd9\u662f\u5b98\u65b9\u7ed9\u6211\u4eec\u7684\u4f8b\u5b50<\/span><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"18\"><span style=\"font-family: arial, helvetica, sans-serif; font-size: 12pt;\">UdpClient \u7c7b\u63d0\u4f9b\u4e86\u5728\u963b\u585e\u540c\u6b65\u6a21\u5f0f\u4e0b\u53d1\u9001\u548c\u63a5\u6536\u65e0\u8fde\u63a5 UDP \u6570\u636e\u62a5\u7684\u7b80\u5355\u65b9\u6cd5\u3002 \u56e0\u4e3a UDP \u662f\u4e00\u79cd\u65e0\u8fde\u63a5\u7684\u4f20\u8f93\u534f\u8bae\uff0c\u6240\u4ee5\u5728\u53d1\u9001\u548c\u63a5\u6536\u6570\u636e\u4e4b\u524d\u4e0d\u9700\u8981\u5efa\u7acb\u8fdc\u7a0b\u4e3b\u673a\u8fde\u63a5\u3002 \u4f46\u662f\uff0c\u60a8\u786e\u5b9e\u53ef\u4ee5\u9009\u62e9\u901a\u8fc7\u4ee5\u4e0b\u4e24\u79cd\u65b9\u5f0f\u4e4b\u4e00\u5efa\u7acb\u9ed8\u8ba4\u8fdc\u7a0b\u4e3b\u673a\uff1a<\/span><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"20\"><span style=\"font-family: arial, helvetica, sans-serif; font-size: 12pt;\">\u4f7f\u7528\u8fdc\u7a0b\u4e3b\u673a\u540d\u548c\u7aef\u53e3\u53f7\u4f5c\u4e3a\u53c2\u6570\u521b\u5efa UdpClient \u7c7b\u7684\u5b9e\u4f8b<\/span><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"22\"><span style=\"font-family: arial, helvetica, sans-serif; font-size: 12pt;\">\u521b\u5efa UdpClient \u7c7b\u7684\u5b9e\u4f8b\uff0c\u7136\u540e\u8c03\u7528 Connect \u65b9\u6cd5<\/span><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"24\"><span style=\"font-family: arial, helvetica, sans-serif; font-size: 12pt;\">\u60a8\u53ef\u4ee5\u4f7f\u7528 UdpClient \u4e2d\u63d0\u4f9b\u7684\u4efb\u4f55\u53d1\u9001\u65b9\u6cd5\u5c06\u6570\u636e\u53d1\u9001\u5230\u8fdc\u7a0b\u8bbe\u5907\u3002 \u4f7f\u7528 Receive \u65b9\u6cd5\u4ece\u8fdc\u7a0b\u4e3b\u673a\u63a5\u6536\u6570\u636e\u3002<\/span><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"24\"><span style=\"font-family: arial, helvetica, sans-serif; font-size: 14pt;\"><strong>\u7528 .NET Polyglot Notebook \u8fde\u63a5 DJI Ryze Tello<\/strong><\/span><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"28\"><span style=\"font-family: arial, helvetica, sans-serif; font-size: 12pt;\">\u901a\u8fc7 Polyglot Notebook \u53ef\u4ee5\u5b8c\u6210 .NET \u7684\u4ea4\u4e92\u5f0f\u7f16\u7a0b\u3002\u5728\u7528 .NET \u5c01\u88c5 DJI Ryze Tello SDK \u4e4b\u524d\u6211\u4eec\u53ef\u4ee5\u7528 Notebooks \u8fde\u63a5 DJI Ryze Tello \u505a\u76f8\u5173\u539f\u578b\u6d4b\u8bd5\u3002<\/span><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"30\"><span style=\"font-family: arial, helvetica, sans-serif; font-size: 12pt;\">\u8981\u8fde\u901a DJI Ryze Tello SDK \uff0c\u9700\u8981\u901a\u8fc7 UDP \u8fde\u901a 192.168.10.1 \u4ee5\u53ca\u7aef\u53e3 11111.<\/span><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"32\"><span style=\"font-family: arial, helvetica, sans-serif; font-size: 12pt;\">\u901a\u8fc7 C# \u8c03\u7528 UDPClient \u8fde\u63a5\u7684\u65b9\u5f0f\u5982\u4e0b<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">string telloIP = \"192.168.10.1\";\r\n\r\nint telloPort = 8889;\r\n\r\nUdpClient udpClient = new UdpClient();\r\n\r\nudpClient.Connect(telloIP,telloPort);<\/code><\/pre>\n<p dir=\"auto\" data-line=\"32\">\u5e76\u5c01\u88c5\u597d\u6307\u4ee4\u6267\u884c\u7684\u65b9\u6cd5<\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">public  void Command(UdpClient udpClient,string cmd)\r\n{\r\n\r\n    Byte[] sendCmdBytes = null;\r\n            \r\n    sendCmdBytes = Encoding.UTF8.GetBytes(cmd);\r\n      \r\n    udpClient.Send(sendCmdBytes, sendCmdBytes.Length);\r\n}<\/code><\/pre>\n<p dir=\"auto\" data-line=\"32\">\u5b8c\u6210\u4e0a\u9762\u7684\u8bbe\u7f6e\uff0c\u4f60\u5c31\u53ef\u4ee5\u6267\u884c\u5bf9\u5e94\u7684\u6307\u4ee4\u5b8c\u6210\u63a7\u5236 DJI Ryze Tello \u7684\u64cd\u4f5c<\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">Command(udpClient,\"command\");\r\n\r\nCommand(udpClient,\"takeoff\");\r\n\r\nCommand(udpClient,\"land\");\r\n<\/code><\/pre>\n<p class=\"code-line code-active-line\" dir=\"auto\" data-line=\"74\">\u7ed3\u5408 .NET Polyglot Notebook \u5c31\u53ef\u4ee5\u5b8c\u6210\u5bf9 DJI Ryze Tello \u7684\u64cd\u4f5c\u4ee5\u53ca\u76f8\u5173\u6280\u672f\u6d4b\u8bd5\u3002 \u4ee5\u4e0b\u89c6\u9891\u662f Notebooks \u63a7\u5236 DJI Ryze Tello\u00a0 \u7684\u5177\u4f53\u6548\u679c<\/p>\n<div class=\"code-line\" dir=\"auto\" data-line=\"76\"><\/div>\n<p><div style=\"width: 640px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-229-1\" width=\"640\" height=\"480\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/notebook.mp4?_=1\" \/><a href=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/notebook.mp4\">https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/notebook.mp4<\/a><\/video><\/div><\/p>\n<h2 id=\"%E7%94%A8-net-maui-%E6%9E%84%E5%BB%BA-dji-ryze-tello-%E5%BA%94%E7%94%A8\" class=\"code-line\" dir=\"auto\" data-line=\"79\"><span style=\"font-size: 14pt;\"><strong>\u7528 .NET MAUI \u6784\u5efa DJI Ryze Tello \u5e94\u7528<\/strong><\/span><\/h2>\n<p class=\"code-line\" dir=\"auto\" data-line=\"81\"><span style=\"font-size: 12pt;\">.NET MAUI \u662f\u8de8\u5e73\u53f0\uff0c\u8de8\u8bbe\u5907\u7684\u524d\u7aef\u5e94\u7528\u6280\u672f\uff0c\u5f00\u53d1\u56e2\u961f\u4f7f\u7528\u4e00\u79cd\u7f16\u7a0b\u8bed\u8a00 C# \u5c31\u53ef\u4ee5\u5b8c\u6210 iOS \/ Android \/ macOS \/ Windows \u7684\u5e94\u7528\u5f00\u53d1\u3002\u73b0\u5728\u662f\u591a\u7ec8\u7aef\u7684\u5e74\u4ee3\uff0c\u901a\u8fc7\u4e0d\u540c\u8bbe\u5907\u63a7\u5236\u4f60\u624b\u4e0a\u7684 DJI Ryze Tello \uff0c \u642d\u5efa\u591a\u5e94\u7528\u573a\u666f\u662f\u975e\u5e38\u68d2\u7684\u3002\u672c\u7cfb\u5217\u4e3b\u8981\u901a\u8fc7 iOS \u548c Android \u79fb\u52a8\u8bbe\u5907\u63a7\u5236 DJI Ryze Tello\uff0c \u4ee5\u4e0b\u662f\u4e00\u4e9b\u5173\u952e\u6b65\u9aa4<\/span><\/p>\n<h3 id=\"%E9%80%9A%E8%BF%87-net-comet-%E6%9E%84%E5%BB%BA%E5%89%8D%E7%AB%AF-ui\" class=\"code-line\" dir=\"auto\" data-line=\"83\"><span style=\"font-size: 12pt;\"><strong>\u901a\u8fc7 .NET Comet \u6784\u5efa\u524d\u7aef UI<\/strong><\/span><\/h3>\n<p class=\"code-line\" dir=\"auto\" data-line=\"85\"><span style=\"font-size: 12pt;\">Comet \u662f\u4e00\u79cd\u7f16\u5199\u8de8\u5e73\u53f0 UI \u7684\u73b0\u4ee3\u65b9\u5f0f (\u00a0<a href=\"https:\/\/github.com\/dotnet\/Comet\" data-href=\"https:\/\/github.com\/dotnet\/Comet\">https:\/\/github.com\/dotnet\/Comet<\/a>\u00a0)\u3002 \u57fa\u4e8e .NET MAUI\uff0c\u5b83\u91c7\u7528 Model &#8211; Views &#8211; Update (MVU) \u6a21\u5f0f. \u548c\u4f20\u7edf\u7684 XAML \u76f8\u6bd4 \uff0c \u5b83\u6709\u51e0\u4e2a\u663e\u8457\u7684\u7279\u70b9<\/span><\/p>\n<ol class=\"code-line\" dir=\"auto\" data-line=\"87\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"87\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"87\"><span style=\"font-size: 12pt;\">\u57fa\u4e8e\u51fd\u6570\u5f0f\u7f16\u7a0b<\/span><\/p>\n<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"91\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"91\"><span style=\"font-size: 12pt;\">Comet \u53c2\u8003\u4e86 SwiftUI \u548c Flutter \u63cf\u8ff0\u754c\u9762\u7684\u65b9\u5f0f\uff0c\u66f4\u5bb9\u6613\u53bb\u7f16\u5199\u9875\u9762\u5c42\u6b21\u903b\u8f91\uff0c\u5982\uff1a<\/span><\/p>\n<\/li>\n<\/ol>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/03.png\"><img decoding=\"async\" class=\"alignnone size-large wp-image-241\" src=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/03-1024x650.png\" alt=\"Image 03\" width=\"640\" height=\"406\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/03-1024x650.png 1024w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/03-300x190.png 300w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/03-768x487.png 768w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/03-1536x974.png 1536w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/03-2048x1299.png 2048w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<div>\n<ol class=\"code-line\" dir=\"auto\" start=\"3\" data-line=\"95\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"95\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"95\"><span style=\"font-size: 12pt;\">\u7528 Comet \u5f00\u53d1 .NET MAUI \u5e94\u7528\u4e0d\u4ec5\u53ef\u4ee5\u5728 Visual Studio \u4e0a\u5f00\u53d1 \uff0c\u4e5f\u53ef\u4ee5\u5728 Visual Studio Code \u4e0a\u5f00\u53d1\u3002<\/span><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"97\"><span style=\"font-size: 12pt;\"><strong>\u6ce8\u610f\uff1a<\/strong>\u5982\u679c\u9700\u8981\u5728 Visual Studio Code \u8c03\u8bd5 .NET MAUI \u5e94\u7528\uff0c\u8bf7\u5b89\u88c5 C# \u548c .NET Comet \u7ec4\u4ef6<\/span><\/p>\n<\/li>\n<\/ol>\n<h3 id=\"%E7%BB%91%E5%AE%9A-iosandroid-%E5%8E%9F%E7%94%9F%E5%BA%93%E7%9A%84%E6%8A%80%E5%B7%A7\" class=\"code-line\" dir=\"auto\" data-line=\"99\"><span style=\"font-size: 14pt;\"><strong>\u7ed1\u5b9a iOS\/Android \u539f\u751f\u5e93\u7684\u6280\u5de7<\/strong><\/span><\/h3>\n<p class=\"code-line\" dir=\"auto\" data-line=\"101\"><span style=\"font-size: 12pt;\">\u4e00\u4e2a\u597d\u7684\u5e94\u7528\u9700\u8981\u6574\u5408\u975e\u5e38\u591a\u7684\u573a\u666f\uff0c\u5982\u652f\u4ed8\uff0c\u7535\u5546\uff0c\u5730\u56fe\u7b49\uff0c\u4f5c\u4e3a\u5f00\u53d1\u56e2\u961f\u4e0d\u9700\u8981\u91cd\u590d\u9020\u8f66\uff0c\u76f4\u63a5\u53ef\u4ee5\u8c03\u7528\u4e0d\u540c\u7684 SDK \u6765\u5b8c\u6210\u76f8\u5173\u7684\u64cd\u4f5c\u3002 .NET MAUI \u89e3\u51b3\u4e86\u8de8\u5e73\u53f0\u5e94\u7528\u754c\u9762\u548c\u7edd\u5927\u591a\u6570\u9875\u9762\u903b\u8f91\u4ee5\u53ca\u4e1a\u52a1\u903b\u8f91\u7684\u95ee\u9898\u3002\u4f46\u5f53\u6211\u4eec\u4f7f\u7528\u7b2c\u4e09\u65b9 SDK \u65f6\u4f60\u4f1a\u53d1\u73b0\u7f3a\u5c11\u76f8\u5173 .NET MAUI \u7684\u539f\u751f\u5e93\uff0c\u901a\u8fc7 Binding \u53ef\u4ee5\u8ba9 .NET MAUI \u7ed1\u5b9a iOS \/ Android \u7684\u539f\u751f\u5e93\u3002<\/span><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"103\"><span style=\"font-size: 12pt;\">\u4ece DJI Ryze Tello SDK \u6587\u6863\u53ef\u77e5\u901a\u8fc7 UDP \u53ef\u4ee5\u63a7\u5236 DJI Ryze Tello , \u4e5f\u53ef\u4ee5\u901a\u8fc7 UDP \u5b9e\u65f6\u56fe\u4f20 DJI Ryze Tello \u7684\u6444\u50cf\u5934\u4fe1\u53f7\u3002\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u9700\u8981\u901a\u8fc7 libVLC \u5e93\u5bf9 DJI Ryze Tello \u6444\u50cf\u5934\u63d0\u4f9b\u7684 UDP \u4fe1\u53f7\u8fdb\u884c H264 \u7f16\u7801\u89e3\u7801\u7684\u670d\u52a1\u5e76\u663e\u793a\u5728\u79fb\u52a8\u5e94\u7528\u7684\u754c\u9762\u4e0a\u3002<\/span><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"105\"><span style=\"font-size: 12pt;\">\u5728 .NET MAUI \u4e0a\uff0c\u6211\u4e00\u822c\u901a\u8fc7\u547d\u4ee4\u884c\u521b\u5efa iOS \/ Android \u539f\u751f\u7ed1\u5b9a\u9879\u76ee\uff0c\u5982\u4e0b<\/span><\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">dotnet new iosbinding -o VLCSharp.iOS \r\n\r\ndotnet new android-bindinglib -o VLCSharp.Droid<\/code><\/pre>\n<p class=\"code-line\" dir=\"auto\" data-line=\"116\"><strong>iOS \u7ed1\u5b9a libVLC \u5e93\u76f8\u5173\u6280\u5de7<\/strong><\/p>\n<ol class=\"code-line\" dir=\"auto\" data-line=\"118\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"118\">\u7528 Sharpie \u505a\u521d\u6b21\u8f6c\u6362<\/li>\n<\/ol>\n<p class=\"code-line\" dir=\"auto\" data-line=\"129\">\u6211\u4eec\u901a\u8fc7\u5b89\u88c5 Sharpie \u9488\u5bf9 iOS \u7684 libVLC \u5e93 MobileVLCKit.framework \u8fdb\u884c\u7ed1\u5b9a\uff0c\u901a\u8fc7\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u53ef\u4ee5\u5feb\u901f\u8f6c\u6362 libVLC \u7684\u5e93<\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">sharpie bind -framework .\/MobileVLCKit.framework --namespace MobileVLCKit -sdk iphoneos16.1<\/code><\/pre>\n<p class=\"code-line\" dir=\"auto\" data-line=\"137\"><strong>\u6ce8\u610f\uff1a<\/strong> iOS \u539f\u751f\u5e93\u5bf9\u5e94\u7684 iOS \u7248\u672c\uff0c\u5426\u5219\u4f60\u662f\u6ca1\u529e\u6cd5\u8fdb\u884c\u8f6c\u6362<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"139\">\u8f6c\u6362\u540e\u66ff\u6362\u9879\u76ee\u4e2d\u7684 StructsAndEnums.cs \u548c ApiDefinitions.cs \u4ee5\u53ca\u628a MobileVLCKit.framework \u6dfb\u52a0\u5230 iOS \u7ed1\u5b9a\u7684\u9879\u76ee VLCSharp.iOS \u4e2d<\/p>\n<ol class=\"code-line\" dir=\"auto\" start=\"2\" data-line=\"133\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"141\">\u4fee\u6539 csproj \u6587\u4ef6\uff0c\u628a\u539f\u751f\u5e93\u4f9d\u8d56\u7684\u5e93\u90fd\u9700\u8981\u6dfb\u52a0\u8fdb\u53bb<\/li>\n<\/ol>\n<pre class=\"prettyprint language-xml\"><code class=\"language-xml\">\r\n&lt;Project Sdk=\"Microsoft.NET.Sdk\"&gt;\r\n  &lt;PropertyGroup&gt;\r\n    &lt;TargetFramework&gt;net7.0-ios&lt;\/TargetFramework&gt;\r\n    &lt;RootNamespace&gt;MobileVLCKit&lt;\/RootNamespace&gt;\r\n    &lt;Nullable&gt;enable&lt;\/Nullable&gt;\r\n    &lt;ImplicitUsings&gt;true&lt;\/ImplicitUsings&gt;\r\n    &lt;IsBindingProject&gt;true&lt;\/IsBindingProject&gt;\r\n\t&lt;AllowUnsafeBlocks&gt;true&lt;\/AllowUnsafeBlocks&gt;\r\n\t&lt;NoBindingEmbedding&gt;false&lt;\/NoBindingEmbedding&gt;\r\n  &lt;\/PropertyGroup&gt;\r\n\r\n  &lt;ItemGroup&gt;\r\n    &lt;ObjcBindingApiDefinition Include=\"ApiDefinition.cs\" \/&gt;\r\n    &lt;ObjcBindingCoreSource Include=\"StructsAndEnums.cs\" \/&gt;\r\n  &lt;\/ItemGroup&gt;\r\n\r\n  &lt;ItemGroup&gt;\r\n    &lt;NativeReference Include=\"MobileVLCKit.framework\"&gt;\r\n      &lt;Kind&gt;Framework&lt;\/Kind&gt;\r\n      &lt;IsCxx&gt;True&lt;\/IsCxx&gt;\r\n      &lt;ForceLoad&gt;True&lt;\/ForceLoad&gt;\r\n      &lt;SmartLink&gt;True&lt;\/SmartLink&gt;\r\n      &lt;Frameworks&gt;MediaPlayer Accelerate AssetsLibrary AVFoundation CoreMedia AudioToolbox CoreData CoreMedia CoreSpotlight MobileCoreServices CoreAudio OpenGLES CFNetwork CoreText QuartzCore CoreGraphics UIKit Security StoreKit SystemConfiguration VideoToolbox&lt;\/Frameworks&gt;\r\n      &lt;LinkerFlags&gt;-lbz2 -liconv -lstdc++&lt;\/LinkerFlags&gt;\r\n    &lt;\/NativeReference&gt;\r\n  &lt;\/ItemGroup&gt;\r\n&lt;\/Project&gt;<\/code><\/pre>\n<ol class=\"code-line\" dir=\"auto\" start=\"3\" data-line=\"176\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"176\">\u9996\u6b21\u7f16\u8bd1\uff0c\u4f1a\u51fa\u9519\uff0c\u8bf7\u4ece GitHub <a href=\"https:\/\/github.com\/kinfey\/dotNETMauiHOL\/tree\/main\/code\/apps\/02.Binding\/TelloApp.Bindings\/VLCSharp.iOS\" data-href=\"https:\/\/github.com\/kinfey\/dotNETMauiHOL\/tree\/main\/code\/apps\/02.Binding\/TelloApp.Bindings\/VLCSharp.iOS\">https:\/\/github.com\/kinfey\/dotNETMauiHOL\/tree\/main\/code\/apps\/02.Binding\/TelloApp.Bindings\/VLCSharp.iOS<\/a>\u00a0\u4e0b\u8f7d\u5e76\u66ff\u6362 StructsAndEnums.cs \u548c ApiDefinitions.cs<\/li>\n<\/ol>\n<p class=\"code-line\" dir=\"auto\" data-line=\"178\">\u66ff\u6362\u540e\u7f16\u8bd1\u5c31\u6210\u529f\u4e86<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"180\">\u5982\u679c\u5e0c\u671b\u4e86\u89e3\u66f4\u591a iOS Binding \u7684\u77e5\u8bc6\u548c\u76f8\u5173\u6280\u5de7\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u8be5\u8fde\u63a5\u4e86\u89e3\u00a0<a href=\"https:\/\/github.com\/kinfey\/AMapMAUIControls\/blob\/main\/tutorial\/cn\/01.iOSBinding.md\" data-href=\"https:\/\/github.com\/kinfey\/AMapMAUIControls\/blob\/main\/tutorial\/cn\/01.iOSBinding.md\">https:\/\/github.com\/kinfey\/AMapMAUIControls\/blob\/main\/tutorial\/cn\/01.iOSBinding.md<\/a><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"175\"><strong>Android \u7ed1\u5b9a libVLC \u5e93\u76f8\u5173\u6280\u5de7<\/strong><\/p>\n<ol class=\"code-line\" dir=\"auto\" data-line=\"177\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"177\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"177\">\u521b\u5efa Jars \u6587\u4ef6\u5939\uff0c\u628a Android \u7684 libVLC \u7684\u5e93 org.videolan.libvlc.aar \u6dfb\u52a0\u5230\u7ed1\u5b9a\u7684\u9879\u76ee Jars \u6587\u4ef6\u5939\u4e2d<\/p>\n<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"180\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"180\">\u4fee\u6539 .csproj \u6587\u4ef6<\/p>\n<\/li>\n<\/ol>\n<pre class=\"prettyprint language-xml\"><code class=\"language-xml\">&lt;Project Sdk=\"Microsoft.NET.Sdk\"&gt;\r\n  &lt;PropertyGroup&gt;\r\n    &lt;TargetFramework&gt;net7.0-android&lt;\/TargetFramework&gt;\r\n    &lt;SupportedOSPlatformVersion&gt;21&lt;\/SupportedOSPlatformVersion&gt;\r\n    &lt;Nullable&gt;enable&lt;\/Nullable&gt;\r\n    &lt;ImplicitUsings&gt;enable&lt;\/ImplicitUsings&gt;\r\n  &lt;\/PropertyGroup&gt;\r\n\r\n  &lt;ItemGroup&gt;\r\n    &lt;LibraryProjectZip Include=\"Jars\\org.videolan.libvlc.aar\" \/&gt;\r\n  &lt;\/ItemGroup&gt;\r\n\r\n  &lt;ItemGroup&gt;\r\n    &lt;TransformFile Include=\"Transforms\\Metadata.xml\" \/&gt;\r\n    &lt;TransformFile Include=\"Transforms\\EnumFields.xml\" \/&gt;\r\n    &lt;TransformFile Include=\"Transforms\\EnumMethods.xml\" \/&gt;\r\n  &lt;\/ItemGroup&gt;\r\n&lt;\/Project&gt;<\/code><\/pre>\n<ol class=\"code-line\" dir=\"auto\" start=\"3\" data-line=\"214\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"214\">\u7f16\u8bd1\uff0c\u548c iOS \u4e00\u6837\u7f16\u8bd1\u51fa\u9519\uff0c\u8bf7\u4ece GitHub\u00a0<a href=\"https:\/\/github.com\/kinfey\/dotNETMauiHOL\/tree\/main\/code\/apps\/02.Binding\/TelloApp.Bindings\/VLCSharp.Droid\" data-href=\"https:\/\/github.com\/kinfey\/dotNETMauiHOL\/tree\/main\/code\/apps\/02.Binding\/TelloApp.Bindings\/VLCSharp.Droid\">https:\/\/github.com\/kinfey\/dotNETMauiHOL\/tree\/main\/code\/apps\/02.Binding\/TelloApp.Bindings\/VLCSharp.Droid<\/a>\u00a0\u4e0b\u8f7d\u5e76\u66ff\u6362 EnumMethods.xml<\/li>\n<\/ol>\n<p class=\"code-line\" dir=\"auto\" data-line=\"216\">\u66ff\u6362\u540e\uff0c\u7f16\u8bd1\u6210\u529f\u4e86<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"218\">\u5982\u679c\u5e0c\u671b\u4e86\u89e3\u66f4\u591a Android Binding \u7684\u77e5\u8bc6\u548c\u76f8\u5173\u6280\u5de7\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u8be5\u8fde\u63a5\u4e86\u89e3\u00a0<a href=\"https:\/\/github.com\/kinfey\/AMapMAUIControls\/blob\/main\/tutorial\/cn\/02.DroidBinding.md\" data-href=\"https:\/\/github.com\/kinfey\/AMapMAUIControls\/blob\/main\/tutorial\/cn\/02.DroidBinding.md\">https:\/\/github.com\/kinfey\/AMapMAUIControls\/blob\/main\/tutorial\/cn\/02.DroidBinding.md<\/a><\/p>\n<h2 id=\"%E8%87%AA%E5%AE%9A%E4%B9%89%E7%95%8C%E9%9D%A2%E6%8E%A7%E4%BB%B6\" class=\"code-line\" dir=\"auto\" data-line=\"220\"><span style=\"font-size: 14pt;\"><strong>\u81ea\u5b9a\u4e49\u754c\u9762\u63a7\u4ef6<\/strong><\/span><\/h2>\n<p class=\"code-line\" dir=\"auto\" data-line=\"214\"><span style=\"font-size: 12pt;\">.NET MAUI \u53ef\u4ee5\u901a\u8fc7 Handler \u6784\u5efa\u81ea\u5b9a\u4e49\u754c\u9762\u63a7\u4ef6\uff0c\u6211\u4eec\u901a\u8fc7 Handler \u7ed1\u5b9a LibVLC \u5b9e\u73b0\u56fe\u4f20\uff0c\u800c\u4e14\u548c\u4e00\u822c\u81ea\u5b9a\u4e49\u9875\u9762\u63a7\u4ef6\u4e0d\u540c\u867d\u7136\u7528\u7684\u90fd\u662f libVLC \u5e93\uff0c\u4f46\u5728\u4e0d\u540c\u5e73\u53f0\u4e0a\u8c03\u7528\u65b9\u5f0f\u4ee5\u53ca\u6784\u5efa\u65b9\u5f0f\u662f\u4e0d\u540c\u7684\uff0c\u6240\u4ee5\u5728 Platforms \u4e0a\u9700\u8981\u9488\u5bf9\u4e0d\u540c\u7684\u63a7\u4ef6\u6765\u5b8c\u6210\u5b9a\u4e49\uff0c\u5206\u522b\u5b9a\u4e49 iOS \u6587\u4ef6\u5939\u65b0\u589e VideoPlayerView.ios.cs \uff0c Android \u6587\u4ef6\u5939\u65b0\u589e VideoPlayerView.android.cs<\/span><\/p>\n<p dir=\"auto\" data-line=\"214\"><a href=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/04.png\"><img decoding=\"async\" class=\"alignnone size-large wp-image-251\" src=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/04-1024x559.png\" alt=\"Image 04\" width=\"640\" height=\"349\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/04-1024x559.png 1024w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/04-300x164.png 300w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/04-768x420.png 768w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/04-1536x839.png 1536w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/04-2048x1119.png 2048w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p dir=\"auto\" data-line=\"214\">\u4e4b\u540e\u518d\u901a\u8fc7\u7ee7\u627f Handler \u7684\u7c7b\u5206\u522b\u8c03\u7528\u6765\u5b8c\u6210\u81ea\u5b9a\u4e49 VLC \u63a7\u4ef6\u7684\u5b9a\u4e49<\/p>\n<p dir=\"auto\" data-line=\"214\"><a href=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/05.png\"><img decoding=\"async\" class=\"alignnone size-large wp-image-253\" src=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/05-1024x462.png\" alt=\"Image 05\" width=\"640\" height=\"289\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/05-1024x462.png 1024w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/05-300x135.png 300w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/05-768x347.png 768w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/05-1536x694.png 1536w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/05-2048x925.png 2048w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p dir=\"auto\" data-line=\"214\">\u6211\u4eec\u53ef\u4ee5\u65e0\u7f1d\u628a\u81ea\u5b9a\u4e49\u7684 VLC \u63a7\u4ef6\u6dfb\u52a0\u5230\u6211\u4eec\u7684\u5e94\u7528\u4e2d\uff0c\u548c Commet UI \u662f\u65e0\u7f1d\u5bf9\u63a5\u7684<\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">new VStack\r\n{\r\n    new VlcUI().Padding(20).Alignment(Alignment.TopLeading)\r\n}.Frame(width:400,height:300).Alignment(Alignment.Center),<\/code><\/pre>\n<h2 dir=\"auto\" data-line=\"251\"><span style=\"font-size: 12pt;\">\u6211\u4eec\u53ef\u4ee5\u770b\u770b\u90a3\u5b89\u5353\u4e0a\u7684\u5b9e\u73b0\u6548\u679c\uff0c\u901a\u8fc7\u56fe\u4f20\u53ef\u4ee5\u5b9e\u65f6\u5728\u5e94\u7528\u7aef\u83b7\u53d6 DJI Ryze Tello \u7684\u6444\u50cf\u5934\u4fe1\u53f7<\/span><\/h2>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/06.png\"><img decoding=\"async\" class=\"size-large wp-image-255 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/06-461x1024.png\" alt=\"Image 06\" width=\"461\" height=\"1024\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/06-461x1024.png 461w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/06-135x300.png 135w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/06-768x1707.png 768w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/06-691x1536.png 691w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/06-922x2048.png 922w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/06.png 1080w\" sizes=\"(max-width: 461px) 100vw, 461px\" \/><\/a><\/p>\n<h2 dir=\"auto\" data-line=\"251\"><span style=\"font-size: 12pt;\">\u5f53\u6211\u4eec\u5b8c\u6210\u9875\u9762\u903b\u8f91\u548c\u4e1a\u52a1\u903b\u8f91\u6784\u5efa\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u7528 .NET MAUI \u6784\u5efa\u7684 iOS \/ Android \u5e94\u7528\u5feb\u901f\u542f\u52a8 DJI Ryze Tello \uff0c\u4e0b\u56fe\u662f\u5728 iPhone \u63a7\u5236 DJI Ryze Tello \u8d77\u964d\u7684\u6548\u679c\uff0c\u4ee5\u53ca\u5b9e\u65f6\u56fe\u4f20<\/span><\/h2>\n<p><div style=\"width: 640px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-229-2\" width=\"640\" height=\"360\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/notebook.mp4?_=2\" \/><a href=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/notebook.mp4\">https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/02\/notebook.mp4<\/a><\/video><\/div><\/p>\n<h2 id=\"%E5%B0%8F%E7%BB%93\" class=\"code-line\" dir=\"auto\" data-line=\"251\"><span style=\"font-size: 14pt;\"><strong>\u5c0f\u7ed3<\/strong><\/span><\/h2>\n<p class=\"code-line\" dir=\"auto\" data-line=\"253\"><span style=\"font-size: 12pt;\">\u8fd9\u5c31\u662f\u901a\u8fc7 .NET \u63a7\u5236 DJI Ryze Tello \u7684\u4e3b\u8981\u6b65\u9aa4\uff0c\u5982\u679c\u5927\u5bb6\u5e0c\u671b\u4e86\u89e3\u66f4\u591a\u7ec6\u8282\u548c\u66f4\u8be6\u7ec6\u5185\u5bb9\uff0c\u8bf7\u8bbf\u95ee\u00a0<a href=\"https:\/\/github.com\/kinfey\/dotNETMauiHOL\" data-href=\"https:\/\/github.com\/kinfey\/dotNETMauiHOL\">https:\/\/github.com\/kinfey\/dotNETMauiHOL<\/a> , \u8fd9\u91cc\u9762\u5305\u62ec\u4e86\u5b8c\u6574\u7684\u5b66\u4e60\u5185\u5bb9\uff0c\u8fd8\u6709\u5177\u4f53\u7ec6\u8282\uff0c\u5e0c\u671b\u5404\u4f4d\u80fd\u66f4\u597d\u5730\u638c\u63e1\u7528 .NET MAUI \u8de8\u5e73\u53f0\u5e94\u7528\u7684\u6280\u5de7\uff0c\u505a\u66f4\u591a\u6709\u8da3\u7684\u5e94\u7528\u3002<\/span><\/p>\n<table style=\"border-collapse: collapse; width: 100%; height: 196px;\">\n<tbody>\n<tr style=\"height: 28px;\">\n<td style=\"width: 10.1299%; height: 28px;\"><strong>\u5b66\u4e60\u4e3b\u9898<\/strong><\/td>\n<td style=\"width: 61.1477%; height: 28px; text-align: left;\"><strong>\u76f8\u5173\u5185\u5bb9<\/strong><\/td>\n<td style=\"width: 3.14702%; text-align: center;\"><strong>\u70b9\u51fb\u8fdb\u5165<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 10.1299%; height: 28px;\">\u5f00\u53d1\u73af\u5883\u914d\u7f6e<\/td>\n<td style=\"width: 61.1477%; height: 28px;\">\u5f00\u53d1\u73af\u5883\u642d\u5efa\u6280\u5de7\uff0c\u5305\u62ec .NET MAUI \u73af\u5883\u7684\u5b89\u88c5 \uff0c\u5f00\u53d1\u5de5\u5177\u7684\u914d\u7f6e\u4ee5\u53ca\u57fa\u4e8e iOS \/ Android \u5e94\u7528\u5f00\u53d1\u8981\u51c6\u5907\u7684\u6761\u4ef6<\/td>\n<td style=\"width: 3.14702%; text-align: center;\"><a href=\"https:\/\/github.com\/kinfey\/dotNETMauiHOL\/blob\/main\/cn\/01.UDPwithCSharp.md\" target=\"_blank\" rel=\"noopener\">\u70b9\u51fb\u8fdb\u5165<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 10.1299%; height: 28px;\">C# UDP \u7f16\u7a0b\u57fa\u7840<\/td>\n<td style=\"width: 61.1477%; height: 28px;\">\u5b66\u4e60 C# UDP \u7f16\u7a0b \uff0c\u4ee5\u53ca\u901a\u8fc7 Notebooks \u8fde\u63a5 DJI Ryze Tello \uff0c\u5b8c\u6210\u539f\u578b\u5f00\u53d1\u7684\u642d\u5efa<\/td>\n<td style=\"width: 3.14702%; text-align: center;\"><a href=\"https:\/\/github.com\/kinfey\/dotNETMauiHOL\/blob\/main\/cn\/01.UDPwithCSharp.md\" target=\"_blank\" rel=\"noopener\">\u70b9\u51fb\u8fdb\u5165<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 10.1299%; height: 28px;\">.NET MAUI \u57fa\u7840\u5b66\u4e60<\/td>\n<td style=\"width: 61.1477%;\">\u5b66\u4e60 .NET MAUI \u7684\u76f8\u5173\u77e5\u8bc6\uff0c\u5305\u62ec iOS \/ Android \u5f00\u53d1\u7684\u76f8\u5173\u77e5\u8bc6<\/td>\n<td style=\"width: 3.14702%; text-align: center;\"><a href=\"https:\/\/github.com\/kinfey\/dotNETMauiHOL\/blob\/main\/cn\/02.dotNETMAUIIntro.md\" target=\"_blank\" rel=\"noopener\">\u70b9\u51fb\u8fdb\u5165<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 10.1299%; height: 28px;\">.NET MAUI Comet UI \u6784\u5efa\u5e94\u7528\u754c\u9762<\/td>\n<td style=\"width: 61.1477%; height: 28px;\">\u5b66\u4e60 .NET MAUI Comet \u7684\u76f8\u5173\u77e5\u8bc6 \uff0c \u4f7f\u7528 .NET MAUI Comet \u6784\u5efa\u5e94\u7528\u754c\u9762<\/td>\n<td style=\"width: 3.14702%; text-align: center;\"><a href=\"https:\/\/github.com\/kinfey\/dotNETMauiHOL\/blob\/main\/cn\/03.dotNETMAUIComet.md\" target=\"_blank\" rel=\"noopener\">\u70b9\u51fb\u8fdb\u5165<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 10.1299%; height: 28px;\">.NET MAUI \u7ed1\u5b9a\u79fb\u52a8\u5e94\u7528\u7684\u539f\u751f\u5e93<\/td>\n<td style=\"width: 61.1477%; height: 28px;\">\u5b66\u4e60\u628a\u79fb\u52a8\u5e94\u7528\u539f\u751f\u5e93\u8fc1\u79fb\u5230 .NET MAUI<\/td>\n<td style=\"width: 3.14702%; text-align: center;\"><a href=\"https:\/\/github.com\/kinfey\/dotNETMauiHOL\/blob\/main\/cn\/04.dotNETMAUIBinding.md\" target=\"_blank\" rel=\"noopener\">\u70b9\u51fb\u8fdb\u5165<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 10.1299%; height: 28px;\">.NET MAUI \u6784\u5efa\u4e00\u4e2a\u5b8c\u6574\u7684\u9879\u76ee\u6280\u5de7<\/td>\n<td style=\"width: 61.1477%; height: 28px;\">\u7528 .NET MAUI \u6784\u5efa\u4e00\u4e2a\u5b8c\u6574\u9879\u76ee\u7684\u6280\u5de7\uff0c\u5305\u62ec\u4e0d\u540c\u5e73\u53f0\u7684\u8bbe\u5b9a\u4ee5\u53ca\u81ea\u5b9a\u4e49\u63a7\u4ef6\u7b49\u77e5\u8bc6<\/td>\n<td style=\"width: 3.14702%; text-align: center;\"><a href=\"https:\/\/github.com\/kinfey\/dotNETMauiHOL\/blob\/main\/cn\/05.dotNETMAUIApps.md\" target=\"_blank\" rel=\"noopener\">\u70b9\u51fb\u8fdb\u5165<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"code-line\" dir=\"auto\" data-line=\"253\"><span style=\"font-size: 14pt;\"><strong>\u76f8\u5173\u8d44\u6e90<\/strong><\/span><\/p>\n<ol class=\"code-line\" dir=\"auto\" data-line=\"259\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"259\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"259\">\u7528 .NET MAUI \u6784\u5efa DJI Ryze Tello \u65e0\u4eba\u673a\u5e94\u7528\u7cfb\u5217\u00a0<a href=\"https:\/\/github.com\/kinfey\/dotNETMauiHOL\" data-href=\"https:\/\/github.com\/kinfey\/dotNETMauiHOL\">https:\/\/github.com\/kinfey\/dotNETMauiHOL<\/a><\/p>\n<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"261\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"261\">\u5b66\u4e60 .NET MAUI\u00a0<a href=\"https:\/\/aka.ms\/mauiBlog.Learn\" data-href=\"https:\/\/aka.ms\/mauiBlog.Learn\">https:\/\/aka.ms\/mauiBlog.Learn<\/a><\/p>\n<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"263\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"263\">\u5173\u4e8e .NET Polyglot Notebook\u00a0<a href=\"https:\/\/aka.ms\/mauiBlog.Notebook\" data-href=\"https:\/\/aka.ms\/mauiBlog.Notebook\">https:\/\/aka.ms\/mauiBlog.Notebook<\/a><\/p>\n<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"265\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"265\">.NET MAUI \u7ed1\u5b9a iOS \u539f\u751f\u5e93\u00a0<a href=\"https:\/\/aka.ms\/mauiBlog.iOSBinding\" data-href=\"https:\/\/aka.ms\/mauiBlog.iOSBinding\">https:\/\/aka.ms\/mauiBlog.iOSBinding<\/a><\/p>\n<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"267\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"267\">.NET MAUI \u7ed1\u5b9a Android \u539f\u751f\u5e93\u00a0<a href=\"https:\/\/aka.ms\/mauiBlog.DroidBinding\" data-href=\"https:\/\/aka.ms\/mauiBlog.DroidBinding\">https:\/\/aka.ms\/mauiBlog.DroidBinding<\/a><\/p>\n<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"269\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"269\">.NET MAUI \u81ea\u5b9a\u4e49\u9875\u9762\u63a7\u4ef6\u00a0<a href=\"https:\/\/aka.ms\/mauiBlog.CustomUI\" data-href=\"https:\/\/aka.ms\/mauiBlog.CustomUI\">https:\/\/aka.ms\/mauiBlog.CustomUI<\/a><\/p>\n<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"271\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"271\">C# \u8c03\u7528 UDP\u00a0<a href=\"https:\/\/aka.ms\/mauiBlog.UDP\" data-href=\"https:\/\/aka.ms\/mauiBlog.UDP\">https:\/\/aka.ms\/mauiBlog.UDP<\/a><\/p>\n<\/li>\n<\/ol>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u5927\u7586\u7684 DJI Ryze Tello \u662f\u5165\u95e8\u7ea7\u7684\u65e0\u4eba\u673a\uff0c\u4e0d\u4ec5\u5728 STEM \u6559\u80b2\u4e2d\u6709\u975e\u5e38\u5e7f\u6cdb\u7684\u5e94\u7528\uff0c\u4e5f\u53ef\u4ee5\u4f5c\u4e3a\u7f16\u7a0b\u5165\u95e8\u7684\u9996\u9009\u3002 \u901a\u8fc7 UDP \u534f\u8bae\u8c03\u7528 DJI Ryze Tello SDK \u53ef\u4ee5\u8ba9 DJI Ryze Tello \u65e0\u4eba\u673a\u6267\u884c\u8d77\u98de\uff0c\u964d\u843d\uff0c\u8f6c\u5411\u4ee5\u53ca\u4e0d\u540c\u7684\u82b1\u5f0f\u52a8\u4f5c\u3002 \u672c\u6587\u5c06\u4f1a\u901a\u8fc7 .NET \u521b\u5efa\u5e94\u7528\u6765\u63a7\u5236 DJI Ryze Tello\u3002 .NET UDP \u7f16\u7a0b \u4ec0\u4e48\u662f UDP \u201cUDP\uff08\u7528\u6237\u6570\u636e\u62a5\u534f\u8bae\uff09\u662f\u4e00\u4e2a\u4e0eIP \u534f\u8bae\u4e00\u8d77\u4f7f\u7528\u7684\u957f\u671f\u534f\u8bae\uff0c\u7528\u4e8e\u5728\u4f20\u8f93\u901f\u5ea6\u548c\u6548\u7387\u6bd4\u5b89\u5168\u6027\u548c\u53ef\u9760\u6027\u66f4\u91cd\u8981\u7684\u573a\u5408\u4e0b\u53d1\u9001\u6570\u636e\u3002 UDP \u4f7f\u7528\u4e00\u4e2a\u7b80\u5355\u7684\u3001\u5177\u6709\u6700\u5c0f\u534f\u8bae\u673a\u5236\u7684\u65e0\u8fde\u63a5\u901a\u4fe1\u6a21\u578b\u3002 UDP \u4f7f\u7528\u6821\u9a8c\u548c\u4fdd\u8bc1\u6570\u636e\u5b8c\u6574\u6027\uff0c\u4f7f\u7528\u7aef\u53e3\u53f7\u4ee5\u533a\u5206\u6570\u636e\u53d1\u9001\u65b9\u548c\u63a5\u6536\u65b9\u4e2d\u4e0d\u540c\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u5b83\u65e0\u9700\u63e1\u624b\u4f1a\u8bdd\uff0c\u5373\u5c06\u4e0d\u53ef\u9760\u7684\u5e95\u5c42\u7f51\u7edc\u76f4\u63a5\u66b4\u9732\u7ed9\u4e86\u7528\u6237\u7684\u5e94\u7528\u7a0b\u5e8f\uff1a\u4e0d\u4fdd\u8bc1\u6d88\u606f\u4ea4\u4ed8\u3001\u4e0d\u4fdd\u8bc1\u4ea4\u4ed8\u987a\u5e8f\u4e5f\u4e0d\u4fdd\u8bc1\u6d88\u606f\u4e0d\u91cd\u590d\u3002\u5982\u679c\u9700\u8981\u7f51\u7edc\u63a5\u53e3\u5c42\u9762\u7684\u7ea0\u9519\u529f\u80fd\uff0c\u5219\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u4f7f\u7528\u4e3a\u6b64\u76ee\u7684\u8bbe\u8ba1\u7684\u4f20\u8f93\u63a7\u5236\u534f\u8bae\uff08TCP\uff09\u6216\u8005\u6d41\u63a7\u5236\u4f20\u8f93\u534f\u8bae\uff08SCTP\uff09\u3002\u201d \u5728\u73b0\u573a\u5b9e\u65f6\u6d4b\u63a7\u9886\u57df\uff0c\u5982\u679c\u6709\u5b9e\u65f6\u3001\u6297\u5e72\u6270\u6027\u3001\u5b89\u5168\u6027\u7b49\u8981\u6c42\uff0c\u90fd\u53ef\u4ee5\u91c7\u7528 UDP \u4f20\u8f93\u6570\u636e\u3002\u6211\u60f3\u8fd9\u4e5f\u662f DJI Ryze Tello \u4e3a\u4f55\u4f7f\u7528 UDP \u534f\u8bae\u901a\u4fe1\u7684\u539f\u56e0\u3002 C# \u8c03\u7528 UDP Client \u5728 System.Net.Sockets \u4e0b\u4f60\u53ef\u4ee5\u901a\u8fc7\u7c7b UdpClient \u6765\u5b8c\u6210 UDP [&hellip;]<\/p>\n","protected":false},"author":106050,"featured_media":64,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[2,5,10],"class_list":["post-229","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet-ch","tag-net","tag-net-maui","tag-c"],"acf":[],"blog_post_summary":"<p>\u5927\u7586\u7684 DJI Ryze Tello \u662f\u5165\u95e8\u7ea7\u7684\u65e0\u4eba\u673a\uff0c\u4e0d\u4ec5\u5728 STEM \u6559\u80b2\u4e2d\u6709\u975e\u5e38\u5e7f\u6cdb\u7684\u5e94\u7528\uff0c\u4e5f\u53ef\u4ee5\u4f5c\u4e3a\u7f16\u7a0b\u5165\u95e8\u7684\u9996\u9009\u3002 \u901a\u8fc7 UDP \u534f\u8bae\u8c03\u7528 DJI Ryze Tello SDK \u53ef\u4ee5\u8ba9 DJI Ryze Tello \u65e0\u4eba\u673a\u6267\u884c\u8d77\u98de\uff0c\u964d\u843d\uff0c\u8f6c\u5411\u4ee5\u53ca\u4e0d\u540c\u7684\u82b1\u5f0f\u52a8\u4f5c\u3002 \u672c\u6587\u5c06\u4f1a\u901a\u8fc7 .NET \u521b\u5efa\u5e94\u7528\u6765\u63a7\u5236 DJI Ryze Tello\u3002 .NET UDP \u7f16\u7a0b \u4ec0\u4e48\u662f UDP \u201cUDP\uff08\u7528\u6237\u6570\u636e\u62a5\u534f\u8bae\uff09\u662f\u4e00\u4e2a\u4e0eIP \u534f\u8bae\u4e00\u8d77\u4f7f\u7528\u7684\u957f\u671f\u534f\u8bae\uff0c\u7528\u4e8e\u5728\u4f20\u8f93\u901f\u5ea6\u548c\u6548\u7387\u6bd4\u5b89\u5168\u6027\u548c\u53ef\u9760\u6027\u66f4\u91cd\u8981\u7684\u573a\u5408\u4e0b\u53d1\u9001\u6570\u636e\u3002 UDP \u4f7f\u7528\u4e00\u4e2a\u7b80\u5355\u7684\u3001\u5177\u6709\u6700\u5c0f\u534f\u8bae\u673a\u5236\u7684\u65e0\u8fde\u63a5\u901a\u4fe1\u6a21\u578b\u3002 UDP \u4f7f\u7528\u6821\u9a8c\u548c\u4fdd\u8bc1\u6570\u636e\u5b8c\u6574\u6027\uff0c\u4f7f\u7528\u7aef\u53e3\u53f7\u4ee5\u533a\u5206\u6570\u636e\u53d1\u9001\u65b9\u548c\u63a5\u6536\u65b9\u4e2d\u4e0d\u540c\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u5b83\u65e0\u9700\u63e1\u624b\u4f1a\u8bdd\uff0c\u5373\u5c06\u4e0d\u53ef\u9760\u7684\u5e95\u5c42\u7f51\u7edc\u76f4\u63a5\u66b4\u9732\u7ed9\u4e86\u7528\u6237\u7684\u5e94\u7528\u7a0b\u5e8f\uff1a\u4e0d\u4fdd\u8bc1\u6d88\u606f\u4ea4\u4ed8\u3001\u4e0d\u4fdd\u8bc1\u4ea4\u4ed8\u987a\u5e8f\u4e5f\u4e0d\u4fdd\u8bc1\u6d88\u606f\u4e0d\u91cd\u590d\u3002\u5982\u679c\u9700\u8981\u7f51\u7edc\u63a5\u53e3\u5c42\u9762\u7684\u7ea0\u9519\u529f\u80fd\uff0c\u5219\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u4f7f\u7528\u4e3a\u6b64\u76ee\u7684\u8bbe\u8ba1\u7684\u4f20\u8f93\u63a7\u5236\u534f\u8bae\uff08TCP\uff09\u6216\u8005\u6d41\u63a7\u5236\u4f20\u8f93\u534f\u8bae\uff08SCTP\uff09\u3002\u201d \u5728\u73b0\u573a\u5b9e\u65f6\u6d4b\u63a7\u9886\u57df\uff0c\u5982\u679c\u6709\u5b9e\u65f6\u3001\u6297\u5e72\u6270\u6027\u3001\u5b89\u5168\u6027\u7b49\u8981\u6c42\uff0c\u90fd\u53ef\u4ee5\u91c7\u7528 UDP \u4f20\u8f93\u6570\u636e\u3002\u6211\u60f3\u8fd9\u4e5f\u662f DJI Ryze Tello \u4e3a\u4f55\u4f7f\u7528 UDP \u534f\u8bae\u901a\u4fe1\u7684\u539f\u56e0\u3002 C# \u8c03\u7528 UDP Client \u5728 System.Net.Sockets \u4e0b\u4f60\u53ef\u4ee5\u901a\u8fc7\u7c7b UdpClient \u6765\u5b8c\u6210 UDP [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/posts\/229","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/users\/106050"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/comments?post=229"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/posts\/229\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/media\/64"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/media?parent=229"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/categories?post=229"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/tags?post=229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}