腾讯云的官方文档很多人都看不懂,demo也写的没什么借鉴性?而且还是MRC的,一开始我也抱怨好久,找了半天才弄好,分享出来主要代码
导入头文件
#import #import
添加属性
@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]; }
解释下代码
腾讯云的播放器,是不能直接调整帧
要修改控件的大小和位置,请调整父视图的大小和位置
通过调整占位符的帧来修改播放器帧
//全屏图像铺满屏幕
[_txLivePlayer setRenderMode:RENDER_MODE_FILL_SCREEN];
//家在下面
[_txLivePlayer setRenderRotation:HOME_ORIENTATION_DOWN];
// _playTyp代表支持的所有格式:
RTMP直播,FLV直播,FLV点播,HLS点播,MP4点播
[_txLivePlayer startPlay:@"rtmp://live.hkstv.hk.lxdns.com/live/hks" type:_playType];
点击事件和是否横屏判断
#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; }
工具类里的转屏
//强制旋转屏幕 + (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]; }
作者:Winny_园球
链接:https://www.jianshu.com/p/93ad92dc25c3
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/tengxunyunkengbudongzenmediaoyongzhiboshifenzhongjiejuewenti.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:4 月 4, 2018 at 09:22 上午