从零开始集成:大牛直播SDK RTSP与RTMP模块在iOS平台的实现

1. 简介

大牛直播SDK自2015年推出RTSP和RTMP直播播放模块以来,经过持续迭代和优化,现已成为行业内公认的高性能、超低延迟、超低资源占用的跨平台直播播放器。凭借全自研的内核,SmartPlayer 在稳定性和功能性上都表现出色,广泛应用于各类实时视频流媒体场景中。本文将以iOS平台为例,详细介绍如何集成RTSP和RTMP播放模块,帮助开发者实现高效、稳定的直播播放功能。本 SDK 提供高效、低延迟的 RTSP|RTMP 流媒体播放功能,支持软硬解码、快速启动模式、低延迟播放等多种特性。

iOS平台RTMP播放器延迟测试

本文将详细介绍如何在 iOS 项目中集成并使用该 SDK 进行 RTSP 和 RTMP 流媒体的播放,并提供详细的配置和使用示例。

2. 环境准备与 SDK 集成

2.1  系统要求

  • SDK支持iOS 9.0及以上版本;
  • 支持的CPU架构:arm64(真机调试)。

2.2 准备工作

  • 库:libSmartPlayerSDK.a
  • 相关头文件:
    1. nt_common_media_define.h(如需转发或第三方数据对接)
    2. nt_event_define.h
    3. SmartPlayerSDK.h
  • 如集需要引入的framework
    1. libbz.tbd
    2. Libbz2.tbd
    3. libiconv.tbd
    4. libstdc++.tbd
    5. Libc++.tbd
    6. Accelerate.framework
    7. AssetsLibrary.framework
    8. AudioToolBox.framework
    9. AVFoundation.framework
    10. CoreMedia.framework
    11. Foundation.framework
    12. GLKit.framework
    13. OpenGLES.framework
    14. UIKit.framework
    15. VideoToolBox.framework
  • 如需集成到自己系统测试,请用大牛直播SDK的app name:

Info.plist-->右键Open As-->Source Code

添加或者编辑

<key>CFBundleName</key>
<string>SmartiOSPlayer</string>
  • 快照添加到“照片”权限:

Info.plist-->右键Open As-->Source Code 添加:

<key>NSPhotoLibraryUsageDescription</key>
<string>1</string>
  • 如需后台播放音频(添加后台播放权限):

3. 播放器配置

3.1 创建播放器实例

创建播放器实例并进行初始化:

SmartPlayerSDK *playerSDK = [[SmartPlayerSDK alloc] init];
NSInteger ret = [playerSDK SmartPlayerInitPlayer];
if (ret != DANIULIVE_RETURN_OK) {
    NSLog(@"播放器初始化失败");
} else {
    NSLog(@"播放器初始化成功");
}

3.2 设置视频解码模式

视频解码模式可以选择软解码或硬解码,默认是软解码。设置硬解码可以提高播放性能,尤其是在高分辨率视频的情况下。

#import "SmartPlayerSDK.h"
#import "nt_event_define.h"

3.3 设置音频回音消除模式

音频回音消除模式适用于会议或语音通话应用,可以去除回音,如果单纯的播放器集成没必要设置,如果是一对一互动的,可以设置回音消除。

// 设置为正常音频播放模式
[playerSDK SmartPlayerSetEchoCancellationMode:0];

// 设置为回音消除模式
[playerSDK SmartPlayerSetEchoCancellationMode:1];

3.4 设置视频填充模式

视频画面填充模式有两种选择:填充整个视图和等比例填充视图。默认是填充整个视图。

// 设置为填充整个视图
[playerSDK SmartPlayerSetRenderScaleMode:0];

// 设置为等比例填充视图
[playerSDK SmartPlayerSetRenderScaleMode:1];

3.5 设置 RTSP 传输模式

RTSP 播放时,可以选择 TCP 或 UDP 传输模式。默认为 UDP,如果网络不稳定,可以切换为 TCP。

// 设置为 UDP 模式
[playerSDK SmartPlayerSetRTSPTcpMode:NO];

// 设置为 TCP 模式
[playerSDK SmartPlayerSetRTSPTcpMode:YES];

3.6 设置 RTSP/RTMP 流的播放 URL

播放器支持 RTSP 和 RTMP 流的播放。设置播放 URL,开始播放流。

// 设置 RTSP 流的播放 URL
[playerSDK SmartPlayerSetPlayURL:@"rtsp://192.168.0.104:554/stream1"];

// 设置 RTMP 流的播放 URL
[playerSDK SmartPlayerSetPlayURL:@"rtmp://192.168.0.104:1935/live/stream"];

3.7 设置 RTSP 超时时间

RTSP 播放时,您可以设置超时时间,以防止长时间无响应。

// 设置 RTSP 超时时间为 10 秒
[playerSDK SmartPlayerSetRTSPTimeout:10];

3.8 设置 RTSP TCP/UDP 自动切换

启用 RTSP 自动切换模式,允许播放器根据网络环境自动选择切换传输协议(TCP 或 UDP),一般只要播放RTSP的,建议这个选项开着。

// 开启自动切换模式
[playerSDK SmartPlayerSetRTSPAutoSwitchTcpUdp:1];

// 禁用自动切换模式
[playerSDK SmartPlayerSetRTSPAutoSwitchTcpUdp:0];

3.9 启用低延迟模式

低延迟模式适用于实时直播,能够减少视频播放的延迟,适合对延迟有严格要求的场景。

// 启用低延迟模式
[playerSDK SmartPlayerSetLowLatencyMode:1];

// 禁用低延迟模式
[playerSDK SmartPlayerSetLowLatencyMode:0];

3.10 启用快速启动模式

快速启动模式能够加快视频流的加载速度,减少等待时间。

// 启用快速启动模式
[playerSDK SmartPlayerSetFastStartup:1];

// 禁用快速启动模式
[playerSDK SmartPlayerSetFastStartup:0];

3.11 设置音量

可以通过 SmartPlayerSetAudioVolume 方法实时控制播放音量:

// 设置音量为 50
[playerSDK SmartPlayerSetAudioVolume:50];

3.12 设置播放器视图

播放器视图显示在 UIView 中,可以自定义大小和位置:

UIView *playView = (__bridge UIView *)[SmartPlayerSDK SmartPlayerCreatePlayView:0 y:50 width:screenWidth height:screenHeight];
[playerSDK SmartPlayerSetPlayView:(__bridge void *)(playView)];

4. 播放器事件处理

4.1 实现 SmartPlayerDelegate

SmartPlayerDelegate 协议提供了多种回调方法,用于处理播放器的各种事件。以下是实现事件回调的示例:

@interface ViewController () <SmartPlayerDelegate>
@end

@implementation ViewController

- (void)onPlayerEvent:(NSInteger)eventID param1:(unsigned long long)param1 param2:(unsigned long long)param2 {
    switch (eventID) {
        case EVENT_DANIULIVE_ERC_PLAYER_STARTED:
            NSLog(@"播放器开始播放");
            break;
        case EVENT_DANIULIVE_ERC_PLAYER_STOP:
            NSLog(@"播放器停止播放");
            break;
        case EVENT_DANIULIVE_ERC_PLAYER_CONNECTION_FAILED:
            NSLog(@"连接失败,请检查 URL 或网络状态");
            break;
        default:
            break;
    }
}
@end

4.2 设置事件回调

// 设置代理回调 
playerSDK.delegate = self;

5. 错误处理

5.1 错误码说明

  • DANIULIVE_RETURN_OK: 成功

  • DANIULIVE_RETURN_ERROR: 一般错误

  • DANIULIVE_RETURN_SDK_EXPIRED: SDK 过期

5.2 连接错误处理

如果 RTSP 或 RTMP 连接失败,播放器会触发 EVENT_DANIULIVE_ERC_PLAYER_CONNECTION_FAILED 事件,您可以在事件回调中处理错误并提供反馈:

- (void)onPlayerEvent:(NSInteger)eventID param1:(unsigned long long)param1 param2:(unsigned long long)param2 {
    if (eventID == EVENT_DANIULIVE_ERC_PLAYER_CONNECTION_FAILED) {
        NSLog(@"RTSP 连接失败,检查 URL 或网络状态");
    }
}

6. 高级功能

6.1 YUV 数据回调

如果您需要在播放器播放过程中自定义渲染视频,可以使用 YUV 数据回调:

[playerSDK SmartPlayerSetYuvBlock:YES];  // 启用 YUV 数据回调

[playerSDK setYuvDataBlock:^(int width, int height, unsigned long long timeStamp,
                             unsigned char *yData, unsigned char *uData, unsigned char *vData,
                             int yStride, int uStride, int vStride) {
    // 在这里处理 YUV 数据,进行视频渲染或其他操作
    NSLog(@"YUV 数据回调,宽度:%d,高度:%d", width, height);
}];

6.2 录像功能

播放器支持录制流,可以设置录制目录和最大文件大小:

// 设置录像目录
[playerSDK SmartPlayerSetRecorderDirectory:@"/path/to/recorder"];

// 设置每个录像文件的最大大小为 500MB
[playerSDK SmartPlayerSetRecorderFileMaxSize:500];

// 开始录像
[playerSDK SmartPlayerStartRecorder];

// 停止录像
[playerSDK SmartPlayerStopRecorder];

7. UI 集成

7.1 播放控制按钮

控制播放按钮以开始或停止播放:

UIButton *playButton = [UIButton buttonWithType:UIButtonTypeCustom];
[playButton addTarget:self action:@selector(playPauseButtonTapped:) forControlEvents:UIControlEventTouchUpInside];

7.2 音量控制滑块

通过滑动条控制音量:

UISlider *volumeSlider = [[UISlider alloc] init];
[volumeSlider addTarget:self action:@selector(volumeChanged:) forControlEvents:UIControlEventValueChanged];

7.3 视频旋转与反转

旋转视频视图或反转视频画面:

// 旋转视频
[playerSDK SmartPlayerSetRotation:90];

// 垂直反转视频
[playerSDK SmartPlayerSetFlipVertical:1];

// 水平反转视频
[playerSDK SmartPlayerSetFlipHorizontal:1];

8. 常见问题与解决方案

8.1 无法连接 RTSP 或 RTMP 流

  • 确保网络连接正常。

  • 确保流 URL 配置正确且服务器支持该协议。

8.2 视频播放卡顿或延迟过大

  • 启用低延迟模式 SmartPlayerSetLowLatencyMode:YES

  • 如网络抖动或卡顿,可以适当调整加大缓冲时间 SmartPlayerSetBuffer,如网络环境比较好,也可以减少缓冲,从而减少延迟。

总结

通过合理的配置和处理,SmartPlayerSDK 可以为 iOS 应用提供高效、低延迟、稳定的流媒体播放功能。开发者可以根据实际需求灵活调整播放器设置,优化用户体验。同时,文档中详细的代码示例和常见问题解决方案将帮助开发者快速入门并顺利完成集成。

如果了解更多细节,可以参见 iOS平台RTSP|RTMP直播播放器技术接入说明

posted @ 2025-05-28 17:39  音视频牛哥  阅读(6)  评论(0)    收藏  举报  来源