FishPlayControl.mm 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. //
  2. // FishPlayControl.m
  3. // FunSDKDemo
  4. //
  5. // Created by XM on 2018/11/21.
  6. // Copyright © 2018年 XM. All rights reserved.
  7. //
  8. #import "FishPlayControl.h"
  9. #import "FunSDK/FunSDK.h"
  10. #import "Header.h"
  11. @implementation FishPlayControl
  12. #pragma mark 回调设置一些鱼眼参数,Hardandsoft鱼眼解码模式,Hardmodel画面模式
  13. - (void)refreshSoftModel:(int)Hardandsoft model:(int)Hardmodel {
  14. if(Hardandsoft == 3) {
  15. if (Hardmodel == SDK_FISHEYE_SECENE_P360_FE) {
  16. hardV.view.hidden = NO;
  17. Hardmodels =Hardmodel;
  18. Hardandsofts =Hardandsoft;
  19. }else if(Hardmodel == SDK_FISHEYE_SECENE_RRRR_R){
  20. hardV.view.hidden = YES;
  21. Hardmodels =Hardmodel;
  22. Hardandsofts =Hardandsoft;
  23. }
  24. [softV removeFromParentViewController];
  25. //保存鱼眼状态
  26. //[Config saveFisheye:[self getLocalKey] mode:Hardmodel];
  27. // 增加鱼眼手势
  28. // if (twoFingerPinch == nil) {
  29. // twoFingerPinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(touchesPinch:)];
  30. // [self.view addGestureRecognizer:twoFingerPinch];
  31. // }
  32. isFeyeYuv = YES;
  33. }
  34. else if(Hardandsoft ==4) {
  35. [self VRSoftSetFecParams];
  36. //创建模式切换界面
  37. [self createVRFunctionView:Hardmodel];
  38. Hardmodels =Hardmodel;
  39. Hardandsofts =Hardandsoft;
  40. if (Hardmodel == 0) {
  41. [softV setVRType:XMVR_TYPE_360D];
  42. }else{
  43. [softV setVRType:XMVR_TYPE_180D];
  44. }
  45. softV.view.hidden = NO;
  46. [softV configSoftEAGLContext];
  47. //保存鱼眼模式
  48. // [Config saveFisheye:[self getLocalKey] mode:Hardmodel];
  49. isFeyeYuv = YES;
  50. } else if(Hardandsoft ==5){
  51. Hardmodels =Hardmodel;
  52. Hardandsofts =Hardandsoft;
  53. [softV setVRType:XMVR_TYPE_SPE_CAM01];
  54. [self VRSoftSetFecParams];
  55. softV.view.hidden = NO;
  56. }
  57. }
  58. #pragma mark 鱼眼软解 设置宽高中心偏移量半径等等参数
  59. -(void)centerOffSetX:(short)OffSetx offY:(short)OffSetY radius:(short)radius width:(short)width height:(short)height {
  60. centerOffsetX = OffSetx;
  61. centerOffsetY = OffSetY;
  62. imgradius = radius;
  63. imageWidth = width;
  64. imageHeight = height;
  65. }
  66. #pragma mark 刷新鱼眼界面宽高中心点以及偏移量
  67. -(void)VRSoftSetFecParams {
  68. [softV setVRFecParams:centerOffsetX yCenter:centerOffsetY radius:imgradius Width:imageWidth Height:imageHeight];
  69. }
  70. #pragma mark 接收到视频数据传递给底层处理显示画面
  71. -(void)PushData:(int)width height:(int)height YUVData:(unsigned char *)pData {
  72. if (hardV && hardV.view.hidden == NO) {
  73. [hardV PushData:width height:height YUVData:pData];
  74. }else if (softV && softV.view.hidden == NO) {
  75. [softV PushData:width height:height YUVData:pData];
  76. }
  77. }
  78. #pragma mark 设置鱼眼视频预览的时间
  79. - (void)setTimeLabelText:(NSString*)time {
  80. timeLab.text = time;
  81. }
  82. #pragma mark 初始化鱼眼播放界面
  83. -(void)createFeye:(int)type frameSize:(CGRect)frame{
  84. CGRect rect = frame;
  85. rect.origin.x=0;
  86. rect.origin.y=0;
  87. if (type == 3) {
  88. if (hardV == nil) {
  89. hardV = [[HardVRViewController alloc] init];
  90. hardV.view.frame = rect;
  91. hardV.view.hidden = YES;
  92. [hardV.view addSubview:self.timeLab];
  93. [hardV.view addSubview:self.nameLab];
  94. }
  95. }
  96. else if (type == 4 || type == 5) {
  97. if (softV == nil) {
  98. softV = [[VRGLViewController alloc] init];
  99. softV.view.frame = rect;
  100. softV.view.hidden = YES;
  101. [softV.view addSubview:self.timeLab];
  102. [softV.view addSubview:self.nameLab];
  103. }
  104. }
  105. }
  106. - (GLKViewController *)getFeyeViewController {
  107. if (softV != nil) {
  108. return softV;
  109. }
  110. return hardV;
  111. }
  112. - (UILabelOutLined*)timeLab {
  113. if (timeLab == nil) {
  114. timeLab = [[UILabelOutLined alloc] initWithFrame:CGRectMake(ScreenWidth-160 , 0, 150, 30)];
  115. timeLab.textAlignment = NSTextAlignmentRight;
  116. }
  117. return timeLab;
  118. }
  119. - (UILabelOutLined*)nameLab {
  120. if (nameLab == nil) {
  121. nameLab = [[UILabelOutLined alloc] initWithFrame:CGRectMake(10 , 0, 150, 30)];
  122. nameLab.textAlignment = NSTextAlignmentLeft;
  123. }
  124. return nameLab;
  125. }
  126. #pragma mark 创建切换鱼眼画面模式的功能界面
  127. -(void)createVRFunctionView:(int)Hardmodel {
  128. int VRHeight = 72;
  129. if (Hardmodel) {//180VR
  130. VRHeight = 40;
  131. }else{//360VR
  132. VRHeight = 72;
  133. }
  134. //这个判断保证只生成一个VRFunction button
  135. if (VRFunction == nil) {
  136. UIView *posintionView = [[UIView alloc]initWithFrame:CGRectMake(0, realPlayViewHeight - VRHeight,30*1.5,VRHeight)];
  137. posintionView.backgroundColor =[UIColor clearColor];
  138. [softV.view addSubview:posintionView];
  139. VRFunction = [[UIButton alloc]initWithFrame:CGRectMake(0,0,30,30)];
  140. VRFunction.center = posintionView.center;
  141. [VRFunction setImage:[UIImage imageNamed:@"360VR-ins_default.png"] forState:UIControlStateNormal];
  142. [VRFunction addTarget:self action:@selector(ShowVRFunctionView) forControlEvents:UIControlEventTouchUpInside];
  143. [softV.view addSubview:VRFunction];
  144. softV.VRShowMode = 1;//1代表吸顶(ceiling)模式 0代表壁挂(wall) 每次第一次进入 默认都 吸顶加 shape_ball 球模式(360VR默认)
  145. CGRect rect = CGRectMake(0, realPlayViewHeight - VRHeight, ScreenWidth,VRHeight);
  146. functionView = [[VRFunctionView alloc]initWithFrame:rect VRType:Hardmodel];
  147. [functionView.closeMode addTarget:self action:@selector(closeFunctionViewAndShowFunctionVRButton) forControlEvents:UIControlEventTouchUpInside];
  148. functionView.ceiling.selected = YES;
  149. functionView.Ball.selected = YES;
  150. functionView.delegate = self;
  151. }
  152. }
  153. #pragma mark - 鱼眼VR模式切换代理方法
  154. -(void)changeVRFunctionMode:(_XMVRShape)type WithWarOrCeiling:(int)model
  155. {
  156. [softV setVRShowMode:model];
  157. [softV setVRShapeType:type];
  158. }
  159. //显示壁挂吸顶功能菜单
  160. - (void)ShowVRFunctionView{
  161. VRFunction.hidden = YES;
  162. functionView.hidden = NO;
  163. [softV.view addSubview:functionView];
  164. }
  165. //关闭壁挂吸顶功能菜单 并显示功能按钮
  166. - (void)closeFunctionViewAndShowFunctionVRButton{
  167. VRFunction.hidden = NO;
  168. }
  169. @end