IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Ios端直播商城源码开发之实现全屏直播功能 -> 正文阅读

[移动开发]Ios端直播商城源码开发之实现全屏直播功能

直播商城源码是以直播带货为核心的直播平台,实现了互动连麦、礼物打赏、主播PK、直播评论等直播相关内容,同时还实现了短视频、电商商城、动态广场等功能。今天,我们就直播功能进行分析,看看直播商城源码如何实现直播间全屏播放功能,以及点击全屏播放保留头像、关注按钮,关闭恢复原来直播间功能。
1.点击全屏创建播放的view并做旋转,传入直播间信息、推流信息。

-(void)fullScreenBtnClick{
    if ([[Config getOwnID] intValue] <= 0) {
        [[YBToolClass sharedInstance]waringLogin];
        return;
    }
    YBWeakSelf;
    if (!_fullscreenView) {
        if ([_sdkType isEqual:@"1"]) {
            [_txLivePlayer setMute:YES];
        }else{
            _js_player.shouldMute = YES;
        }
        isFullBool = YES;
        _fullscreenView = [[FullScreenPlayView alloc]initWithFrame:CGRectMake(0, 0, _window_height, _window_width) withType:_sdkType andPlayDic:self.playDoc];
        _fullscreenView.center = self.view.center;
        _fullscreenView.btnEvent = ^(NSString *str) {
            if ([str isEqual:@"hide"]) {
                [weakSelf returnBtnClick];
            }else if ([str isEqual:@"focus"]){
                [weakSelf guanzhuZhuBolela];
            }
        };
        [self.view addSubview:_fullscreenView];
        
        [_fullscreenView setFousBtnHide:setFrontV.newattention.hidden];
        _fullscreenView.transform = CGAffineTransformMakeRotation((90.0f * M_PI) / 180.0f);
        if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
              // iOS 7
              [self prefersStatusBarHidden];
              [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
          }
    }
}

2.绘制直播商城源码的播放界面、创建播放器监听推流信息,添加手势、进入播放5秒隐藏主播信息、关注按钮等信息,点击屏幕显示主播信息、关注按钮。

-(instancetype)initWithFrame:(CGRect)frame withType:(NSString *)sdkType andPlayDic:(NSDictionary *)playDic
{
    self = [super initWithFrame:frame];
    if (self) {
        UITapGestureRecognizer *tipsGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tipClick)];
        [self addGestureRecognizer:tipsGesture];
        
        self.playDoc = playDic;
        self.backgroundColor = UIColor.whiteColor;
        returnBtn = [UIButton buttonWithType:0];
        [returnBtn setImage:[UIImage imageNamed:@"personBack"] forState:0];
        [returnBtn addTarget:self action:@selector(returnBtnClick) forControlEvents:UIControlEventTouchUpInside];
        [self addSubview:returnBtn];
        [returnBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.mas_left).offset(30+ShowDiff);
            make.top.equalTo(self.mas_top).offset(20);
            make.width.height.mas_equalTo(30);
        }];
        
        nameLb = [[UILabel alloc]init];
        nameLb.font = [UIFont systemFontOfSize:14];
        nameLb.textColor = UIColor.whiteColor;
        nameLb.text = minstr([playDic valueForKey:@"user_nicename"]);
        [self addSubview:nameLb];
        [nameLb mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(returnBtn.mas_right).offset(10);
            make.centerY.equalTo(returnBtn.mas_centerY);
        }];
        [self layoutIfNeeded];
        //关注主播
        _focusBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        _focusBtn.frame = CGRectMake(nameLb.right+10,5,40,25);
        _focusBtn.centerY = nameLb.centerY;
        _focusBtn.layer.masksToBounds = YES;
        _focusBtn.layer.cornerRadius = 12.5;
        _focusBtn.titleLabel.font = [UIFont systemFontOfSize:11];
        [_focusBtn setTitle:YZMsg(@"关注") forState:UIControlStateNormal];
        _focusBtn.contentMode = UIViewContentModeScaleAspectFit;
        [_focusBtn addTarget:self action:@selector(guanzhuzhubo) forControlEvents:UIControlEventTouchUpInside];
        _focusBtn.hidden = YES;
        [_focusBtn setBackgroundImage:[UIImage imageNamed:@"startLive_back"]];
        [self addSubview:_focusBtn];

        if ([sdkType isEqual:@"1"]) {
            [self txPlayer];
        }else{
            [self jsPlayer];
        }
        [self  hideAllBtn];
    }
    return self;
}

3.隐藏主播信息

-(void)hideAllBtn{
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [UIView animateWithDuration:0.5 animations:^{
            CGRect returnBtnFrame = returnBtn.frame;
            returnBtnFrame.origin.y = -50;
            returnBtn.frame = returnBtnFrame;

            nameLb.centerY = returnBtn.centerY;
            _focusBtn.centerY = returnBtn.centerY;
        }];
    });

}

4.显示主播信息

-(void)tipClick{
    [UIView animateWithDuration:0.5 animations:^{
            CGRect returnBtnFrame = returnBtn.frame;
            returnBtnFrame.origin.y = 20;
            returnBtn.frame = returnBtnFrame;

            nameLb.centerY = returnBtn.centerY;
            _focusBtn.centerY = returnBtn.centerY;

        } completion:^(BOOL finished) {
            if (finished) {
                [self hideAllBtn];
            }
        }];

}

5.点击返回后用block返回关闭标识并移除播放页面,恢复直播商城源码的原有直播间播放信息界面。

-(void)returnBtnClick{
    if (self.btnEvent) {
        self.btnEvent(@"hide");
    }
}

6./播放监听事件

-(void) onPlayEvent:(int)EvtID withParam:(NSDictionary*)param {
//    NSLog(@"eventID:%d===%@",EvtID,param);
    dispatch_async(dispatch_get_main_queue(), ^{
        if (EvtID == PLAY_EVT_CONNECT_SUCC) {
            NSLog(@"moviplay不连麦已经连接服务器");
        }
        else if (EvtID == PLAY_EVT_RTMP_STREAM_BEGIN){
            NSLog(@"moviplay不连麦已经连接服务器,开始拉流");
        }
        else if (EvtID == PLAY_EVT_PLAY_BEGIN){
            NSLog(@"moviplay不连麦视频播放开始");
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            });
        }
        else if (EvtID== PLAY_WARNING_VIDEO_PLAY_LAG){
            NSLog(@"moviplay不连麦当前视频播放出现卡顿(用户直观感受)");
        }
        else if (EvtID == PLAY_EVT_PLAY_END){
            NSLog(@"moviplay不连麦视频播放结束");
            [_txLivePlayer resume];
        }
        else if (EvtID == PLAY_ERR_NET_DISCONNECT) {
            //视频播放结束
            NSLog(@"moviplay不连麦网络断连,且经多次重连抢救无效,可以放弃治疗,更多重试请自行重启播放");
        }else if (EvtID == PLAY_EVT_CHANGE_RESOLUTION) {
            NSLog(@"主播连麦分辨率改变");
        }
    });
}

本文就直播商城源码如何实现直播间全屏播放等一系列功能,进行了简单介绍,如果有类似功能实现的需求,可以进行参照。如果想了解更多直播商城源码开发合作相关内容,可以查看官网页面。
声明:以上内容为云豹科技原创,未经作者本人同意,禁止转载,否则将追究相关法律责任。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:39:08  更:2022-03-08 22:39:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 19:56:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码