upyun 又拍云直播推拉流

SDK下载地址:https://github.com/upyun/ios-live-sdk

运行环境:iOS8以上,并只能在真机中运行,不然会报错

模拟器调试过滤:

#if !TARGET_OS_SIMULATOR
...
#endif


主要文件:UPLiveService

 CPUImage -- 视频处理

 UPAVCapturer -- 音视频采集模块,直播接口

 UPLiveSDKDll.framework -- 包含播放器UPAVPlayer 、推流器UPAVStreamer

TARGET -> Build Settings -> Enable bitcode: 设置为 NO

TARGET -> General -> Embedded Binaries: 添加选择 UPLiveSDKDll.framework

注: 如果需要 app 退出后台仍然不间断推流直播,需要设置 TARGET -> Capabilities -> Backgroud Modes:ON √ Audio, AirPlay,and Picture in Picture


工程依赖:

AVFoundation.framework

QuartzCore.framework

OpenGLES.framework

VideoToolbox.framework

AudioToolbox.framework

Accelerate.framework

libbz2.1.0.tbd

libiconv.tbd

libz.tbd

CoreMedia.framework

CoreTelephony.framework

SystemConfiguration.framework

libc++.tbd

CoreMotion.framework


1、推流

//1. 设置预览画面
    UIView *livePreview = [[UPAVCapturer sharedInstance] previewWithFrame:self.view.bounds
                                                              contentMode:UIViewContentModeScaleAspectFit];
    //2. 将预览画面添加到 view
    [self.view insertSubview:livePreview atIndex:0];
    
    //3. 设置代理,接收直播状态回调
    [UPAVCapturer sharedInstance].delegate = self;
    
    //4. 设置推流地址
    [UPAVCapturer sharedInstance].outStreamPath = [NSString stringWithFormat:@"rtmp://testlivesdk.v0.upaiyun.com/live/%@", _streamId];
    
    //6. 设置视频采集尺寸。其他详细设置请参考高级示例。
    [UPAVCapturer sharedInstance].capturerPresetLevel = UPAVCapturerPreset_640x480;
    
    //6. 开始推流
    [[UPAVCapturer sharedInstance] start];

    //7. 结束推流
    [[UPAVCapturer sharedInstance] stop];


2、拉流

//1. 初始化播放器
    _player = [[UPAVPlayer alloc] initWithURL:@"rtmp://live.hkstv.hk.lxdns.com/live/hks"];
    
    //2. 设置代理,�接收状态回调信息
    _player.delegate = self;
    
    //3. 设置播放器 playView Frame
    [_player setFrame:self.view.bounds];
    
    //4. 添加播放器 playView
    [self.view insertSubview:_player.playView atIndex:0];
    
    //5. 开始播放
    [_player play];

    //6. 停止播放
    [_player stop];


3、代理回调

#pragma mark - UPAVPlayerDelegate
- (void)player:(UPAVPlayer *)player playerError:(NSError *)error {
    //7. 监听播放错误。
    [self.activityIndicatorView stopAnimating];
    self.bufferingProgressLabel.hidden = YES;
    UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"主播已停止直播" message:nil preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
    
}

- (void)player:(UPAVPlayer *)player playerStatusDidChange:(UPAVPlayerStatus)playerStatus{
    switch (playerStatus) {
        case UPAVPlayerStatusIdle:{
            NSLog(@"播放停止-----");
            [self.activityIndicatorView stopAnimating];
            self.bufferingProgressLabel.hidden = YES;
        }
            break;
            
        case UPAVPlayerStatusPause:{
            NSLog(@"播放暂停-----");
            [self.activityIndicatorView stopAnimating];
            self.bufferingProgressLabel.hidden = YES;
        }
            break;
            
        case UPAVPlayerStatusPlaying_buffering:{
            NSLog(@"播放缓冲-----");
            [self.activityIndicatorView startAnimating];
            self.bufferingProgressLabel.hidden = NO;
        }
            break;
        case UPAVPlayerStatusPlaying:{
//            _isSeeking = NO;
            NSLog(@"播放中-----");
            [self.activityIndicatorView stopAnimating];
            self.bufferingProgressLabel.hidden = YES;
        }
            break;
        case UPAVPlayerStatusFailed:{
            NSLog(@"播放失败-----");
            
            
        }
            break;
        default:
            break;
    }
}
- (void)player:(UPAVPlayer *)player displayPositionDidChange:(float)position{
    NSLog(@"live_position:%f",position);
}
- (void)player:(UPAVPlayer *)player bufferingProgressDidChange:(float)progress{
    self.bufferingProgressLabel.text = [NSString stringWithFormat:@"%.0f %%", (progress * 100)];
    NSLog(@"live_progress:%f",progress);
}


4、视频流状态

//视频流状态
- (void)player:(UPAVPlayer *)player streamStatusDidChange:(UPAVStreamStatus)streamStatus{
    switch (streamStatus) {
        case UPAVStreamStatusIdle:
            NSLog(@"连接断开-----");
            break;
        case UPAVStreamStatusConnecting:{
            NSLog(@"建立连接-----");
        }
            break;
        case UPAVStreamStatusReady:{
            NSLog(@"连接成功-----");
        }
            break;
        default:
            break;
    }
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值