ifish/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/P2PPlayingbackVC.m

888 lines
32 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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