From 6177474381404b2d4a5bd7eb973039f40b369322 Mon Sep 17 00:00:00 2001 From: skufly Date: Thu, 30 Apr 2020 18:19:14 +0800 Subject: [PATCH] feat(demo): add sync player --- .../CicadaDemo.xcodeproj/project.pbxproj | 6 + .../CicadaDemo/Base.lproj/Main.storyboard | 52 ++++- .../controller/MutlPlayViewController.h | 19 ++ .../controller/MutlPlayViewController.m | 181 ++++++++++++++++++ .../CicadaCode/view/LeftScrollView.m | 4 + .../CicadaCode/view/LeftScrollView.xib | 53 ++--- .../CicadaDemo/CicadaCode/view/RightView.h | 3 +- .../CicadaDemo/CicadaCode/view/RightView.m | 66 +++++-- .../CicadaDemo/CicadaCode/view/RightView.xib | 98 +++++++++- 9 files changed, 430 insertions(+), 52 deletions(-) create mode 100644 platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/CicadaCode/controller/MutlPlayViewController.h create mode 100644 platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/CicadaCode/controller/MutlPlayViewController.m diff --git a/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo.xcodeproj/project.pbxproj b/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo.xcodeproj/project.pbxproj index c24c9153b..f266d9b0a 100644 --- a/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo.xcodeproj/project.pbxproj +++ b/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo.xcodeproj/project.pbxproj @@ -39,6 +39,7 @@ 9282EB4C22168F410032F3DF /* RightView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9282EB4B22168F410032F3DF /* RightView.m */; }; 9282EB4E22168F520032F3DF /* RightView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9282EB4D22168F520032F3DF /* RightView.xib */; }; 92B040CD222788C800FFA403 /* ConfigSetView.m in Sources */ = {isa = PBXBuildFile; fileRef = 92B040CC222788C800FFA403 /* ConfigSetView.m */; }; + 9E66A3B82451751600EBFDE4 /* MutlPlayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E66A3B72451751600EBFDE4 /* MutlPlayViewController.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -210,6 +211,8 @@ 9282EB4D22168F520032F3DF /* RightView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RightView.xib; sourceTree = ""; }; 92B040CB222788C800FFA403 /* ConfigSetView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ConfigSetView.h; sourceTree = ""; }; 92B040CC222788C800FFA403 /* ConfigSetView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ConfigSetView.m; sourceTree = ""; }; + 9E66A3B62451751600EBFDE4 /* MutlPlayViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MutlPlayViewController.h; sourceTree = ""; }; + 9E66A3B72451751600EBFDE4 /* MutlPlayViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MutlPlayViewController.m; sourceTree = ""; }; B97ADCAB94193F6589D4DA69 /* Pods-AliPlayerDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AliPlayerDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-AliPlayerDemo/Pods-AliPlayerDemo.debug.xcconfig"; sourceTree = ""; }; D622A9A7E2A93156E086DEFA /* Pods-CicadaDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CicadaDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-CicadaDemo/Pods-CicadaDemo.release.xcconfig"; sourceTree = ""; }; E9E63D7913B0D1BB3B3E4672 /* Pods-AliPlayerDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AliPlayerDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-AliPlayerDemo/Pods-AliPlayerDemo.release.xcconfig"; sourceTree = ""; }; @@ -342,6 +345,8 @@ 92560B8C21FED4E4001244CA /* AliPlayerViewController.m */, 9282EB3F221650010032F3DF /* RootViewController.h */, 9282EB40221650010032F3DF /* RootViewController.m */, + 9E66A3B62451751600EBFDE4 /* MutlPlayViewController.h */, + 9E66A3B72451751600EBFDE4 /* MutlPlayViewController.m */, ); path = controller; sourceTree = ""; @@ -605,6 +610,7 @@ 1F940555239DFA9F00F07BEE /* CicadaConfig+refresh.m in Sources */, 92560B8D21FED4E4001244CA /* AliPlayerViewController.m in Sources */, 92560B9321FEE28C001244CA /* AVBottomView.m in Sources */, + 9E66A3B82451751600EBFDE4 /* MutlPlayViewController.m in Sources */, 92560B8A21FEB2AE001244CA /* AVPBaseViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/Base.lproj/Main.storyboard b/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/Base.lproj/Main.storyboard index 50a9a32e9..8ceaee20c 100644 --- a/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/Base.lproj/Main.storyboard +++ b/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/Base.lproj/Main.storyboard @@ -1,8 +1,8 @@ - + - + @@ -679,7 +679,7 @@ - + @@ -700,7 +700,7 @@ - + @@ -755,7 +755,7 @@ - + @@ -776,7 +776,7 @@ - + @@ -797,7 +797,41 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -846,7 +880,7 @@ - + @@ -893,7 +927,7 @@ - + diff --git a/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/CicadaCode/controller/MutlPlayViewController.h b/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/CicadaCode/controller/MutlPlayViewController.h new file mode 100644 index 000000000..e52081606 --- /dev/null +++ b/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/CicadaCode/controller/MutlPlayViewController.h @@ -0,0 +1,19 @@ +// +// MutlPlayViewController.h +// CicadaDemo +// +// Created by ToT on 2020/4/23. +// Copyright © 2020 com.alibaba. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface MutlPlayViewController : NSViewController + +@property (nonatomic,strong)NSArray *urlSourceArray; + +@end + +NS_ASSUME_NONNULL_END diff --git a/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/CicadaCode/controller/MutlPlayViewController.m b/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/CicadaCode/controller/MutlPlayViewController.m new file mode 100644 index 000000000..4c96a8aae --- /dev/null +++ b/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/CicadaCode/controller/MutlPlayViewController.m @@ -0,0 +1,181 @@ +// +// MutlPlayViewController.m +// CicadaDemo +// +// Created by ToT on 2020/4/23. +// Copyright © 2020 com.alibaba. All rights reserved. +// + +#import "MutlPlayViewController.h" +#import "AppDelegate.h" +#import +#import + +@interface MutlPlayViewController () + +@property (nonatomic,strong)NSMutableArray *playViewArray; +@property (nonatomic,strong)NSMutableArray *playersArray; +@property (nonatomic,assign)BOOL isFullScreen; +@property (nonatomic,assign)NSView *fullScreenView; +@property (nonatomic,assign)NSInteger viewWidth; +@property (nonatomic,assign)NSInteger viewHeight; +@property (nonatomic,strong)NSView *horizontalLine; +@property (nonatomic,strong)NSView *verticalLine; + +@end + +@implementation MutlPlayViewController + +- (NSInteger)viewWidth { + AppDelegate *appdelegate = (AppDelegate *) [NSApplication sharedApplication].delegate; + NSWindow *window = appdelegate.mainWindow.window; + return window.frame.size.width; +} + +- (NSInteger)viewHeight { + AppDelegate *appdelegate = (AppDelegate *) [NSApplication sharedApplication].delegate; + NSWindow *window = appdelegate.mainWindow.window; + return window.frame.size.height-22; +} + +- (void)loadView { + NSView *view = [[NSView alloc]initWithFrame:NSMakeRect(0, 0, self.viewWidth, self.viewHeight)]; + self.view = view; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do view setup here. +} + +- (void)viewDidAppear { + [super viewDidAppear]; + + self.horizontalLine = [[NSView alloc]init]; + self.horizontalLine.wantsLayer = true; + self.horizontalLine.layer.backgroundColor = [NSColor redColor].CGColor; + [self.horizontalLine setNeedsDisplay:YES]; + [self.view addSubview:self.horizontalLine]; + + self.verticalLine = [[NSView alloc]init]; + self.verticalLine.wantsLayer = true; + self.verticalLine.layer.backgroundColor = [NSColor redColor].CGColor; + [self.verticalLine setNeedsDisplay:YES]; + [self.view addSubview:self.verticalLine]; + + self.playersArray = [NSMutableArray array]; + self.playViewArray = [NSMutableArray array]; + for (int i = 0; i<4; i++) { + NSView *view = [[NSView alloc]init]; + view.wantsLayer = true; + [view setNeedsDisplay:YES]; + + [self.view addSubview:view]; + [self.playViewArray addObject:view]; + } + + NSPressGestureRecognizer *tap = [[NSPressGestureRecognizer alloc]initWithTarget:self action:@selector(viewTouches:)]; + tap.minimumPressDuration = 0.01; + [self.view addGestureRecognizer:tap]; + + [self displayPrivateViews]; + + if (self.urlSourceArray.count == 4) { + for (int i = 0; i<4; i++) { + CicadaPlayer *player = nil; + if (0 == i) { + player = [[CicadaSyncPlayerServer alloc] init]; + } else { + player = [[CicadaSyncPlayerClient alloc]init]; + } + + [player setUrlSource:self.urlSourceArray[i]]; + player.delegate = self; + player.playerView = self.playViewArray[i]; + [player prepare]; + [self.playersArray addObject:player]; + } + } +} + +- (void)viewTouches:(NSPressGestureRecognizer *)recognizer { + if (recognizer.state == NSGestureRecognizerStateBegan) { + self.isFullScreen = !self.isFullScreen; + if (self.isFullScreen) { + NSPoint point = [recognizer locationInView:self.view]; + NSInteger viewIndex = 0; + if (point.y > self.viewHeight/2) { + viewIndex = viewIndex + 2; + } + if (point.x > self.viewWidth/2) { + viewIndex = viewIndex + 1; + } + NSView *view = self.playViewArray[viewIndex]; + [view removeFromSuperview]; + view.frame = self.view.bounds; + [self.view addSubview:view]; + [view setNeedsDisplay:YES]; + self.fullScreenView = view; + } + [self displayPrivateViews]; + } +} + +- (void)viewDidDisappear { + [super viewDidDisappear]; + + for (CicadaPlayer *player in self.playersArray) { + [player stop]; + [player destroy]; + } + [self.playersArray removeAllObjects]; +} + +- (void)viewDidLayout { + [super viewDidLayout]; + + [self displayPrivateViews]; +} + +- (void)displayPrivateViews { + self.view.frame = NSMakeRect(0, 0, self.viewWidth, self.viewHeight); + [self.view setNeedsDisplay:YES]; + if (self.isFullScreen) { + self.fullScreenView.frame = self.view.bounds; + [self.fullScreenView setNeedsDisplay:YES]; + }else { + for (int i = 0; i<4; i++) { + NSView *view = self.playViewArray[i]; + view.frame = NSMakeRect((i%2)*(self.viewWidth/2+1), (i/2)*(self.viewHeight/2+1), (self.viewWidth-2)/2, (self.viewHeight-2)/2); + [view setNeedsDisplay:YES]; + } + } + self.horizontalLine.frame = NSMakeRect(0, self.viewHeight/2-1, self.viewWidth, 2); + [self.horizontalLine setNeedsDisplay:YES]; + self.verticalLine.frame = NSMakeRect(self.viewWidth/2-1, 0, 2, self.viewHeight); + [self.verticalLine setNeedsDisplay:YES]; +} + +#pragma mark CicadaDelegate + +- (void)onTrackReady:(CicadaPlayer *)player info:(NSArray *)info { + //选择不同清晰度播放 +// NSMutableArray * videoTracksArray = [NSMutableArray array]; +// for (int i=0; i - + - + @@ -10,11 +10,11 @@ - + - - - - - - - - - - - - - - + + + + + + + + + + + + - + diff --git a/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/CicadaCode/view/RightView.h b/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/CicadaCode/view/RightView.h index f578da891..d4b85e482 100644 --- a/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/CicadaCode/view/RightView.h +++ b/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/CicadaCode/view/RightView.h @@ -14,7 +14,8 @@ typedef enum : NSUInteger { inputURL, collectionView, urlLinks, - localURL + localURL, + MultPlayer } ViewType; @interface RightView : NSView diff --git a/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/CicadaCode/view/RightView.m b/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/CicadaCode/view/RightView.m index f034d3109..510456ee2 100644 --- a/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/CicadaCode/view/RightView.m +++ b/platform/Apple/demo/macOS/CicadaDemo/CicadaDemo/CicadaCode/view/RightView.m @@ -10,6 +10,7 @@ #import "AliPlayerViewController.h" #import "AppDelegate.h" #import "CicadaSourceChooserModel.h" +#import "MutlPlayViewController.h" @interface RightView() @@ -23,6 +24,13 @@ @interface RightView() + + + + @@ -24,7 +28,7 @@ - + @@ -38,8 +42,9 @@ - + + http://livetest.aliyunlive.com/5dbabcec4df04d20b2707369c1598aaa/7613472a0dd34731b1a1457ed5469b3f.m3u8?auth_key=1593694564-0-0-e6af5fdea33414eb065c290e1979d87d @@ -51,7 +56,7 @@ - + @@ -227,14 +232,14 @@ - + - + @@ -295,7 +300,7 @@ - + @@ -352,5 +357,86 @@ + + + + + + + + + + + + + http://livetest.aliyunlive.com/5dbabcec4df04d20b2707369c1598aaa/extract/video/3a6ae80c68cd4805b6e24ada50708082-video-hd.m3u8?auth_key=1593694564-0-0-1c412da25ad73db7a3ba623e8f8548f1 + + + + + + + + + + + + + http://livetest.aliyunlive.com/5dbabcec4df04d20b2707369c1598aaa/extract/video/1f11aa5090424f21b8a2f50a6e4db449-video-sd.m3u8?auth_key=1593694564-0-0-10c46455d6cae85891690f48cbdbf223 + + + + + + + + + + + + + http://livetest.aliyunlive.com/5dbabcec4df04d20b2707369c1598aaa/extract/video/7739b020b46741f7bf37dc571ddfa3d3-video-ld.m3u8?auth_key=1593694564-0-0-74cf141390f43ded03612b59b2a83627 + + + + + + + + + + + + + http://livetest.aliyunlive.com/5dbabcec4df04d20b2707369c1598aaa/extract/video/3a030719679b47a8bc9acc521ca4978b-video-fd.m3u8?auth_key=1593694564-0-0-40bb31b261b300be79f695e0724815ea + + + + + + + + + + + + + + + + + + + +