腾讯云坑不懂怎么调用直播?十分钟解决问题

腾讯云的官方文档很多人都看不懂,demo也写的没什么借鉴性?而且还是MRC的,一开始我也抱怨好久,找了半天才弄好,分享出来主要代码

导入头文件

#import <TXLivePush.h>
#import <TXLivePlayer.h>

添加属性

@property (nonatomic, assign)TX_Enum_PlayType playType;
@property (nonatomic, strong)TXLivePush * txLivePublisher;
@property (nonatomic, strong) UIView * backView;
@property (nonatomic, strong) UIView * placeholderView;
@property (nonatomic, strong) UIButton * PlayBtn;
@property (nonatomic, assign) NSInteger  placeholderHeight;
@property (nonatomic, strong) TXLivePlayer * txLivePlayer;

主要代码

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];
    
    //将原点移动到navigationBar
    self.edgesForExtendedLayout = UIRectEdgeNone;
    
    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
    
    // 16 : 9
    _placeholderHeight = selfWidth / 16 * 9;
    
    //设置占位背景
    self.placeholderView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, selfWidth ,_placeholderHeight)];
    
    _placeholderView.backgroundColor = [UIColor blackColor];
    
    [self.view addSubview:self.placeholderView];
    
    self.backView = [[UIView alloc]initWithFrame:CGRectMake(0, _placeholderHeight, selfWidth, 35)];
    
    [self.view addSubview:_backView];
    
    self.hengPingBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    
    _hengPingBtn.frame = CGRectMake(selfWidth - 40 , _placeholderHeight - 40, 40, 40);
    
    [_hengPingBtn setImage:[UIImage imageNamed:@"fullscreen_icon"] forState:(UIControlStateNormal)];
    
    _hengPingBtn.selected = YES;
    
    [_hengPingBtn addTarget:self action:@selector(hengPingButtonAction:) forControlEvents:UIControlEventTouchUpInside];
    
    [self.placeholderView addSubview:self.hengPingBtn];
    
    
    //    PlayBtn
    self.PlayBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  
    _PlayBtn.frame = CGRectMake(0 , _placeholderHeight - 40, 40, 40);

    [_PlayBtn setImage:[UIImage imageNamed:@"stop_icon"] forState:(UIControlStateNormal)];
    
    _PlayBtn.selected = YES;
    
    [_PlayBtn addTarget:self action:@selector(PlayBtnAction:) forControlEvents:UIControlEventTouchUpInside];
    
    [self.placeholderView addSubview:self.PlayBtn];
    
    
   _txLivePlayer = [[TXLivePlayer alloc] init];
    
    [_txLivePlayer setupVideoWidget:CGRectMake(0, 0, 0, 0) containView:self.placeholderView insertIndex:0];
    
    _txLivePlayer.enableHWAcceleration = YES;
    
    TXLivePlayConfig  *_config = [[TXLivePlayConfig alloc] init];
    
    //流畅模式
    _config.bAutoAdjustCacheTime   = NO;
    // 播放器缓存时间
    _config.cacheTime  = 3;
    
    [_txLivePlayer setConfig:_config];
    // 全屏
    [_txLivePlayer setRenderMode:RENDER_MODE_FILL_SCREEN];
    
     [_txLivePlayer setRenderRotation:HOME_ORIENTATION_DOWN];
    
    //  播放                  播放地址
    [_txLivePlayer startPlay:@"rtmp://live.hkstv.hk.lxdns.com/live/hks" type:_playType];
}

</ BR>

解释下代码
腾讯云的播放器,是不能直接调整帧
要修改控件的大小和位置,请调整父视图的大小和位置
通过调整占位符的帧来修改播放器帧

//全屏图像铺满屏幕

 [_txLivePlayer setRenderMode:RENDER_MODE_FILL_SCREEN];

//家在下面

[_txLivePlayer setRenderRotation:HOME_ORIENTATION_DOWN];

</ br>
// _playTyp代表支持的所有格式:
RTMP直播,FLV直播,FLV点播,HLS点播,MP4点播

[_txLivePlayer startPlay:@"rtmp://live.hkstv.hk.lxdns.com/live/hks" type:_playType];

</ BR>

点击事件和是否横屏判断
#pragma mark  ====   全屏点击事件
- (void)hengPingButtonAction:(UIButton *)sender{

    if (sender.selected == YES){

        [self.view bringSubviewToFront:self.placeholderView];

        [Tools orientationToPortrait:UIInterfaceOrientationLandscapeRight];

        self.placeholderView.frame = [UIScreen mainScreen].bounds;

        _hengPingBtn.frame = CGRectMake(selfWidth - 40 , selfHeigh - 40, 40, 40);

        [_hengPingBtn setImage:[UIImage imageNamed:@"exitfullscreen_icon"] forState:(UIControlStateNormal)];

        [_PlayBtn setFrame:CGRectMake(0, selfHeigh - 40 , 40, 40)];

        self.navigationController.navigationBarHidden = YES;

        sender.selected = NO;

    } else {

        [Tools orientationToPortrait:UIInterfaceOrientationPortrait];

        [_hengPingBtn setImage:[UIImage imageNamed:@"fullscreen_icon"] forState:(UIControlStateNormal)];

        self.placeholderView.frame = CGRectMake(0, 0, selfWidth  , _placeholderHeight);

        _hengPingBtn.frame = CGRectMake(selfWidth - 40 , _placeholderHeight - 40, 40, 40);

        [_PlayBtn setFrame:CGRectMake(0, _placeholderHeight - 40, 40, 40)];

        self.navigationController.navigationBarHidden = NO;

        sender.selected = YES;

    }

}

#pragma mark  ====  播放  暂停  事件
- (void)PlayBtnAction:(UIButton  *)btn{
    if (btn.selected == YES){
         [btn setImage:[UIImage imageNamed:@"play_icon"] forState:(UIControlStateNormal)];
        // 暂停
        [_txLivePlayer pause];

        btn.selected = NO;
    } else {
        [btn setImage:[UIImage imageNamed:@"stop_icon"] forState:(UIControlStateNormal)];
        // 恢复
        [_txLivePlayer resume];

        btn.selected = YES;
    }
}

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];

    AppDelegate * delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

    delegate.allowRotate = 1;
}

- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];

    AppDelegate * delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    delegate.allowRotate = 0;

}

</ BR>

工具类里的转屏

//强制旋转屏幕
+ (void)orientationToPortrait:(UIInterfaceOrientation)orientation{

    SEL selector = NSSelectorFromString(@"setOrientation:");

    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];

    [invocation setSelector:selector];

    [invocation setTarget:[UIDevice currentDevice]];

    int val = orientation;

    [invocation setArgument:&val atIndex:2];//前两个参数已被target和selector占用

    [invocation invoke];
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容