0

我试图在我的网络上找到我的Roku 电视,显然它需要一些基于Roku API 帮助的 SSDP 发现,但是,我无法使用任何 Nuget 库搜索我的设备。

我遇到了ssdpradar,并且能够通过 Visual Studio 2017 社区版本安装 Visual Studio (VB.NET) 的 Nuget 包。但是,我找不到任何有关如何使用它的文档。

任何意见将是有益的。

解决方案:

我找到了一个解决方案,但不是ssdpradar而是RSSDP。在项目中添加块后,您可以使用以下代码行获取所有设备,然后从该列表中找到 Roku 位置 (ip+port)。

Imports Rssdp

For Each founddevice As DiscoveredSsdpDevice In founddevices.Result
    If founddevice.Usn.Contains("roku:ecp") Then
        Rokulocation = founddevice.DescriptionLocation.ToString()
        Exit For
    End If
Next
4

1 回答 1

0

我最近能够成功使用一个名为RokuDotNet的库。它是用 C# 编写的,但您可以将其作为项目加载到您的解决方案中并从 VB.NET 中引用它。

这大致是我使用它的方式:

Imports RokuDotNet.Client

Public Class Form1
    Private _discoveryClient As RokuDeviceDiscoveryClient

    Public Sub New()
        _discoveryClient = New RokuDeviceDiscoveryClient
        AddHandler _discoveryClient.DeviceDiscovered, AddressOf DiscoveryHandler
    End Sub

    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
        _discoveryClient.DiscoverDevicesAsync()
    End Sub

    Private Async Sub DiscoveryHandler(sender As Object, e As DeviceDiscoveredEventArgs)
        If InvokeRequired Then
            BeginInvoke(New Action(Sub() DiscoveryHandler(sender, e)))
            Return
        End If

        ' Get the display name for the device (if the user entered one when setting it up)
        Dim deviceInfo = Await e.Device.Query.GetDeviceInfoAsync
        Dim name = deviceInfo.UserDeviceName
        If String.IsNullOrEmpty(name) Then
            name = deviceInfo.ModelName
        End If
        AddDevice(e.Device, name)
    End Sub

    Private Sub AddDevice(device As RokuDevice, name As String)
        ' Your code here
    End Sub
End Class

您可能希望在该异步函数中的 await 周围添加一个 try/catch,以便在出现网络问题时显示错误。

于 2018-05-11T13:49:33.913 回答