OCast
Orange OCast SDK 为实现与 OCast 设备交互的 cast 应用程序提供了所有必要的 API 方法。
Objective-C 和 Swift 应用程序都可以使用 Orange OCast SDK 来使用 OCast 协议定义的 API。但是,需要使用 Swift 才能发送自定义命令的 API。
示例项目旨在演示 Orange OCast SDK 的基本指令集,以帮助您开始。
安装
OCast 可以通过 CocoaPods 获得。要安装它,只需将以下行添加到 Podfile
pod "OCast"
您还可以通过克隆仓库来检索源代码以构建项目
git clone https://github.com/Orange-OpenSource/OCast-iOS.git
以下是向 Swift 应用程序导入框架的方法
import OCast
以下是向 Objective-C 应用程序导入框架的方法
@import OCast;
使用
1. 注册您的设备类型
您必须将您的设备类型注册到制造商的 DeviceCenter
。制造商必须与UPNP设备描述响应中的制造商相同。
let deviceCenter = DeviceCenter()
center.registerDevice(ReferenceDevice.self, forManufacturer: "Manufacturer")
2. 发现设备
您需要调用 resumeDiscovery()
方法来启动设备发现。然后,您可以通过设置代理或注册通知来接受 DeviceCenter
的通知。
如果您的网络上找到了设备,将触发 center(_:didAdd:)
方法和 deviceCenterAddDevicesNotification
通知。
如果设备丢失(网络问题或设备已关闭),将触发 center(_:didRemove:)
方法和 deviceCenterRemoveDevicesNotification
通知。
deviceCenter.delegate = self
deviceCenter.resumeDiscovery()
// DeviceCenter delegate methods
func center(_ center: DeviceCenter, didAdd devices: [Device]) {}
func center(_ center: DeviceCenter, didRemove devices: [Device]) {}
func centerDidStop(_ center: DeviceCenter, withError error: Error?) {}
您可以通过调用 stopDiscovery()
方法来停止设备发现。这会触发 centerDidStop(_:withError:)
方法和 deviceCenterDiscoveryStoppedNotification
通知。发现的设备列表将被清理,因此如果您想保留它们,请改为调用 pauseDiscovery()
。这有助于管理应用的背景状态。
如果发生网络错误,也会调用 centerDidStop(_:withError:)
方法和 deviceCenterDiscoveryStoppedNotification
,但错误参数将填充问题原因。
默认情况下,设备列表每30秒刷新一次。您可以通过设置 discoveryInterval
属性来减少此间隔。当设备列表显示时,您应该这样做;稍后恢复默认值,以避免耗尽手机电池。
3. 连接到设备
要连接到设备并在您自己的应用中使用 OCast 媒体命令,您必须设置设备的 applicationName
属性。一旦您连接到设备,当您发送媒体命令时,应用将自动启动。您也可以手动管理应用状态。请参阅管理应用状态。
device.applicationName = "MyWebApp"
如果您要执行安全连接,可以设置具有您自定义设置的 SSLConfiguration
对象。然后,您必须调用 connect(_:completion:)
方法。如果连接成功执行,则不会在错误块中调用完成。因此,您可以向您的设备发送命令。
let sslConfiguration = SSLConfiguration()
// Configure your own SSL Configuration
// ...
//
device.connect(sslConfiguration, completion: { error in
if (error == nil) {
// Use the commands
}
})
您可以使用 disconnect(completion:)
方法从设备断开连接。这有助于管理应用的背景状态。
如果发生网络错误,将触发 deviceDisconnectedEventNotification
通知,并带有问题原因。
4. 发送OCast命令
您可以在设备的Device
协议中使用SDK提供的OCast命令。命令列表在此描述:[http://www.ocast.org/OCast-Protocol.pdf](http://www.ocast.org/OCast-Protocol.pdf)
let params = PrepareMediaCommandParams(url: "http://myMovie.mp4",
frequency: 1,
title: "Movie Sample",
subtitle: "OCast",
logo: "",
mediaType: .video,
transferMode: .buffered,
autoPlay: true)
device.prepareMedia(params, completion: { error in })
5. 接收OCast事件
设备可以发送OCast协议中定义的事件。根据事件:会触发以下通知:playbackStatusEventNotification
、metadataChangedEventNotification
和updateStatusEventNotification
。
// Register to the notification
NotificationCenter.default.addObserver(self,
selector: #selector(playbackStatusNotification),
name: .playbackStatusEventNotification,
object: device)
// Method triggered for the playback status event
@objc func playbackStatusNotification(_ notification: Notification) {}
6. 发送自定义命令
如果您需要发送OCast协议中未定义的命令,您可以使用send(_:on:completion)
方法。您必须为命令和回复构建OCastMessage
对象。
public class CustomCommandParams: OCastMessage {
public let myParameter: String
public init(myParameter: String) {
self.myParameter = myParameter
}
// ...
}
public class CustomReplyParams: OCastMessage {
public let myValue: String
// ...
}
let data = OCastDataLayer(name: "customCommand", params: CustomCommandParams(myParameter: "paramValue"))
let message = OCastApplicationLayer(service: "customService", data: data)
let completionBlock: ResultHandler<CustomReplyParams> = { result, error in
// result is a CustomReplyParams?
}
device.sender?.send(message, on: .browser, completion: completionBlock)
7. 接收自定义事件
如果您需要接收OCast协议中未定义的事件,您可以使用registerEvent(_:completion)
方法。当接收到那个名称的事件时,完成块将被调用。您必须为事件构建一个OCastMessage
对象。
public class CustomEvent: OCastMessage {
public let myEventValue: String
// ...
}
device.registerEvent("customEvent", completion: { [weak self] data in
if let customEvent = try? JSONDecoder().decode(OCastDeviceLayer<CustomEvent>.self, from: data) {
DispatchQueue.main.async {
// Update your UI
self?.myLabel.text = customEvent.message.data.params.myEventValue
}
}
})
8. 管理应用状态
您可以手动管理应用状态。startApplication(completion:)
方法启动由applicationName
属性标识的应用程序,而stopApplication(completion:)
方法则停止它。
示例应用
提供Objective-C和Swift示例应用。为了在您的设备上正确运行这些应用,必须设置OCastDemoManufacturerName
和OCastDemoApplicationName
变量。
作者
Orange
许可
OCast遵循Apache v2许可证。有关更多信息,请参阅LICENSE文件。