直播云

  • 直播云 > SDK 下载 > 低延时直播 SDK > 低延时 iOS SDK

    低延时 iOS SDK

    最近更新时间: 2024-09-06 10:24:23

    七牛低延时直播接入指南

    步骤一: 提供拉流域名做低延迟配置(提交工单)
    步骤二: 推流端推流(不能包含 B 帧)
    步骤三: 使用七牛的播放器拉流

    服务 TIPS
    1.低延时直播采用 RTC 相关技术,大部分浏览器原生支持 RTC 播放,适用性更强;播放延迟小于 1 秒,适用于大部分对延迟有要求的直播场景

    2.推流端推流直播流中不包含 B 帧【推流命令样例:./ffmpeg -re -i “////.mp4” -c copy -c:v libx264 -bf 0 -f flv ‘rtmp://pili-publish.marsyu.site/lb-test/20200125h265test?expire=1610992020&token=W9G5v8_h5k6mgwshHQ2l7zB6NC4=’】,不符合要求的直播流可能会出现卡顿/画面撕裂等问题;若推流侧无法自行适配,可以使用我们的服务端转码功能,在播放 URL 流名称后面添加 @zerolatency 转码规格 (转码将增加 200-400ms 延时,对播放延时有极高要求的客户请适配低延时推流规格,转码将收取额外费用)

    3.<低延时 Web SDK> 需要浏览器支持 RTC 和 H264 解码,目前部分 Android 手机自带浏览器并未支持 RTC,在这种情况下,我们建议更换浏览器或直接使用移动端的 SDK <低延时 iOS SDK><低延时 Android SDK>

    4.低延时直播SDK仅能播放低延时直播类型的直播流,如果需要播放rtmp/flv/hls/或者mp4等视频流,请使用标准播放器进行播放

    5.使用七牛的 iOS 推流 SDK,按照如下设置即可保证直播流中不包含 B 帧:
    PLVideoStreamingConfiguration 的 videoProfileLevel 的设置选择 H264Baseline 类型
    videoProfileLevel:AVVideoProfileLevelH264BaselineAutoLevel

    QNRTPlayerKit

    七牛低延时直播构建了全新的低延时直播互动体验,相比于传统的直播能力降低了延时、优化了协议与底层技术,目前对于微信内直播多业务场景提供了更为优渥的使用体验。支持千万级并发同时拥有毫秒级开播体验,打通了用户对于直播低延时性的核心诉求。

    功能特性

    • 支持 H.264 视频解码
    • 支持 Opus 音频解码
    • 支持 HeaderDoc 文档
    • 支持 ARMv7, ARM64, i386, x86_64 架构
    • 支持纯音频或纯视频播放
    • 支持自定义音视频处理
    • 支持苹果 ATS 安全标准
    • 支持 WHEP 协议拉流

    系统要求

    • iOS Target : >= iOS 12
    • iOS Device : >= iPhone 5s

    安装方法

    CocoaPods 是针对 Objective-C 的依赖管理工具,它能够将使用类似 QNRTPlayerKit 的第三方库的安装过程变得非常简单和自动化,你能够用下面的命令来安装它:

    $ sudo gem install cocoapods
    

    Podfile

    为了使用 CoacoaPods 集成 QNRTPlayerKit 到你的 Xcode 工程当中,你需要编写你的 Podfile

    source 'https://github.com/CocoaPods/Specs.git'
    target 'TargetName' do
    pod 'QNRTPlayerKit'
    end
    
    • 默认为真机版
    • 若需要使用模拟器 + 真机版,则改用如下配置
    pod "QNRTPlayerKit", :podspec => 'https://raw.githubusercontent.com/pili-engineering/QNRTPlayer-iOS/master/QNRTPlayerKit-Universal.podspec'	
    

    注意:鉴于目前 iOS 上架,只支持动态库真机,请在 App 上架前,更换至真机版本

    然后,运行如下的命令:

    $ pod install
    

    反馈及意见

    当你遇到任何问题时,可以通过在 GitHub 的 repo 提交 issues 来反馈问题,请尽可能的描述清楚遇到的问题,如果有错误信息也一同附带,并且在 Labels 中指明类型为 bug 或者其他。

    通过这里查看已有的 issues 和提交 Bug。

    API参考

    QNRTPlayer

    QNRTPlayer 为建立音视频播放的核心类,包含播放、停止,静音等接口。

    属性

    playState

    定义

    @property (nonatomic, assign, readonly) QNRTPlayState playState;
    

    说明:播放的状态,当播放状态变更时会通过 - (void)RTPlayer:(QNRTPlayer *)player playStateDidChange:(QNRTPlayState)playState; 方法回调。

    delegate

    定义

    @property (nonatomic, weak) id<QNRTPlayerDelegate> delegate;
    

    说明:状态回调的 delegate。

    isPlaying

    定义

    @property (nonatomic, assign, readonly) BOOL isPlaying;
    

    说明:是否在播放状态

    playUrl

    定义

    @property (nonatomic, copy, readonly) NSURL *playUrl;
    

    说明:播放的 URL

    statisticInterval

    定义

    @property (nonatomic, assign) NSUInteger statisticInterval;
    

    说明:统计信息回调的时间间隔,单位为秒。默认为 0,即默认不会回调统计信息。

    volume

    定义

    @property (nonatomic, assign) double volume;
    

    说明:播放音量

    width

    定义

    @property (nonatomic, assign, readonly) CGFloat width;
    

    说明:视频的宽

    height

    定义

    @property (nonatomic, assign, readonly) CGFloat height;
    

    说明:视频的高

    playView

    定义

    @property (nonatomic, strong) QNRTVideoView *playView;
    

    说明:渲染播放画面

    方法

    playWithUrl:supportHttps:

    定义

    - (void)playWithUrl:(NSURL *)url supportHttps:(BOOL)isSupport;
    

    参数

    参数名 描述
    url 需要播放的 url ,目前支持rtmp、hls、hdl和webrtc (url 以 webrtc:// 开头) 协议
    isSupport 当前播放 URL 是否支持 SSL 证书,默认为 NO

    说明:开始播放新的 url

    注意: 1. 当前 iOS 系统网络限制,默认不支持 http 带域名访问,需要支持 SSL,且 isSupport 为 YES,或者开启 ATS 支持 HTTP 带域名访问,即可正常播放。 2. 播放域名需在七牛配置并完成解析,如播放失败请联系我们处理。

    stop

    定义

    - (void)stop;
    

    说明:停止播放

    muteAudio:

    定义

    - (void)muteAudio:(BOOL)mute;
    

    参数

    参数名 描述
    mute 是否需要静音

    说明:静音

    muteVideo:

    定义

    - (void)muteVideo:(BOOL)mute;
    

    参数

    参数名 描述
    mute 是否需要画面渲染

    说明:停止画面渲染

    setSpeakerOn:

    定义

    - (void)setSpeakerOn:(BOOL)speakerOn;
    

    参数

    参数名 描述
    speakerOn 扬声器开关

    说明:是否将声音从扬声器输出

    注意:默认值为 NO,传入 YES 时,会强制声音从扬声器输出。另外,由于系统原因,在某些设备(如 iPhone XS Max、iPhone 8 Plus)上,连接 AirPods 后无法通过该接口将声音强制设为扬声器输出。如有需求,可以通过使用 AVRoutePickerView 来切换。

    takeScreenshotCallback:

    定义

    - (void)takeScreenshotCallback:(QNScreenshotResultCallback)resultCallback;
    

    参数

    参数名 描述
    resultCallback 截图的结果回调

    说明:截图播放画面

    注意:成功则回调图片,失败则回调错误。拉到首帧之后才可正常截图。

    setJitterBufferMinDelay:

    定义

    - (void)setJitterBufferMinDelay:(double)jitterBufferMinDelay;
    

    参数

    参数名 描述
    jitterBufferMinDelay 抖动缓冲区最小延迟

    说明:设置抖动缓冲区的最小延迟

    注意:默认为 0,不开启抖动延迟,时间单位为秒,范围 [0, 1],建议不超过 600ms。

    enableFileLogging

    定义

    + (void)enableFileLogging;
    

    说明:开启文件日志,建议在 App 启动时即开启,日志文件位于 App App Container/Library/Caches/Pili/RTLogs 目录下以 QNRTPlayer+当前时间命名的目录内

    注意:文件日志功能主要用于排查问题,打开文件日志功能会对性能有一定影响,上线前请记得关闭文件日志功能!

    versionInfo

    定义

    + (NSString *)versionInfo;
    

    说明:获取 SDK 的版本信息。

    QNRTPlayerDelegate

    QNRTPlayerDelegate 在 QNRTPlayer 运行过程中的状态和事件回调

    方法

    RTPlayer:didFailWithError:

    定义

    - (void)RTPlayer:(QNRTPlayer *)player didFailWithError:(NSError *)error;
    

    参数

    参数名 描述
    player QNRTPlayer 实例
    error 错误内容

    说明:运行过程中发生错误会通过该方法回调

    RTPlayer:playStateDidChange:

    定义

    - (void)RTPlayer:(QNRTPlayer *)player playStateDidChange:(QNRTPlayState)playState;
    

    参数

    参数名 描述
    player QNRTPlayer 实例
    playState playState 播放状态

    说明:在运行过程中,状态发生变化的回调

    RTPlayer:didGetStatistic:

    定义

    - (void)RTPlayer:(QNRTPlayer *)player didGetStatistic:(NSDictionary *)statistic;
    

    参数

    参数名 描述
    player QNRTPlayer 实例
    statistic 统计信息 ,包括:音频码率,视频码率,视频帧率

    说明:统计信息回调,回调的时间间隔由 statisticInterval 参数决定,statisticInterval 默认为 0,即不回调统计信息。

    RTPlayer:trackDidReceived

    定义

    - (void)RTPlayer:(QNRTPlayer *)player trackDidReceived:(QNRTSourceKind )kind;
    

    参数

    参数名 描述
    player QNRTPlayer 实例
    kind 数据类型

    说明:当前流媒体流收到数据 track。

    RTCEngine:firstSourceDidDecode:

    定义

    - (void)RTPlayer:(QNRTPlayer *)player firstSourceDidDecode:(QNRTSourceKind )kind;
    

    参数

    参数名 描述
    player QNRTPlayer 实例
    kind 数据类型

    说明:音视频首帧解码后的回调。

    QNRTErrorDomain

    QNRTErrorDomain 定义了播放过程中的错误信息,包括但不限于连接错误、鉴权失败等错误信息。

    QNRTCErrorDomain 错误码 功能
    QNRTErrorNetworkError 20001 服务请求超时,或者域名解析错误等
    QNRTErrorAuthFailed 20002 请求服务鉴权失败
    QNRTErrorPlayStreamNotExit 20003 播放流地址不存在
    QNRTErrorPlayRequestFailed 20004 对应服务 invalid parameter / server error
    QNRTErrorDescriptionError 20005 内部sdp错误
    QNRTErrorConnectFailed 20006 连接异常
    QNRTErrorOperationNotAllowed 20007 操作不被允许

    QNRTPlayState

    QNRTPlayState 定义了播放的状态。

    QNRTPlayState 功能
    QNRTPlayStateUnknow 未知状态,只会作为 init 前的初始状态,开始播放之后任何情况下都不会再回到此状态
    QNRTPlayStateInit 初始状态
    QNRTPlayStateReady 准备播放的状态
    QNRTPlayStatePlaying 正在播放的状态
    QNRTPlayStateStoped 停止播放的状态
    QNRTPlayStateError 播放发生错误的状态

    QNRTSourceKind

    QNRTSourceKind 定义了 source 的类型。

    QNRTSourceKind 功能
    QNRTSourceKindAudio 音频
    QNRTSourceKindVideo 视频

    QNRTVideoFillModeType

    QNRTVideoFillModeType 定义了视频填充模式。

    QNRTVideoFillModeType 功能
    QNRTVideoFillModeStretch 拉伸以填充整个视图
    QNRTVideoFillModePreserveAspectRatio 画面均匀缩放的同时保持宽高比,添加指定背景色的条形
    QNRTVideoFillModePreserveAspectRatioAndFill 保持源图像的长宽比,放大其中心以填充视图

    QNScreenshotResultCallback

    QNScreenshotResultCallback 定义了截图的回调。

    typedef void (^QNScreenshotResultCallback)(UIImage *ShotImage, NSError *error);
    
    以上内容是否对您有帮助?
  • Qvm free helper
    Close