拉流播放

更新时间: 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 协议。后续会陆续支持其他协议。

此文档是否对你有帮助?
有帮助
去反馈
  • 实现流程
  • 步骤一:添加监听器
  • 步骤二:创建播放器实例
  • 步骤三:设置视频画布
  • 步骤四:开始播放流媒体
  • 步骤五:播放控制操作
  • 步骤六:资源释放
  • API 参考
  • 错误码参考
  • 常见问题
  • 如何同时播放多个流媒体?
  • 如何处理播放失败?
  • 如何获取播放器状态?
  • 支持哪些拉流协议?