// // P2PPlayingbackVC.m // P2PPlayingbackVC // // Created by apple on 16/7/19. // Copyright © 2016年 yuanHongQiang. All rights reserved. // #import "P2PPlayingbackVC.h" #import "FounderButton.h" #import "UIViewExt.h" #import "YSlider.h" #import "AppDelegate.h" #import "PAIOUnit.h" #import "OpenGLView.h" #import "FListManager.h" @interface P2PPlayingbackVC () @property (nonatomic) CGPoint swipeLastPos; @property (nonatomic,strong) OpenGLView *remoteView; @end @implementation P2PPlayingbackVC{ BOOL _hadRotating; BOOL _hadLayout; BOOL _hadCreateUI; BOOL _hadAddUI; UIView* _viewNaviBar; UIImageView* _imageViewNaviBarColor; UIView* _viewBottomTools; UIView* _openGLView; UIView* _viewSpeed; FounderButton* _buttonPre; FounderButton* _buttonNext; FounderButton* _buttonSpeed; FounderButton* _buttonPause; FounderButton* _buttonSilence; FounderButton* _buttonBack; FounderButton* _buttonViewSpeed; UITapGestureRecognizer* _gesOnceTap; UILabel* _labelPlayTheTime; UILabel* _labelPlayAllTime; UILabel* _labelPlaySpeedTime; YSlider* _sliderPlayProgress; BOOL _isPause; BOOL _isSilence; BOOL _isFasting; // BOOL _needUpdatePlayTimeShow; //OpenGLView *_remoteView; uint64_t _theTimePlay; uint64_t _theTimeAll; NSString* _thetimePlayStr; NSString* _thetimeAllStr; BOOL _isFishEyeDevice; CGSize _theSizeOfScreen; } -(void)dealloc{ [[NSNotificationCenter defaultCenter] removeObserver:self]; } -(void)regStatusBarNotification{ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notHadRotating:) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; } -(void)notHadRotating:(NSNotification*)notification{ _hadRotating=YES; _hadLayout=NO; } -(instancetype)init{ self=[super init]; if (self) { [self initializeVariable]; [self regStatusBarNotification]; } return self; } - (void)viewDidLoad{ [super viewDidLoad]; [AppDelegate sharedDefault].canFullScreen = YES; self.view.backgroundColor=[UIColor whiteColor]; [self createUI]; [self addUI]; [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; [self stSilence:NO]; [[PAIOUnit sharedUnit] setSilentAudio:YES]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground) name:UIApplicationDidEnterBackgroundNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil]; } - (void)applicationDidEnterBackground { NSLog(@"========================Enter Background"); _isReject = YES; } - (void)applicationDidBecomeActive { NSLog(@"========================Become Active"); _isReject = NO; [self startRenderView]; } -(void)initializeVariable{ _hadRotating=NO; _hadLayout=NO; _hadCreateUI=NO; _hadAddUI=NO; _isPause=NO; _isSilence=NO; _isFasting=NO; _needUpdatePlayTimeShow=YES; } -(void)createUI{ _hadCreateUI=YES; _viewNaviBar=[[UIView alloc] init]; _viewNaviBar.backgroundColor=[UIColor clearColor]; _imageViewNaviBarColor=[[UIImageView alloc] init]; _imageViewNaviBarColor.backgroundColor=[UIColor clearColor]; _imageViewNaviBarColor.contentMode=UIViewContentModeScaleToFill; _imageViewNaviBarColor.image=[UIImage imageNamed:@"FullPlay_Gradient_black_alpha_0.png"]; _viewBottomTools=[[UIView alloc] init]; _viewBottomTools.backgroundColor=[UIColor colorWithRed:48/255.0 green:48/255.0 blue:48/255.0 alpha:0.8]; _openGLView=[[UIView alloc] init]; _openGLView.backgroundColor=[UIColor blackColor]; // _openGLView.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"FullScreenTemp.png"]]; _gesOnceTap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showToolsViewChange)]; _gesOnceTap.numberOfTapsRequired=1; [_openGLView addGestureRecognizer:_gesOnceTap]; _buttonPre=[[FounderButton alloc] init]; _buttonPre.buttonImageViewSize=CGSizeMake(17, 17); _buttonPre.backgroundColor=[UIColor clearColor]; [_buttonPre addTarget:self action:@selector(buttonBeClick:) forControlEvents:UIControlEventTouchUpInside]; [_buttonPre setImage:[UIImage imageNamed:@"FullPlay_Previous.png"] forState:UIControlStateNormal]; [_buttonPre setImage:[UIImage imageNamed:@"FullPlay_Previous_down.png"] forState:UIControlStateHighlighted]; _buttonNext=[[FounderButton alloc] init]; _buttonNext.buttonImageViewSize=CGSizeMake(17, 17); _buttonNext.backgroundColor=[UIColor clearColor]; [_buttonNext addTarget:self action:@selector(buttonBeClick:) forControlEvents:UIControlEventTouchUpInside]; [_buttonNext setImage:[UIImage imageNamed:@"FullPlay_Next.png"] forState:UIControlStateNormal]; [_buttonNext setImage:[UIImage imageNamed:@"FullPlay_Next_down.png"] forState:UIControlStateHighlighted]; _buttonSpeed=[[FounderButton alloc] init]; _buttonSpeed.buttonImageViewSize=CGSizeMake(17, 17); _buttonSpeed.backgroundColor=[UIColor clearColor]; [_buttonSpeed addTarget:self action:@selector(buttonBeClick:) forControlEvents:UIControlEventTouchUpInside]; [_buttonSpeed setImage:[UIImage imageNamed:@"FullPlay_Speed.png"] forState:UIControlStateNormal]; [_buttonSpeed setImage:[UIImage imageNamed:@"FullPlay_Speed_down.png"] forState:UIControlStateHighlighted]; _buttonPause=[[FounderButton alloc] init]; _buttonPause.buttonImageViewSize=CGSizeMake(17, 17); _buttonPause.backgroundColor=[UIColor clearColor]; [_buttonPause addTarget:self action:@selector(buttonBeClick:) forControlEvents:UIControlEventTouchUpInside]; [self updatePauseButtonWithPause:_isPause]; _buttonSilence=[[FounderButton alloc] init]; _buttonSilence.buttonImageViewSize=CGSizeMake(17, 17); _buttonSilence.backgroundColor=[UIColor clearColor]; [_buttonSilence addTarget:self action:@selector(buttonBeClick:) forControlEvents:UIControlEventTouchUpInside]; [self updateSilenceButtonWithPause:_isSilence]; _buttonBack=[[FounderButton alloc] init]; _buttonBack.buttonImageViewSize=CGSizeMake(17, 17); _buttonBack.backgroundColor=[UIColor clearColor]; [_buttonBack addTarget:self action:@selector(buttonBeClick:) forControlEvents:UIControlEventTouchUpInside]; [_buttonBack setImage:[UIImage imageNamed:@"FullPlay_Back.png"] forState:UIControlStateNormal]; [_buttonBack setImage:[UIImage imageNamed:@"FullPlay_Back_down.png"] forState:UIControlStateHighlighted]; _labelPlayTheTime=[[UILabel alloc] init]; _labelPlayTheTime.userInteractionEnabled=NO; _labelPlayTheTime.backgroundColor=[UIColor clearColor]; _labelPlayTheTime.text=@"00:00:00"; _labelPlayTheTime.textColor=[UIColor whiteColor]; _labelPlayTheTime.font=[UIFont systemFontOfSize:11.0]; _labelPlayTheTime.textAlignment=NSTextAlignmentLeft; _labelPlayAllTime=[[UILabel alloc] init]; _labelPlayAllTime.userInteractionEnabled=NO; _labelPlayAllTime.backgroundColor=[UIColor clearColor]; _labelPlayAllTime.text=@"00:00:00"; _labelPlayAllTime.textColor=[UIColor whiteColor]; _labelPlayAllTime.font=[UIFont systemFontOfSize:11.0]; _labelPlayAllTime.textAlignment=NSTextAlignmentRight; _sliderPlayProgress=[[YSlider alloc] init]; _sliderPlayProgress.backgroundColor=[UIColor clearColor]; [_sliderPlayProgress setMinimumTrackColor:[UIColor colorWithRed:102/255.0 green:185/255.0 blue:255/255.0 alpha:1.0] forState:UIControlStateNormal]; [_sliderPlayProgress setMinimumTrackColor:[UIColor colorWithRed:102/255.0 green:185/255.0 blue:255/255.0 alpha:1.0] forState:UIControlStateHighlighted]; [_sliderPlayProgress setMinimumTrackColor:[UIColor colorWithRed:102/255.0 green:185/255.0 blue:255/255.0 alpha:1.0] forState:UIControlStateSelected]; [_sliderPlayProgress setMaximumTrackColor:[UIColor colorWithRed:118/255.0 green:118/255.0 blue:118/255.0 alpha:1.0] forState:UIControlStateNormal]; [_sliderPlayProgress setMaximumTrackColor:[UIColor colorWithRed:118/255.0 green:118/255.0 blue:118/255.0 alpha:1.0] forState:UIControlStateHighlighted]; [_sliderPlayProgress setMaximumTrackColor:[UIColor colorWithRed:118/255.0 green:118/255.0 blue:118/255.0 alpha:1.0] forState:UIControlStateSelected]; [_sliderPlayProgress setThumbImage:[UIImage imageNamed:@"FullPlay_Slider.png"] forState:UIControlStateNormal]; [_sliderPlayProgress setThumbImage:[UIImage imageNamed:@"FullPlay_Slider_down.png"] forState:UIControlStateHighlighted]; [_sliderPlayProgress setThumbImage:[UIImage imageNamed:@"FullPlay_Slider_down.png"] forState:UIControlStateSelected]; [_sliderPlayProgress setThumbColor:[UIColor clearColor] forState:UIControlStateNormal]; [_sliderPlayProgress setThumbColor:[UIColor clearColor] forState:UIControlStateHighlighted]; [_sliderPlayProgress setThumbColor:[UIColor clearColor] forState:UIControlStateSelected]; _sliderPlayProgress.value=0.0; _sliderPlayProgress.thumbSize=CGSizeMake(21, 21); [_sliderPlayProgress addTarget:self action:@selector(dropInsideBegin:) forControlEvents:UIControlEventTouchDown]; [_sliderPlayProgress addTarget:self action:@selector(dropValueChange:) forControlEvents:UIControlEventValueChanged]; [_sliderPlayProgress addTarget:self action:@selector(dropInsideEnd:) forControlEvents:UIControlEventTouchUpInside]; [_sliderPlayProgress addTarget:self action:@selector(dropCancel:) forControlEvents:UIControlEventTouchUpOutside]; [_sliderPlayProgress addTarget:self action:@selector(dropCancel:) forControlEvents:UIControlEventTouchCancel]; //画布 //画布 NSString *contactId = [[P2PClient sharedClient] callId]; // NSInteger deviceSubtype = [[FListManager sharedFList] getDeviceSubtypeWithId:contactId]; _isFishEyeDevice = NO; //if (isSupportFisheyeDevice(deviceSubtype)) { // _isFishEyeDevice = YES; // } //非鱼眼设备 下面设置无效 int installType = SHAPE_CIRCLE;//360 int fishEyeType = FISHEYE_360;//360 // if (isSupportFisheyeDevice180(deviceSubtype)) { // installType = SHAPE_180_HALF_SPHERE;//180 // fishEyeType = FISHEYE_180;//180 // } _remoteView = [[OpenGLView alloc] initWithIsSupportFisheyeDevice:_isFishEyeDevice installType:installType deviceID:[contactId intValue] fishEyeType:fishEyeType]; _remoteView.userInteractionEnabled=YES; [_remoteView setIsFullScreen:YES]; if (_isFishEyeDevice) { //缩放手势(鱼眼设备) UIPinchGestureRecognizer *pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] init]; [pinchGestureRecognizer addTarget:self action:@selector(onPinchToZoom:)]; [_remoteView addGestureRecognizer:pinchGestureRecognizer]; //拖动手势(鱼眼设备才有,普通设备时则禁止) UIPanGestureRecognizer *panRec = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panEvent:)]; [_remoteView addGestureRecognizer:panRec]; } _viewSpeed = [[UIView alloc] init]; _viewSpeed.hidden = YES; _viewSpeed.backgroundColor=[UIColor colorWithRed:0.0/255.0 green:0.0/255.0 blue:0.0/255.0 alpha:0.5]; _buttonViewSpeed = [[FounderButton alloc] init]; _buttonViewSpeed.buttonImageViewSize=CGSizeMake(17, 17); _buttonViewSpeed.backgroundColor=[UIColor clearColor]; [_buttonViewSpeed addTarget:self action:@selector(buttonBeClick:) forControlEvents:UIControlEventTouchUpInside]; [_buttonViewSpeed setImage:[UIImage imageNamed:@"FullPlay_Speed.png"] forState:UIControlStateNormal]; [_buttonViewSpeed setImage:[UIImage imageNamed:@"FullPlay_Speed_down.png"] forState:UIControlStateHighlighted]; _labelPlaySpeedTime=[[UILabel alloc] init]; _labelPlaySpeedTime.userInteractionEnabled=NO; _labelPlaySpeedTime.backgroundColor=[UIColor clearColor]; _labelPlaySpeedTime.text=@"00:00:00"; _labelPlaySpeedTime.textColor=[UIColor colorWithRed:102.0/255.0 green:185.0/255.0 blue:255.0/255.0 alpha:1.0]; _labelPlaySpeedTime.font=[UIFont systemFontOfSize:10.0]; _labelPlaySpeedTime.textAlignment=NSTextAlignmentLeft; } -(void)addUI{ _hadAddUI=YES; UIView* theView=self.view; [_openGLView addSubview:_remoteView]; [theView addSubview:_openGLView]; [_viewBottomTools addSubview:_sliderPlayProgress]; [_viewBottomTools addSubview:_buttonPre]; [_viewBottomTools addSubview:_buttonNext]; [_viewBottomTools addSubview:_buttonPause]; [_viewBottomTools addSubview:_buttonSilence]; [_viewBottomTools addSubview:_labelPlayTheTime]; [_viewBottomTools addSubview:_labelPlayAllTime]; [_viewBottomTools addSubview:_buttonSpeed]; //[theView addSubview:_viewBottomTools]; [_viewNaviBar addSubview:_imageViewNaviBarColor]; [_viewNaviBar addSubview:_buttonBack]; [theView addSubview:_viewNaviBar]; [_viewSpeed addSubview:_buttonViewSpeed]; [_viewSpeed addSubview:_labelPlaySpeedTime]; [theView addSubview:_viewSpeed]; } -(void)viewDidLayoutSubviews{ [super viewDidLayoutSubviews]; if (!_hadLayout){ _hadLayout=YES; } [self layoutAuto]; if (_hadRotating){ _hadRotating=NO; } } -(CGSize)gtScreenSize{ CGSize screenSize = [UIScreen mainScreen].bounds.size; if (([[UIDevice currentDevice].systemVersion floatValue] < 8.0) && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) { return CGSizeMake(screenSize.height, screenSize.width); } return screenSize; } -(void)layoutAuto{ _theSizeOfScreen=[self gtScreenSize]; CGFloat TempW=_theSizeOfScreen.width; CGFloat TempH=45; CGFloat TempX=0; CGFloat TempY=(_theSizeOfScreen.height-TempH); CGRect newRect=CGRectMake(TempX, TempY, TempW, TempH); _viewBottomTools.frame=newRect; TempW=_theSizeOfScreen.width; TempH=_theSizeOfScreen.height; TempX=0; TempY=0; newRect=CGRectMake(TempX, TempY, TempW, TempH); _openGLView.frame=newRect; _remoteView.frame=_openGLView.bounds; if (_isFishEyeDevice) { // [_remoteView setFullScreenHeight:_remoteView.frame.size.width width:_remoteView.frame.size.width fullScreen:1];//360全景设备 } TempW=_theSizeOfScreen.width; TempH=44; TempX=0; TempY=0; newRect=CGRectMake(TempX, TempY, TempW, TempH); _viewNaviBar.frame=newRect; _imageViewNaviBarColor.frame=_viewNaviBar.bounds; TempW=35; TempH=_viewNaviBar.height; TempX=15; TempY=(_viewNaviBar.height-TempH)/2.0; newRect=CGRectMake(TempX, TempY, TempW, TempH); _buttonBack.frame=newRect; TempW=33; TempH=_viewBottomTools.height; TempX=_buttonBack.left; TempY=(_viewBottomTools.height-TempH)/2.0; newRect=CGRectMake(TempX, TempY, TempW, TempH); _buttonPre.frame=newRect; TempW=_buttonPre.width; TempH=_buttonPre.height; TempX=_buttonPre.right; TempY=_buttonPre.top; newRect=CGRectMake(TempX, TempY, TempW, TempH); _buttonPause.frame=newRect; TempW=_buttonPause.width; TempH=_buttonPause.height; TempX=_buttonPause.right; TempY=_buttonPause.top; newRect=CGRectMake(TempX, TempY, TempW, TempH); _buttonNext.frame=newRect; TempW=_buttonNext.width; TempH=_buttonNext.height; TempX=_buttonNext.right; TempY=_buttonNext.top; newRect=CGRectMake(TempX, TempY, TempW, TempH); _buttonSpeed.frame=newRect; TempW=_buttonPre.width; TempH=_buttonPre.height; TempX=(_viewBottomTools.width-TempW)- _buttonPre.left; TempY=_buttonPre.top; newRect=CGRectMake(TempX, TempY, TempW, TempH); _buttonSilence.frame=newRect; TempW=_buttonSilence.left-_buttonSpeed.right+15*2; TempH=_viewBottomTools.height; TempX=_buttonSpeed.right-15; TempY=(_viewBottomTools.height-TempH)/2.0; newRect=CGRectMake(TempX, TempY, TempW, TempH); _sliderPlayProgress.frame=newRect; TempW=(_sliderPlayProgress.width-_sliderPlayProgress.height/2.0*2)/2.0; TempH=_viewBottomTools.height/2.0; TempX=_sliderPlayProgress.left+_sliderPlayProgress.height/2.0; TempY=_viewBottomTools.height-TempH; newRect=CGRectMake(TempX, TempY, TempW, TempH); _labelPlayTheTime.frame=newRect; TempW=(_sliderPlayProgress.width-_sliderPlayProgress.height/2.0*2)/2.0; TempH=_labelPlayTheTime.height; TempX=(_sliderPlayProgress.width-(TempW+_sliderPlayProgress.height/2.0))+_sliderPlayProgress.left;; TempY=_labelPlayTheTime.top; newRect=CGRectMake(TempX, TempY, TempW, TempH); _labelPlayAllTime.frame=newRect; TempW=170.0/2.0; TempH=55.0/2.0; TempX=(_theSizeOfScreen.width - TempW)/2.0; TempY=(_theSizeOfScreen.height - TempH)/2.0; newRect=CGRectMake(TempX, TempY, TempW, TempH); _viewSpeed.frame=newRect; TempW=_buttonNext.width; TempH=_buttonNext.height; TempX=0.0; TempY=(_viewSpeed.height - TempH)/2.0; newRect=CGRectMake(TempX, TempY, TempW, TempH); _buttonViewSpeed.frame=newRect; TempW=_viewSpeed.width - _buttonViewSpeed.width; TempH=_viewSpeed.height / 2.0; TempX=_buttonViewSpeed.right; TempY=(_viewSpeed.height - TempH)/2.0; newRect=CGRectMake(TempX, TempY, TempW, TempH); _labelPlaySpeedTime.frame = newRect; } #pragma mark - 将要显示 -(void)viewWillAppear:(BOOL)animated{ [AppDelegate sharedDefault].canFullScreen = YES; [super viewWillAppear:animated]; [[P2PClient sharedClient] setPlaybackDelegate:self]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivePlayingCommand:) name:RECEIVE_PLAYING_CMD object:nil]; } #pragma mark - 收到播放控制消息 - (void)receivePlayingCommand:(NSNotification *)notification{ NSDictionary *parameter = [notification userInfo]; int key = [[parameter valueForKey:@"key"] intValue]; dispatch_async(dispatch_get_main_queue(), ^{ if(key==RECEIVE_PLAYING_CMD_PLAYBACK_STOP){ NSLog(@"停止播放"); _isPause=YES; _viewSpeed.hidden=YES; }else if(key==RECEIVE_PLAYING_CMD_PLAYBACK_START){ NSLog(@"开始播放"); _isPause=NO; }else if(key==RECEIVE_PLAYING_CMD_PLAY_FAST_START){ NSLog(@"开始快进"); _isPause=NO; _viewSpeed.hidden=NO; }else if(key==RECEIVE_PLAYING_CMD_PLAY_FAST_STOP){ NSLog(@"停止快进"); _isPause=NO; _viewSpeed.hidden=YES; } [self updatePauseButtonWithPause:_isPause]; }); } #pragma mark - 将要消失 -(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [self closeThePlay]; [[NSNotificationCenter defaultCenter] removeObserver:self name:RECEIVE_PLAYING_CMD object:nil]; [[UIApplication sharedApplication] setIdleTimerDisabled:NO]; } #pragma mark - 视图已经显示 -(void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [self startRenderView]; } #pragma mark - 时间到文本的转换 -(NSString*)stringFromTime:(uint64_t)time{ uint64_t theTime=time; if (theTime<=0) { theTime=0; } uint64_t hour=theTime/3600; uint64_t minutes=(theTime - hour*3600 )/60; uint64_t seconds=(theTime - hour*3600 - minutes*60); NSString* strTime=[NSString stringWithFormat:@"%02lld:%02lld:%02lld",(uint64_t)hour,(uint64_t)minutes,(uint64_t)seconds]; return strTime; } #pragma mark - 渲染视频 - (void)startRenderView{ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ GAVFrame * m_pAVFrame ; while (!_isReject){ if([[P2PClient sharedClient] gwplaybackState]!=PLAYBACK_STATE_PAUSE){ NSLog(@"P2PPlayingbackVC while 渲染监控画面"); if(fgGetVideoFrameToDisplay(&m_pAVFrame)){ //NSLog(@"\n回放的结构体:\n m_pAVFrame->width:%d\n m_pAVFrame->linesize[0]:%d \n m_pAVFrame->height:%d \n m_pAVFrame->linesize[0]:%d \n m_pAVFrame->pts:%llu ", // m_pAVFrame->width, // m_pAVFrame->linesize[0], // m_pAVFrame->height, // m_pAVFrame->linesize[0], // m_pAVFrame->pts // ); UInt64 u64TargetPTS = [[P2PClient sharedClient] playback_u64TargetPTS]; _theTimePlay = (m_pAVFrame->pts-[[P2PClient sharedClient] playback_startTime])/1000000; _theTimeAll = [[P2PClient sharedClient] playback_totalTime]/1000000; _thetimePlayStr=[self stringFromTime:_theTimePlay]; _thetimeAllStr=[self stringFromTime:_theTimeAll]; NSLog(@"_theTimePlay=%lld _theTimeAll==%lld",_theTimePlay,_theTimeAll); if (_needUpdatePlayTimeShow) { double sliderValue=(double)(_theTimePlay/(double)_theTimeAll); if (isnan(sliderValue)) { //若_theTimeAll=0,那么sliderValue值为nan,会引起崩溃 //所以加if判断 sliderValue=0; } NSLog(@"sliderValue=%.4f",sliderValue); dispatch_async(dispatch_get_main_queue(), ^{ if (u64TargetPTS==0 || ((m_pAVFrame->pts >= u64TargetPTS) && (m_pAVFrame->pts-u64TargetPTS<1000000))) { if (u64TargetPTS!=0) { [self stSilence:NO]; } [[P2PClient sharedClient] setPlayback_u64TargetPTS:0]; _labelPlayTheTime.text=_thetimePlayStr; _labelPlayAllTime.text=_thetimeAllStr; _labelPlaySpeedTime.text=_thetimePlayStr; _sliderPlayProgress.value=sliderValue; } }); } if (u64TargetPTS==0 || ((m_pAVFrame->pts >= u64TargetPTS) && (m_pAVFrame->pts-u64TargetPTS<1000000))) { [self.remoteView render:m_pAVFrame]; } vReleaseVideoFrame(); } } usleep(10000); } }); } #pragma mark - 静音或者不静音 -(void)stSilence:(BOOL)flag{ if (flag) { [[PAIOUnit sharedUnit] setMuteAudio:YES]; }else{ [[PAIOUnit sharedUnit] setMuteAudio:NO]; } } #pragma mark - 上一曲 -(void)preVideo{ if([[P2PClient sharedClient] getPlaybackCurrentFileIndex]==0){ [self.view makeToast:NSLocalizedString(@"no_previous_files", nil)]; }else{ [[P2PClient sharedClient] previous]; } } #pragma mark - 下一曲 -(void)nextVideo{ if([[P2PClient sharedClient] getPlaybackCurrentFileIndex]>=([[P2PClient sharedClient] getPlaybackFilesLength]-1)){ [self.view makeToast:NSLocalizedString(@"no_next_files", nil)]; }else{ [[P2PClient sharedClient] next]; } } #pragma mark - 快进 -(void)speedVideo{ if(_viewSpeed.hidden){ _viewSpeed.hidden = NO; [[P2PClient sharedClient] fastBegin:_sliderPlayProgress.value *_theTimeAll]; }else{ [[P2PClient sharedClient] fastEnd:_sliderPlayProgress.value *_theTimeAll]; _viewSpeed.hidden = YES; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)500*NSEC_PER_MSEC), dispatch_get_main_queue(), ^{ if (_viewSpeed.hidden) { [self playTimeTo:_sliderPlayProgress.value*_theTimeAll]; } }); } } #pragma mark - 关闭播放 -(void)closeThePlay{ _isReject=YES; //[[P2PClient sharedClient] playbackp2pHungUp]; [self quitFullController]; [self dismissViewControllerAnimated:YES completion:nil]; } #pragma mark - 暂停或者播放 -(void)playOrPause{ vSetSupperDrop(NO); if ([[P2PClient sharedClient] gwplaybackState]==PLAYBACK_STATE_PLAYING) { _isPause=YES; [[P2PClient sharedClient] setGwplaybackState:PLAYBACK_STATE_PAUSE]; [self stSilence:YES]; }else if([[P2PClient sharedClient] gwplaybackState]==PLAYBACK_STATE_PAUSE){ _isPause=NO; [[P2PClient sharedClient] setGwplaybackState:PLAYBACK_STATE_PLAYING]; if (!_isSilence) { [self stSilence:NO]; } }else if([[P2PClient sharedClient] gwplaybackState]==PLAYBACK_STATE_STOP){ _isPause=YES; [[P2PClient sharedClient] sendCommandType:USR_CMD_PLAY_CTL andOption:USR_CMD_OPTION_PLAY]; if (!_isSilence) { [self stSilence:NO]; } } [self updatePauseButtonWithPause:_isPause]; } #pragma mark - 滑块条事件 -(void)dropInsideEnd:(YSlider*)slider{ [self stSilence:YES]; [self playTimeTo:slider.value*_theTimeAll]; _needUpdatePlayTimeShow=YES; _viewSpeed.hidden = YES; } -(void)dropCancel:(YSlider*)slider{ _needUpdatePlayTimeShow=YES; } -(void)dropInsideBegin:(YSlider*)slider{ _needUpdatePlayTimeShow=NO; } -(void)dropValueChange:(YSlider*)slider{ _thetimePlayStr=[self stringFromTime:slider.value*_theTimeAll]; _labelPlayTheTime.text=_thetimePlayStr; } #pragma mark - 全屏和不全屏的切换 -(void)fullScreenChange{ // BOOL is16B9 = [[P2PClient sharedClient] is16B9]; // if (!is16B9) { // if (_isFullScreen) { // _isFullScreen=NO; // //开始切换为不全屏 // }else{ // _isFullScreen=YES; // //开始切换为全屏 // } // } } #pragma mark - 播放指定时间 -(void)playTimeTo:(NSTimeInterval)time{ [[P2PClient sharedClient] jump:time]; } #pragma mark - 回调=视频回放挂断 -(void)P2PPlaybackReject:(NSDictionary *)info{ NSLog(@"回调=视频回放挂断"); //[self quitFullController]; //[self dismissViewControllerAnimated:YES completion:nil]; } #pragma mark - 隐藏工具栏和显示工具栏 -(void)showToolsViewChange{ if (_viewBottomTools.top==(_theSizeOfScreen.height-_viewBottomTools.height)) { [UIView animateWithDuration:0.26 animations:^{ _viewNaviBar.top=-_viewNaviBar.height; _viewBottomTools.top=_theSizeOfScreen.height; }]; }else{ [UIView animateWithDuration:0.26 animations:^{ _viewNaviBar.top=0; _viewBottomTools.top=(_theSizeOfScreen.height-_viewBottomTools.height); }]; } } #pragma mark - 隐藏任务栏 -(BOOL)prefersStatusBarHidden{ return YES; } #pragma mark - 按钮被单击 -(void)buttonBeClick:(FounderButton*)button{ if (button==_buttonPre) { [self preVideo]; } if (button==_buttonPause) { [self playOrPause]; } if (button==_buttonNext) { [self nextVideo]; } if (button==_buttonSpeed) { [self speedVideo]; } if (button==_buttonViewSpeed) { [self speedVideo]; } if (button==_buttonSilence) { _isSilence=!_isSilence; [self stSilence:_isSilence]; [self updateSilenceButtonWithPause:_isSilence]; } if (button==_buttonBack) { [self closeThePlay]; } } #pragma mark - 更新播放按钮 -(void)updatePauseButtonWithPause:(BOOL)pause{ if (!pause) { [_buttonPause setImage:[UIImage imageNamed:@"FullPlay_Pause.png"] forState:UIControlStateNormal]; [_buttonPause setImage:[UIImage imageNamed:@"FullPlay_Pause_down.png"] forState:UIControlStateHighlighted]; }else{ [_buttonPause setImage:[UIImage imageNamed:@"FullPlay_Play.png"] forState:UIControlStateNormal]; [_buttonPause setImage:[UIImage imageNamed:@"FullPlay_Play_down.png"] forState:UIControlStateHighlighted]; } } #pragma mark - 更新静音按钮 -(void)updateSilenceButtonWithPause:(BOOL)silence{ if (silence) { [_buttonSilence setImage:[UIImage imageNamed:@"FullPlay_Silence.png"] forState:UIControlStateNormal]; [_buttonSilence setImage:[UIImage imageNamed:@"FullPlay_Silence_down.png"] forState:UIControlStateHighlighted]; }else{ [_buttonSilence setImage:[UIImage imageNamed:@"FullPlay_NO_Silence.png"] forState:UIControlStateNormal]; [_buttonSilence setImage:[UIImage imageNamed:@"FullPlay_NO_Silence_down.png"] forState:UIControlStateHighlighted]; } } #pragma mark - 缩放手势(鱼眼设备) -(void)onPinchToZoom:(UIPinchGestureRecognizer*)sender { //鱼眼设备 // zoom in/out if(sender.state == UIGestureRecognizerStateBegan){ } else if(sender.state == UIGestureRecognizerStateEnded){ }else if(sender.state == UIGestureRecognizerStateChanged){ float fscale = [sender scale]; if(fscale>1) { //[_remoteView setZoomInOpenGLView]; } else{ //[_remoteView setZoomOutOpenGLView]; } } } -(void)panEvent:(UIPanGestureRecognizer*)sender{ if(sender.state == UIGestureRecognizerStateBegan){ //[_remoteView setKeyStatusInOpenGLView:0];//KEY_DOWN } else if(sender.state == UIGestureRecognizerStateEnded){ // [_remoteView setKeyStatusInOpenGLView:1];//KEY_UP // [_remoteView setFlingInOpenGLViewX:[sender locationInView:_remoteView].x - self.swipeLastPos.x Y:[sender locationInView:_remoteView].y - self.swipeLastPos.y]; self.swipeLastPos = CGPointMake(0.0, 0.0); } else if(sender.state == UIGestureRecognizerStateChanged){ CGPoint point = [sender locationInView:_remoteView]; if(self.swipeLastPos.x != 0 && self.swipeLastPos.y != 0){ float x0, y0; x0 = point.x - self.swipeLastPos.x; y0 = point.y - self.swipeLastPos.y; //[_remoteView setMoveStepInOpenGLViewX:point.x Y:point.y dX:x0 dY:y0]; } self.swipeLastPos = point; } else if(sender.state == UIGestureRecognizerStateRecognized){ } } #pragma mark - 屏幕Autorotate -(BOOL)shouldAutorotate{ return YES; } #pragma mark - 屏幕旋转 -(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { if (toInterfaceOrientation == UIInterfaceOrientationPortrait) { } else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) { } else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) { } } #pragma mark 支持哪些方向 -(UIInterfaceOrientationMask)supportedInterfaceOrientations{ return UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskLandscapeRight; } -(void)quitFullController { //设置竖屏 [AppDelegate sharedDefault].canFullScreen = NO; static int isFullScreen = 1; // 3 == 全屏 1 == 竖屏 if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) { NSLog(@"self.interfaceOrientation%ld",(long)UIDeviceOrientationPortrait); //NSNumber *numb=[NSNumber numberWithInteger:UIDeviceOrientationPortrait]; //[[UIDevice currentDevice] performSelector:@selector(setOrientation:) // withObject:numb]; SEL selector = NSSelectorFromString(@"setOrientation:"); NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]]; [invocation setSelector:selector]; [invocation setTarget:[UIDevice currentDevice]]; NSLog(@"-%d-",isFullScreen); [invocation setArgument:&isFullScreen atIndex:2]; [invocation invoke]; } } @end