Commit 701e7fa479629386035f13087fc3afaadf14450e

Authored by zhangxiaowen
1 parent b3e3deb0

no message

Example/CNLivePlayer.xcodeproj/project.pbxproj
@@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
7 objects = { 7 objects = {
8 8
9 /* Begin PBXBuildFile section */ 9 /* Begin PBXBuildFile section */
  10 + 081E9D3F236C112D0031F1EA /* CNLiveStreamerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 081E9D3D236C112D0031F1EA /* CNLiveStreamerController.m */; };
10 086413BC22EAE229008713D3 /* VideoToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 086413BB22EAE229008713D3 /* VideoToolbox.framework */; }; 11 086413BC22EAE229008713D3 /* VideoToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 086413BB22EAE229008713D3 /* VideoToolbox.framework */; };
11 086413BE22EAE23E008713D3 /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 086413BD22EAE23E008713D3 /* libbz2.tbd */; }; 12 086413BE22EAE23E008713D3 /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 086413BD22EAE23E008713D3 /* libbz2.tbd */; };
12 086413C022EAE24F008713D3 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 086413BF22EAE24F008713D3 /* libz.tbd */; }; 13 086413C022EAE24F008713D3 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 086413BF22EAE24F008713D3 /* libz.tbd */; };
@@ -44,6 +45,8 @@ @@ -44,6 +45,8 @@
44 /* End PBXContainerItemProxy section */ 45 /* End PBXContainerItemProxy section */
45 46
46 /* Begin PBXFileReference section */ 47 /* Begin PBXFileReference section */
  48 + 081E9D3D236C112D0031F1EA /* CNLiveStreamerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLiveStreamerController.m; sourceTree = "<group>"; };
  49 + 081E9D3E236C112D0031F1EA /* CNLiveStreamerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNLiveStreamerController.h; sourceTree = "<group>"; };
47 086413BB22EAE229008713D3 /* VideoToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VideoToolbox.framework; path = System/Library/Frameworks/VideoToolbox.framework; sourceTree = SDKROOT; }; 50 086413BB22EAE229008713D3 /* VideoToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VideoToolbox.framework; path = System/Library/Frameworks/VideoToolbox.framework; sourceTree = SDKROOT; };
48 086413BD22EAE23E008713D3 /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; }; 51 086413BD22EAE23E008713D3 /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; };
49 086413BF22EAE24F008713D3 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; 52 086413BF22EAE24F008713D3 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
@@ -127,6 +130,15 @@ @@ -127,6 +130,15 @@
127 path = Pods; 130 path = Pods;
128 sourceTree = "<group>"; 131 sourceTree = "<group>";
129 }; 132 };
  133 + 081E9D3A236C10D20031F1EA /* Streamer */ = {
  134 + isa = PBXGroup;
  135 + children = (
  136 + 081E9D3E236C112D0031F1EA /* CNLiveStreamerController.h */,
  137 + 081E9D3D236C112D0031F1EA /* CNLiveStreamerController.m */,
  138 + );
  139 + path = Streamer;
  140 + sourceTree = "<group>";
  141 + };
130 08740E5F230E8C6500B5D28D /* Player */ = { 142 08740E5F230E8C6500B5D28D /* Player */ = {
131 isa = PBXGroup; 143 isa = PBXGroup;
132 children = ( 144 children = (
@@ -184,6 +196,7 @@ @@ -184,6 +196,7 @@
184 086ECFB4231A564900598D4E /* CNLiveBaseController.m */, 196 086ECFB4231A564900598D4E /* CNLiveBaseController.m */,
185 6003F5A5195388D20070C39A /* CNLiveViewController.h */, 197 6003F5A5195388D20070C39A /* CNLiveViewController.h */,
186 6003F5A6195388D20070C39A /* CNLiveViewController.m */, 198 6003F5A6195388D20070C39A /* CNLiveViewController.m */,
  199 + 081E9D3A236C10D20031F1EA /* Streamer */,
187 08740E5F230E8C6500B5D28D /* Player */, 200 08740E5F230E8C6500B5D28D /* Player */,
188 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */, 201 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */,
189 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */, 202 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */,
@@ -430,6 +443,7 @@ @@ -430,6 +443,7 @@
430 buildActionMask = 2147483647; 443 buildActionMask = 2147483647;
431 files = ( 444 files = (
432 6003F59E195388D20070C39A /* CNLiveAppDelegate.m in Sources */, 445 6003F59E195388D20070C39A /* CNLiveAppDelegate.m in Sources */,
  446 + 081E9D3F236C112D0031F1EA /* CNLiveStreamerController.m in Sources */,
433 086ECFB5231A564900598D4E /* CNLiveBaseController.m in Sources */, 447 086ECFB5231A564900598D4E /* CNLiveBaseController.m in Sources */,
434 6003F5A7195388D20070C39A /* CNLiveViewController.m in Sources */, 448 6003F5A7195388D20070C39A /* CNLiveViewController.m in Sources */,
435 08740E62230E8C6500B5D28D /* CNLivePlayerController.m in Sources */, 449 08740E62230E8C6500B5D28D /* CNLivePlayerController.m in Sources */,
Example/CNLivePlayer/CNLiveViewController.m
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 8
9 #import "CNLiveViewController.h" 9 #import "CNLiveViewController.h"
10 #import "CNLivePlayerController.h" 10 #import "CNLivePlayerController.h"
11 - 11 +#import "CNLiveStreamerController.h"
12 12
13 @interface CNLiveViewController () 13 @interface CNLiveViewController ()
14 14
@@ -52,7 +52,8 @@ @@ -52,7 +52,8 @@
52 } 52 }
53 53
54 - (void)btnDidClicked2{ 54 - (void)btnDidClicked2{
55 - 55 + [self presentViewController:[CNLiveStreamerController new] animated:YES completion:nil];
  56 +
56 } 57 }
57 58
58 59
Example/CNLivePlayer/Streamer/CNLiveStreamerController.h 0 → 100644
  1 +//
  2 +// CNLiveStreamerController.h
  3 +// CNLivePlayer_Example
  4 +//
  5 +// Created by CNLive-zxw on 2019/8/17.
  6 +// Copyright © 2019 153993236@qq.com. All rights reserved.
  7 +//
  8 +
  9 +#import "CNLiveBaseController.h"
  10 +
  11 +NS_ASSUME_NONNULL_BEGIN
  12 +
  13 +@interface CNLiveStreamerController : CNLiveBaseController
  14 +
  15 +@end
  16 +
  17 +NS_ASSUME_NONNULL_END
Example/CNLivePlayer/Streamer/CNLiveStreamerController.m 0 → 100644
  1 +//
  2 +// CNLiveStreamerController.m
  3 +// CNLivePlayer_Example
  4 +//
  5 +// Created by CNLive-zCNLive on 2019/8/17.
  6 +// Copyright © 2019 153993236@qq.com. All rights reserved.
  7 +//
  8 +
  9 +#import "CNLiveStreamerController.h"
  10 +#import "CNLivePlayer.h"
  11 +
  12 +@interface CNLiveStreamerController ()<CNLivePlayerDelegate>
  13 +@property (nonatomic, strong) CNLivePlayer *player;
  14 +@property (nonatomic, strong) UILabel *state;
  15 +
  16 +@end
  17 +
  18 +@implementation CNLiveStreamerController
  19 +
  20 +- (void)viewDidLoad {
  21 + [super viewDidLoad];
  22 + self.view.backgroundColor = [UIColor whiteColor];
  23 +
  24 + // 82_c8ff347048414b7295cef882f8361073 杨丞琳
  25 + // 223_9855888ddc68402ca738bf302e535805 汤唯
  26 + // 1066_716fabeaafb64236b60ecf74167c5c96 音频
  27 +
  28 +// http://tjzghuajiao.vods2.cnlive.com/1066/vod/2019/0517/1066_716fabeaafb642K36b60ecf74167c5c96/ff8080816a6816ca016ac3bee98b5fa7_128.mp4
  29 +// self.player = [[CNLivePlayer alloc]initWithUrl:@"http://tjzghuajiao.vods2.cnlive.com/1066/vod/2019/0517/1066_716fabeaafb64236b60ecf74167c5c96/ff8080816a6816ca016ac3bee98b5fa7_128.mp4"];
  30 +
  31 + self.player = [[CNLivePlayer alloc]initVodPlayWithVideoId:@"223_9855888ddc68402ca738bf302e535805"];
  32 +
  33 +// self.player = [[CNLivePlayer alloc]initVodPlayWithVideoId:@"223_9855888ddc68402ca738bf302e535805" success:^{
  34 +//
  35 +// } failure:^(NSError * _Nonnull error) {
  36 +//
  37 +// }];
  38 + _player.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.width*9/16.0);
  39 + _player.backgroundPlayEnable = YES;
  40 + _player.delegate = self;
  41 + [self.view addSubview:self.player.view];
  42 + [_player play];
  43 +
  44 +
  45 + UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeCustom];
  46 + btn1.frame = CGRectMake(0, 0, 100, 50);
  47 + btn1.center = CGPointMake(self.view.center.x, self.view.center.y-100);
  48 + btn1.backgroundColor = [UIColor redColor];
  49 + [btn1 setTitle:@"下一个" forState:UIControlStateNormal];
  50 + [btn1 setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  51 + [btn1 addTarget:self action:@selector(btnDidClicked1) forControlEvents:UIControlEventTouchUpInside];
  52 + [self.view addSubview:btn1];
  53 +
  54 + UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeCustom];
  55 + btn2.frame = CGRectMake(0, 0, 100, 50);
  56 + btn2.center = CGPointMake(self.view.center.x-100, self.view.center.y+100);
  57 + btn2.backgroundColor = [UIColor redColor];
  58 + [btn2 setTitle:@"切换码率1" forState:UIControlStateNormal];
  59 + [btn2 setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  60 + [btn2 addTarget:self action:@selector(btnDidClicked2) forControlEvents:UIControlEventTouchUpInside];
  61 + [self.view addSubview:btn2];
  62 +
  63 + UIButton *btn4 = [UIButton buttonWithType:UIButtonTypeCustom];
  64 + btn4.frame = CGRectMake(0, 0, 100, 50);
  65 + btn4.center = CGPointMake(self.view.center.x+100, self.view.center.y+100);
  66 + btn4.backgroundColor = [UIColor redColor];
  67 + [btn4 setTitle:@"切换码率2" forState:UIControlStateNormal];
  68 + [btn4 setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  69 + [btn4 addTarget:self action:@selector(btnDidClicked4) forControlEvents:UIControlEventTouchUpInside];
  70 + [self.view addSubview:btn4];
  71 +
  72 + UIButton *btn3 = [UIButton buttonWithType:UIButtonTypeCustom];
  73 + btn3.frame = CGRectMake(0, 0, 100, 50);
  74 + btn3.center = CGPointMake(self.view.center.x, self.view.center.y+200);
  75 + btn3.backgroundColor = [UIColor redColor];
  76 + [btn3 setTitle:@"返回" forState:UIControlStateNormal];
  77 + [btn3 setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  78 + [btn3 addTarget:self action:@selector(btnDidClicked3) forControlEvents:UIControlEventTouchUpInside];
  79 + [self.view addSubview:btn3];
  80 +
  81 + self.state = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 200, 20)];
  82 + self.state.backgroundColor = [UIColor redColor];
  83 + self.state.center = CGPointMake(self.view.center.x, self.view.center.y+300);
  84 + [self.view addSubview:self.state];
  85 +
  86 +}
  87 +
  88 +- (void)dealloc{
  89 +
  90 +}
  91 +- (void)btnDidClicked1{
  92 + [_player switchVideo:@"82_c8ff347048414b7295cef882f8361073" type:CNLivePlayerDataTypeVod];
  93 + [_player play];
  94 +
  95 +}
  96 +- (void)btnDidClicked2{
  97 + self.state.text = @"切换中";
  98 + [_player switchRate:kCNLiveClarity_1080P];
  99 +
  100 +}
  101 +
  102 +- (void)btnDidClicked4{
  103 + self.state.text = @"切换中";
  104 + [_player switchRate:kCNLiveClarity_360P];
  105 +}
  106 +- (void)btnDidClicked3{
  107 + [self dismissViewControllerAnimated:YES completion:nil];
  108 +
  109 +}
  110 +/*
  111 +#pragma mark - Navigation
  112 +
  113 +// In a storyboard-based application, you will often want to do a little preparation before navigation
  114 +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  115 + // Get the new view controller using [segue destinationViewController].
  116 + // Pass the selected object to the new view controller.
  117 +}
  118 +*/
  119 +- (void)player:(nonnull CNLivePlayer *)player statusDidChange:(CNLivePlayerStatus)state{
  120 + if(state == CNLivePlayerStatusOpen){
  121 +
  122 + }
  123 +}
  124 +
  125 +- (void)player:(nonnull CNLivePlayer *)player seekToCompleted:(BOOL)isCompleted{
  126 +
  127 +}
  128 +- (void)player:(nonnull CNLivePlayer *)player switchRateCompleted:(BOOL)isCompleted{
  129 + self.state.text = isCompleted?@"切换完成":@"切换失败";
  130 +}
  131 +- (void)player:(nonnull CNLivePlayer *)player stoppedWithError:(nullable NSError *)error{
  132 +
  133 +}
  134 +
  135 +
  136 +@end
  137 +