拉流播放
更新时间: 2026/01/21 10:49:06
NERoomKit 自 V1.42.0 版本起,提供完整的拉流播放解决方案,支持多实例播放、状态监听等功能。
当前版本仅支持 RTMP 协议,其他协议支持将在后续版本中陆续推出。
实现流程
步骤一:添加监听器
swift// 添加播放器监听器
NERoomKit.shared().playerService.addListener(self)
// 移除播放器监听器
NERoomKit.shared().playerService.removeListener(self)
步骤二:创建播放器实例
swift// 创建播放器实例
// 需要自己维护实例的生命周期,销毁实例参考第六步
let player = NERoomKit.shared().playerService.createPlayer()
步骤三:设置视频画布
swift// 创建视频画布
let videoView = NERoomVideoView()
videoView.container = self.view // 设置渲染容器
// 设置画布
let result = player.setupCanvas(videoView)
if result == 0 {
print("画布设置成功")
} else {
print("画布设置失败,错误码:\(result)")
}
步骤四:开始播放流媒体
swift// 配置拉流参数
let config = NEPlayStreamingConfig()
config.streamUrl = "rtmp://example.com/stream"
// 开始播放
player.start(config: config)
步骤五:播放控制操作
swift// 暂停播放
player.pause()
// 恢复播放
player.resume()
// 静音视频
player.muteVideo(true)
// 静音音频
player.muteAudio(true)
// 停止播放
player.stop()
步骤六:资源释放
swift// 销毁播放器实例
NERoomKit.shared().playerService.destroyPlayer(player)
player = nil
API 参考
| 类/方法/回调/错误码 | 说明 |
|---|---|
NEPlayerService |
拉流播放器管理服务,负责播放器实例的创建与生命周期管理。 |
NEPlayer |
拉流播放器类,提供完整的播放控制能力。 |
NEPlayerListener |
拉流播放器事件监听器,提供全面的状态变化、SEI 消息和首帧渲染等回调。 |
事件监听示例如下:
func onPlayStreamingStateChanged(_ player: NEPlayer, state: NEPlayStreamingState, code: Int) {
switch state {
case .playing
print("播放开始")
case .stopped:
print("播放器已停止,原因码: \(code)")
case .reconnecting:
print("播放器正在重连,原因码: \(code)")
case .paused:
print("播放器已暂停")
case .idle:
print("播放器空闲状态")
}
}
func onPlayStreamingReceiveSeiMessage(_ player: NEPlayer, message: String) {
//收到SEI消息
}
func onPlayStreamingFirstVideoFrameRender(_ player: NEPlayer, timeMs: Int64, width: UInt32, height: UInt32) {
print("首帧视频渲染,时间: \(timeMs)ms,尺寸: \(width)x\(height)")
}
func onPlayStreamingFirstAudioFramePlayed(_ player: NEPlayer, timeMs: Int64) {
print("首帧音频播放,时间: \(timeMs)ms")
}
错误码参考
拉流功能的错误码请参考 RTC 错误码。
常见问题
如何同时播放多个流媒体?
创建多个 NEPlayer 实例,每个实例对应一个独立的流:
swiftlet player1 = NERoomKit.shared().playerService.createPlayer()
let player2 = NERoomKit.shared().playerService.createPlayer()
// 分别设置画布和开始播放
如何处理播放失败?
通过监听 onPlayStreamingStateChanged 回调,检查状态和错误码:
swiftfunc onPlayStreamingStateChanged(_ player: NEPlayer, state: NEPlayStreamingState, code: Int) {
if state == .stopped && code != 0 {
// 播放失败
print("播放失败,错误码:\(code)")
//根据业务进行提示,和下一步交互。
}
}
如何获取播放器状态?
通过 onPlayStreamingStateChanged 回调监听状态变化。
支持哪些拉流协议?
当前版本基于 RTC SDK 实现,目前仅支持 RTMP 协议。后续会陆续支持其他协议。
此文档是否对你有帮助?




