Commit e46f2f474fa471ae34a23f48aa0ff9591df104bc

Authored by 雷浩杰
1 parent 2310ca84

no message

CNLivePlayerSDKTest/CNLivePlayerSDKTest/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -2,6 +2,16 @@ @@ -2,6 +2,16 @@
2 "images" : [ 2 "images" : [
3 { 3 {
4 "idiom" : "iphone", 4 "idiom" : "iphone",
  5 + "size" : "20x20",
  6 + "scale" : "2x"
  7 + },
  8 + {
  9 + "idiom" : "iphone",
  10 + "size" : "20x20",
  11 + "scale" : "3x"
  12 + },
  13 + {
  14 + "idiom" : "iphone",
5 "size" : "29x29", 15 "size" : "29x29",
6 "scale" : "2x" 16 "scale" : "2x"
7 }, 17 },
CNLivePlayerSDKTest/CNLivePlayerSDKTest/Barrage/BarrageViewController.m
@@ -29,6 +29,7 @@ @@ -29,6 +29,7 @@
29 [_barrage setAnimationDuration:4]; 29 [_barrage setAnimationDuration:4];
30 [_barrage setHorizontalSpace:10]; 30 [_barrage setHorizontalSpace:10];
31 [_barrage setVerticalSpace:5]; 31 [_barrage setVerticalSpace:5];
  32 +
32 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 20)]; 33 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 20)];
33 label.backgroundColor = [UIColor colorWithWhite:0.5 alpha:0.5]; 34 label.backgroundColor = [UIColor colorWithWhite:0.5 alpha:0.5];
34 label.font = [UIFont systemFontOfSize:13]; 35 label.font = [UIFont systemFontOfSize:13];
@@ -40,49 +41,51 @@ @@ -40,49 +41,51 @@
40 [_barrage setBarrageLabelStyle:label]; 41 [_barrage setBarrageLabelStyle:label];
41 [self.view addSubview:_barrage]; 42 [self.view addSubview:_barrage];
42 43
43 - UIButton *startbutton = [UIButton buttonWithType:UIButtonTypeSystem];  
44 - [startbutton setTitle:@"开始" forState:UIControlStateNormal];  
45 - startbutton.frame = CGRectMake(0, 20, 50, 50);  
46 - [self.view addSubview:startbutton];  
47 - [startbutton addTarget:self action:@selector(startbutton) forControlEvents:UIControlEventTouchUpInside];  
48 -  
49 - UIButton *stopbutton = [UIButton buttonWithType:UIButtonTypeSystem];  
50 - [stopbutton setTitle:@"停止" forState:UIControlStateNormal];  
51 - stopbutton.frame = CGRectMake(100, 20, 50, 50);  
52 - [self.view addSubview:stopbutton];  
53 - [stopbutton addTarget:self action:@selector(stopbutton) forControlEvents:UIControlEventTouchUpInside];  
54 -  
55 - UIButton *exitbutton = [UIButton buttonWithType:UIButtonTypeSystem];  
56 - [exitbutton setTitle:@"退出" forState:UIControlStateNormal];  
57 - exitbutton.frame = CGRectMake(200, 20, 50, 50);  
58 - [self.view addSubview:exitbutton];  
59 - [exitbutton addTarget:self action:@selector(exitbutton) forControlEvents:UIControlEventTouchUpInside]; 44 + NSArray *buttonTitles = @[@"开始", @"停止", @"退出"];
  45 + for (int i = 0; i < 3; i++) {
  46 + NSString *title = buttonTitles[i];
  47 +
  48 + UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
  49 + button.tag = 100+i;
  50 + button.frame = CGRectMake((CGRectGetWidth(self.view.frame)-240)/4*(i+1)+80*i, 30, 80, 30);
  51 + [button setTitle:title forState:UIControlStateNormal];
  52 + [button setTitleColor:[UIColor colorWithRed:23/255.0 green:110/255.0 blue:254/255.0 alpha:1] forState:UIControlStateNormal];
  53 + [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
  54 + button.layer.cornerRadius = 10;
  55 + button.layer.masksToBounds = YES;
  56 + button.layer.borderColor = [UIColor blackColor].CGColor;
  57 + button.layer.borderWidth = 1;
  58 + [self.view addSubview:button];
  59 + }
60 60
61 - UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 80, 300, 30)];  
62 - textField.backgroundColor = [UIColor grayColor]; 61 + UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake((self.view.frame.size.width-300)/2, 80, 300, 30)];
63 [self.view addSubview:textField]; 62 [self.view addSubview:textField];
64 textField.delegate = self; 63 textField.delegate = self;
  64 + textField.borderStyle = UITextBorderStyleRoundedRect;
  65 + textField.returnKeyType = UIReturnKeyDone;
  66 + textField.clearButtonMode = UITextFieldViewModeAlways;
65 67
66 } 68 }
67 69
68 -- (void)startbutton  
69 -{  
70 - [_barrage startAnimation];  
71 -}  
72 -  
73 -- (void)stopbutton  
74 -{  
75 - [_barrage stopAnimation];  
76 -}  
77 -  
78 -- (void)exitbutton 70 +- (void)buttonAction:(UIButton *)button
79 { 71 {
80 - [_barrage stopAnimation];  
81 - [self dismissViewControllerAnimated:YES completion:NULL]; 72 + switch (button.tag) {
  73 + case 100:
  74 + [_barrage startAnimation];
  75 + break;
  76 + case 101:
  77 + [_barrage stopAnimation];
  78 + break;
  79 + case 102:
  80 + [_barrage stopAnimation];
  81 + [self dismissViewControllerAnimated:YES completion:NULL];
  82 + break;
  83 + }
82 } 84 }
83 85
84 - (BOOL)textFieldShouldReturn:(UITextField *)textField 86 - (BOOL)textFieldShouldReturn:(UITextField *)textField
85 { 87 {
  88 + [textField resignFirstResponder];
86 [_barrage showBarrageContent:textField.text]; 89 [_barrage showBarrageContent:textField.text];
87 return YES; 90 return YES;
88 } 91 }
CNLivePlayerSDKTest/CNLivePlayerSDKTest/Base.lproj/Main.storyboard
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>  
2 -<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6211" systemVersion="14A298i" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r"> 1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11201" systemVersion="16B2555" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="EpT-wO-Zba">
3 <dependencies> 3 <dependencies>
4 - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6204"/> 4 + <deployment identifier="iOS"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11161"/>
  6 + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
5 </dependencies> 7 </dependencies>
6 <scenes> 8 <scenes>
7 <!--View Controller--> 9 <!--View Controller-->
8 <scene sceneID="tne-QT-ifu"> 10 <scene sceneID="tne-QT-ifu">
9 <objects> 11 <objects>
10 - <viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="" sceneMemberID="viewController"> 12 + <viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController">
11 <layoutGuides> 13 <layoutGuides>
12 <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/> 14 <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
13 <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/> 15 <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
14 </layoutGuides> 16 </layoutGuides>
15 <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC"> 17 <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
16 - <rect key="frame" x="0.0" y="0.0" width="600" height="600"/> 18 + <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
17 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> 19 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
18 - <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> 20 + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
19 </view> 21 </view>
  22 + <navigationItem key="navigationItem" id="MFb-0Q-P6h"/>
20 </viewController> 23 </viewController>
21 <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/> 24 <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
22 </objects> 25 </objects>
  26 + <point key="canvasLocation" x="1026.0869565217392" y="122.28260869565219"/>
  27 + </scene>
  28 + <!--Navigation Controller-->
  29 + <scene sceneID="U7f-Cl-XXM">
  30 + <objects>
  31 + <navigationController automaticallyAdjustsScrollViewInsets="NO" id="EpT-wO-Zba" sceneMemberID="viewController">
  32 + <toolbarItems/>
  33 + <navigationBar key="navigationBar" contentMode="scaleToFill" id="xvY-jj-T48">
  34 + <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
  35 + <autoresizingMask key="autoresizingMask"/>
  36 + </navigationBar>
  37 + <nil name="viewControllers"/>
  38 + <connections>
  39 + <segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="LQa-6s-xqx"/>
  40 + </connections>
  41 + </navigationController>
  42 + <placeholder placeholderIdentifier="IBFirstResponder" id="tnU-YZ-5Ay" userLabel="First Responder" sceneMemberID="firstResponder"/>
  43 + </objects>
  44 + <point key="canvasLocation" x="134.78260869565219" y="771.19565217391312"/>
23 </scene> 45 </scene>
24 </scenes> 46 </scenes>
25 </document> 47 </document>
CNLivePlayerSDKTest/CNLivePlayerSDKTest/Player/CNLiveViewController.m
@@ -38,10 +38,13 @@ @@ -38,10 +38,13 @@
38 //获取SDK版本号 38 //获取SDK版本号
39 NSLog(@">>>>>>>>>>>>%@", [CNLiveMoviePlayerController getVersion]); 39 NSLog(@">>>>>>>>>>>>%@", [CNLiveMoviePlayerController getVersion]);
40 40
  41 + //测试vId
  42 + //a9c5f9a2d6114bf98f2aff89a55d4f98
  43 + //0e12b70817c440509d88f67d4e975fe0
41 //点播播放 44 //点播播放
42 _player = [[CNLiveMoviePlayerController alloc] initVodPlayWithAppId:@"60_irg1rhs308" 45 _player = [[CNLiveMoviePlayerController alloc] initVodPlayWithAppId:@"60_irg1rhs308"
43 appKey:@"4e7a37b27a717a9e9b0a7aea4620ee55ea61fbf923bf46" 46 appKey:@"4e7a37b27a717a9e9b0a7aea4620ee55ea61fbf923bf46"
44 - vId:@"aaa123" 47 + vId:@"0e12b70817c440509d88f67d4e975fe0"
45 authSuccess:^{ 48 authSuccess:^{
46 49
47 _player.shouldUseHWCodec = YES; 50 _player.shouldUseHWCodec = YES;
@@ -103,10 +106,15 @@ @@ -103,10 +106,15 @@
103 [_durationLabel setText:[NSString stringWithFormat:@"00:00:00"]]; 106 [_durationLabel setText:[NSString stringWithFormat:@"00:00:00"]];
104 [self.view addSubview:_durationLabel]; 107 [self.view addSubview:_durationLabel];
105 108
106 - UIButton *exitBtn = [UIButton buttonWithType:UIButtonTypeSystem];  
107 - exitBtn.frame = CGRectMake(0, 350, self.view.frame.size.width, 50); 109 + UIButton *exitBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  110 + exitBtn.frame = CGRectMake((CGRectGetWidth(self.view.frame)-80)/2, 400, 80, 30);
108 [exitBtn setTitle:@"退出" forState:UIControlStateNormal]; 111 [exitBtn setTitle:@"退出" forState:UIControlStateNormal];
  112 + [exitBtn setTitleColor:[UIColor colorWithRed:23/255.0 green:110/255.0 blue:254/255.0 alpha:1] forState:UIControlStateNormal];
109 [exitBtn addTarget:self action:@selector(exitBtnAction) forControlEvents:UIControlEventTouchUpInside]; 113 [exitBtn addTarget:self action:@selector(exitBtnAction) forControlEvents:UIControlEventTouchUpInside];
  114 + exitBtn.layer.cornerRadius = 5;
  115 + exitBtn.layer.masksToBounds = YES;
  116 + exitBtn.layer.borderColor = [UIColor blackColor].CGColor;
  117 + exitBtn.layer.borderWidth = 1;
110 [self.view addSubview:exitBtn]; 118 [self.view addSubview:exitBtn];
111 } 119 }
112 120
CNLivePlayerSDKTest/CNLivePlayerSDKTest/Player/NormalViewController.h
@@ -10,4 +10,6 @@ @@ -10,4 +10,6 @@
10 10
11 @interface NormalViewController : UIViewController 11 @interface NormalViewController : UIViewController
12 12
  13 +@property (nonatomic, strong)NSString *videoUrlString;
  14 +
13 @end 15 @end
CNLivePlayerSDKTest/CNLivePlayerSDKTest/Player/NormalViewController.m
@@ -32,7 +32,7 @@ @@ -32,7 +32,7 @@
32 32
33 [self installMovieNotificationObservers]; 33 [self installMovieNotificationObservers];
34 34
35 - _player = [[CNLiveMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://wideo00.cnlive.com/video/data1/2016/0808/140935/800/e3554e4c5de34a8d9a03c534849cd2e4_140935_800.m3u8"]]; 35 + _player = [[CNLiveMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:_videoUrlString]];
36 _player.shouldUseHWCodec = YES; 36 _player.shouldUseHWCodec = YES;
37 _player.view.frame = CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.width*9/16); 37 _player.view.frame = CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.width*9/16);
38 _player.shouldAutoplay = YES; 38 _player.shouldAutoplay = YES;
@@ -72,10 +72,15 @@ @@ -72,10 +72,15 @@
72 [_durationLabel setText:[NSString stringWithFormat:@"00:00:00"]]; 72 [_durationLabel setText:[NSString stringWithFormat:@"00:00:00"]];
73 [self.view addSubview:_durationLabel]; 73 [self.view addSubview:_durationLabel];
74 74
75 - UIButton *exitBtn = [UIButton buttonWithType:UIButtonTypeSystem];  
76 - exitBtn.frame = CGRectMake(0, 350, self.view.frame.size.width, 50); 75 + UIButton *exitBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  76 + exitBtn.frame = CGRectMake((CGRectGetWidth(self.view.frame)-80)/2, 400, 80, 30);
77 [exitBtn setTitle:@"退出" forState:UIControlStateNormal]; 77 [exitBtn setTitle:@"退出" forState:UIControlStateNormal];
  78 + [exitBtn setTitleColor:[UIColor colorWithRed:23/255.0 green:110/255.0 blue:254/255.0 alpha:1] forState:UIControlStateNormal];
78 [exitBtn addTarget:self action:@selector(exitBtnAction) forControlEvents:UIControlEventTouchUpInside]; 79 [exitBtn addTarget:self action:@selector(exitBtnAction) forControlEvents:UIControlEventTouchUpInside];
  80 + exitBtn.layer.cornerRadius = 5;
  81 + exitBtn.layer.masksToBounds = YES;
  82 + exitBtn.layer.borderColor = [UIColor blackColor].CGColor;
  83 + exitBtn.layer.borderWidth = 1;
79 [self.view addSubview:exitBtn]; 84 [self.view addSubview:exitBtn];
80 } 85 }
81 86
CNLivePlayerSDKTest/CNLivePlayerSDKTest/Player/PlayerViewController.m
@@ -10,7 +10,11 @@ @@ -10,7 +10,11 @@
10 #import "CNLiveViewController.h" 10 #import "CNLiveViewController.h"
11 #import "NormalViewController.h" 11 #import "NormalViewController.h"
12 12
13 -@interface PlayerViewController () 13 +@interface PlayerViewController ()<UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource>
  14 +{
  15 + UITextField *_textField;
  16 + UITableView *_historyTableView;
  17 +}
14 18
15 @end 19 @end
16 20
@@ -21,22 +25,61 @@ @@ -21,22 +25,61 @@
21 25
22 self.view.backgroundColor = [UIColor whiteColor]; 26 self.view.backgroundColor = [UIColor whiteColor];
23 27
24 - UIButton *cnlivePlayerBtn = [UIButton buttonWithType:UIButtonTypeSystem];  
25 - cnlivePlayerBtn.frame = CGRectMake(0, 50, self.view.frame.size.width, 50); 28 + UIButton *cnlivePlayerBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  29 + cnlivePlayerBtn.frame = CGRectMake((CGRectGetWidth(self.view.frame)-150)/2, 50, 150, 50);
26 [cnlivePlayerBtn setTitle:@"视讯云内容播放" forState:UIControlStateNormal]; 30 [cnlivePlayerBtn setTitle:@"视讯云内容播放" forState:UIControlStateNormal];
  31 + [cnlivePlayerBtn setTitleColor:[UIColor colorWithRed:23/255.0 green:110/255.0 blue:254/255.0 alpha:1] forState:UIControlStateNormal];
27 [cnlivePlayerBtn addTarget:self action:@selector(cnlivePlayerBtnAction) forControlEvents:UIControlEventTouchUpInside]; 32 [cnlivePlayerBtn addTarget:self action:@selector(cnlivePlayerBtnAction) forControlEvents:UIControlEventTouchUpInside];
  33 + cnlivePlayerBtn.layer.cornerRadius = 10;
  34 + cnlivePlayerBtn.layer.masksToBounds = YES;
  35 + cnlivePlayerBtn.layer.borderColor = [UIColor blackColor].CGColor;
  36 + cnlivePlayerBtn.layer.borderWidth = 1;
28 [self.view addSubview:cnlivePlayerBtn]; 37 [self.view addSubview:cnlivePlayerBtn];
29 38
30 - UIButton *normalPlayerBtn = [UIButton buttonWithType:UIButtonTypeSystem];  
31 - normalPlayerBtn.frame = CGRectMake(0, 150, self.view.frame.size.width, 50); 39 + UIButton *normalPlayerBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  40 + normalPlayerBtn.frame = CGRectMake((CGRectGetWidth(self.view.frame)-150)/2, 130, 150, 50);
32 [normalPlayerBtn setTitle:@"普通播放" forState:UIControlStateNormal]; 41 [normalPlayerBtn setTitle:@"普通播放" forState:UIControlStateNormal];
  42 + [normalPlayerBtn setTitleColor:[UIColor colorWithRed:23/255.0 green:110/255.0 blue:254/255.0 alpha:1] forState:UIControlStateNormal];
33 [normalPlayerBtn addTarget:self action:@selector(normalPlayerBtnAction) forControlEvents:UIControlEventTouchUpInside]; 43 [normalPlayerBtn addTarget:self action:@selector(normalPlayerBtnAction) forControlEvents:UIControlEventTouchUpInside];
  44 + normalPlayerBtn.layer.cornerRadius = 10;
  45 + normalPlayerBtn.layer.masksToBounds = YES;
  46 + normalPlayerBtn.layer.borderColor = [UIColor blackColor].CGColor;
  47 + normalPlayerBtn.layer.borderWidth = 1;
34 [self.view addSubview:normalPlayerBtn]; 48 [self.view addSubview:normalPlayerBtn];
35 49
36 - UIButton *exitBtn = [UIButton buttonWithType:UIButtonTypeSystem];  
37 - exitBtn.frame = CGRectMake(0, 250, self.view.frame.size.width, 50); 50 + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 200, 80, 30)];
  51 + label.text = @"播放地址:";
  52 + label.font = [UIFont systemFontOfSize:15];
  53 + [self.view addSubview:label];
  54 +
  55 + _textField = [[UITextField alloc] initWithFrame:CGRectMake(90, 200, self.view.frame.size.width-100, 30)];
  56 + _textField.delegate = self;
  57 + [self.view addSubview:_textField];
  58 + _textField.borderStyle = UITextBorderStyleRoundedRect;
  59 + _textField.returnKeyType = UIReturnKeyDone;
  60 + _textField.clearButtonMode = UITextFieldViewModeAlways;
  61 +
  62 + NSArray *array = [[NSArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"historyURLs"]];
  63 + if (array.count > 0) {
  64 + _textField.text = array[0];
  65 + } else {
  66 + _textField.text = @"http://wideo00.cnlive.com/video/data1/2016/0808/140935/800/e3554e4c5de34a8d9a03c534849cd2e4_140935_800.m3u8";
  67 + }
  68 +
  69 + _historyTableView = [[UITableView alloc] initWithFrame:CGRectMake(10, 240, self.view.frame.size.width, [UIScreen mainScreen].bounds.size.height-80-240) style:UITableViewStylePlain];
  70 + _historyTableView.delegate = self;
  71 + _historyTableView.dataSource = self;
  72 + [self.view addSubview:_historyTableView];
  73 +
  74 + UIButton *exitBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  75 + exitBtn.frame = CGRectMake((CGRectGetWidth(self.view.frame)-150)/2, [UIScreen mainScreen].bounds.size.height-70, 150, 50);
38 [exitBtn setTitle:@"退出" forState:UIControlStateNormal]; 76 [exitBtn setTitle:@"退出" forState:UIControlStateNormal];
  77 + [exitBtn setTitleColor:[UIColor colorWithRed:23/255.0 green:110/255.0 blue:254/255.0 alpha:1] forState:UIControlStateNormal];
39 [exitBtn addTarget:self action:@selector(exitBtnAction) forControlEvents:UIControlEventTouchUpInside]; 78 [exitBtn addTarget:self action:@selector(exitBtnAction) forControlEvents:UIControlEventTouchUpInside];
  79 + exitBtn.layer.cornerRadius = 10;
  80 + exitBtn.layer.masksToBounds = YES;
  81 + exitBtn.layer.borderColor = [UIColor blackColor].CGColor;
  82 + exitBtn.layer.borderWidth = 1;
40 [self.view addSubview:exitBtn]; 83 [self.view addSubview:exitBtn];
41 } 84 }
42 85
@@ -53,10 +96,67 @@ @@ -53,10 +96,67 @@
53 96
54 - (void)normalPlayerBtnAction 97 - (void)normalPlayerBtnAction
55 { 98 {
  99 + if (_textField.text.length == 0 || [_textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].length == 0) {
  100 + UIAlertView *toast = [[UIAlertView alloc] initWithTitle:nil
  101 + message:@"请输入播放地址!"
  102 + delegate:nil
  103 + cancelButtonTitle:nil
  104 + otherButtonTitles:nil, nil];
  105 + [toast show];
  106 + double duration = 2;
  107 + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  108 + [toast dismissWithClickedButtonIndex:0 animated:NO];
  109 + });
  110 + return;
  111 + }
  112 + NSMutableArray *array = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"historyURLs"]];
  113 + if (![array containsObject:_textField.text]) {
  114 + [array insertObject:_textField.text atIndex:0];
  115 + [[NSUserDefaults standardUserDefaults] setObject:array forKey:@"historyURLs"];
  116 + [[NSUserDefaults standardUserDefaults] synchronize];
  117 + [_historyTableView reloadData];
  118 + }
  119 +
56 NormalViewController *cnlive = [[NormalViewController alloc] init]; 120 NormalViewController *cnlive = [[NormalViewController alloc] init];
  121 + cnlive.videoUrlString = _textField.text;
57 [self presentViewController:cnlive animated:YES completion:NULL]; 122 [self presentViewController:cnlive animated:YES completion:NULL];
58 } 123 }
59 124
  125 +#pragma mark - UITextFieldDelegate
  126 +- (BOOL)textFieldShouldReturn:(UITextField *)textField
  127 +{
  128 + [textField resignFirstResponder];
  129 + return YES;
  130 +}
  131 +
  132 +#pragma mark - UITableViewDelegate
  133 +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  134 +{
  135 + NSArray *array = [[NSArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"historyURLs"]];
  136 + return array.count;
  137 +}
  138 +
  139 +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  140 +{
  141 + static NSString *identify = @"historyCell";
  142 + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identify];
  143 + if (!cell) {
  144 + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identify];
  145 + }
  146 +
  147 + NSArray *array = [[NSUserDefaults standardUserDefaults] objectForKey:@"historyURLs"];
  148 + cell.textLabel.text = array[indexPath.row];
  149 +
  150 + return cell;
  151 +}
  152 +
  153 +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  154 +{
  155 + [tableView deselectRowAtIndexPath:indexPath animated:YES];
  156 + NSArray *array = [[NSUserDefaults standardUserDefaults] objectForKey:@"historyURLs"];
  157 + _textField.text = array[indexPath.row];
  158 +}
  159 +
60 - (void)didReceiveMemoryWarning { 160 - (void)didReceiveMemoryWarning {
61 [super didReceiveMemoryWarning]; 161 [super didReceiveMemoryWarning];
62 // Dispose of any resources that can be recreated. 162 // Dispose of any resources that can be recreated.
CNLivePlayerSDKTest/CNLivePlayerSDKTest/Streamer/StreamerDetailViewController.m
@@ -34,9 +34,12 @@ @@ -34,9 +34,12 @@
34 34
35 if (_isAuthLive) { 35 if (_isAuthLive) {
36 36
37 - NSString *activityId = [NSString stringWithFormat:@"%d%d%d%d%d",arc4random()%9,arc4random()%9,arc4random()%9,arc4random()%9,arc4random()%9]; 37 + //用时间戳作为活动id 确保唯一性
  38 + NSDate *date = [NSDate date];
  39 + NSInteger time = [date timeIntervalSince1970];
  40 + NSString *activityId = [NSString stringWithFormat:@"%ld", (long)time];
38 41
39 - _kitCN = [[CNLiveGPUStreamerKit alloc] initWithDefaultConfigWithAppId:@"60_irg1rhs308" appKey:@"4e7a37b27a717a9e9b0a7aea4620ee55ea61fbf923bf46" activityId:activityId channelId:activityId isHorizontalScreen:@"0"]; 42 + _kitCN = [[CNLiveGPUStreamerKit alloc] initWithDefaultConfigWithAppId:@"60_irg1rhs308" appKey:@"4e7a37b27a717a9e9b0a7aea4620ee55ea61fbf923bf46" activityId:activityId channelId:@"iOStest" isHorizontalScreen:@"0"];
40 // _kitCN.activityName = @"iOS test"; 43 // _kitCN.activityName = @"iOS test";
41 44
42 // _kitCN.coverImgUrl = @"djfiwooa"; 45 // _kitCN.coverImgUrl = @"djfiwooa";
CNLivePlayerSDKTest/CNLivePlayerSDKTest/Streamer/StreamerViewController.m
@@ -40,10 +40,15 @@ @@ -40,10 +40,15 @@
40 [self.view addSubview:self.urlTextField]; 40 [self.view addSubview:self.urlTextField];
41 [self.view addSubview:self.tableView]; 41 [self.view addSubview:self.tableView];
42 42
43 - UIButton *exitBtn = [UIButton buttonWithType:UIButtonTypeSystem];  
44 - exitBtn.frame = CGRectMake(KScreenWidth/2-40, KScreenHeight-100, 80, 30); 43 + UIButton *exitBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  44 + exitBtn.frame = CGRectMake(KScreenWidth/2-75, KScreenHeight-70, 150, 50);
45 [exitBtn setTitle:@"退出" forState:UIControlStateNormal]; 45 [exitBtn setTitle:@"退出" forState:UIControlStateNormal];
  46 + [exitBtn setTitleColor:[UIColor colorWithRed:23/255.0 green:110/255.0 blue:254/255.0 alpha:1] forState:UIControlStateNormal];
46 [exitBtn addTarget:self action:@selector(exitBtnAction) forControlEvents:UIControlEventTouchUpInside]; 47 [exitBtn addTarget:self action:@selector(exitBtnAction) forControlEvents:UIControlEventTouchUpInside];
  48 + exitBtn.layer.cornerRadius = 10;
  49 + exitBtn.layer.masksToBounds = YES;
  50 + exitBtn.layer.borderColor = [UIColor blackColor].CGColor;
  51 + exitBtn.layer.borderWidth = 1;
47 [self.view addSubview:exitBtn]; 52 [self.view addSubview:exitBtn];
48 } 53 }
49 54
@@ -148,11 +153,17 @@ @@ -148,11 +153,17 @@
148 - (UIButton *)liveBtn 153 - (UIButton *)liveBtn
149 { 154 {
150 if (!_liveBtn) { 155 if (!_liveBtn) {
151 - _liveBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];  
152 - _liveBtn.frame = CGRectMake(KScreenWidth/2-40, 80, 80, 30); 156 +
  157 + _liveBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  158 + _liveBtn.frame = CGRectMake(KScreenWidth/2-75, 50, 150, 50);
153 _liveBtn.tag = 100000; 159 _liveBtn.tag = 100000;
154 [_liveBtn setTitle:@"开始直播" forState:UIControlStateNormal]; 160 [_liveBtn setTitle:@"开始直播" forState:UIControlStateNormal];
  161 + [_liveBtn setTitleColor:[UIColor colorWithRed:23/255.0 green:110/255.0 blue:254/255.0 alpha:1] forState:UIControlStateNormal];
155 [_liveBtn addTarget:self action:@selector(nextViewController:) forControlEvents:UIControlEventTouchUpInside]; 162 [_liveBtn addTarget:self action:@selector(nextViewController:) forControlEvents:UIControlEventTouchUpInside];
  163 + _liveBtn.layer.cornerRadius = 10;
  164 + _liveBtn.layer.masksToBounds = YES;
  165 + _liveBtn.layer.borderColor = [UIColor blackColor].CGColor;
  166 + _liveBtn.layer.borderWidth = 1;
156 } 167 }
157 return _liveBtn; 168 return _liveBtn;
158 } 169 }
@@ -160,11 +171,17 @@ @@ -160,11 +171,17 @@
160 - (UIButton *)authLiveBtn 171 - (UIButton *)authLiveBtn
161 { 172 {
162 if (!_authLiveBtn) { 173 if (!_authLiveBtn) {
163 - _authLiveBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];  
164 - _authLiveBtn.frame = CGRectMake(KScreenWidth/2-40, KScreenHeight-150, 80, 30); 174 +
  175 + _authLiveBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  176 + _authLiveBtn.frame = CGRectMake(KScreenWidth/2-75, KScreenHeight-150, 150, 50);
165 _authLiveBtn.tag = 100001; 177 _authLiveBtn.tag = 100001;
166 [_authLiveBtn setTitle:@"鉴权直播" forState:UIControlStateNormal]; 178 [_authLiveBtn setTitle:@"鉴权直播" forState:UIControlStateNormal];
  179 + [_authLiveBtn setTitleColor:[UIColor colorWithRed:23/255.0 green:110/255.0 blue:254/255.0 alpha:1] forState:UIControlStateNormal];
167 [_authLiveBtn addTarget:self action:@selector(nextViewController:) forControlEvents:UIControlEventTouchUpInside]; 180 [_authLiveBtn addTarget:self action:@selector(nextViewController:) forControlEvents:UIControlEventTouchUpInside];
  181 + _authLiveBtn.layer.cornerRadius = 10;
  182 + _authLiveBtn.layer.masksToBounds = YES;
  183 + _authLiveBtn.layer.borderColor = [UIColor blackColor].CGColor;
  184 + _authLiveBtn.layer.borderWidth = 1;
168 } 185 }
169 return _authLiveBtn; 186 return _authLiveBtn;
170 } 187 }
@@ -172,7 +189,7 @@ @@ -172,7 +189,7 @@
172 - (UITableView *)tableView 189 - (UITableView *)tableView
173 { 190 {
174 if (!_tableView) { 191 if (!_tableView) {
175 - _tableView = [[UITableView alloc] initWithFrame:CGRectMake(10, 190, KScreenWidth-20, 220) style:UITableViewStylePlain]; 192 + _tableView = [[UITableView alloc] initWithFrame:CGRectMake(10, 180, KScreenWidth-20, KScreenHeight-180-160) style:UITableViewStylePlain];
176 _tableView.backgroundColor = [UIColor clearColor]; 193 _tableView.backgroundColor = [UIColor clearColor];
177 _tableView.delegate = self; 194 _tableView.delegate = self;
178 _tableView.dataSource = self; 195 _tableView.dataSource = self;
@@ -183,7 +200,7 @@ @@ -183,7 +200,7 @@
183 - (UITextField *)urlTextField 200 - (UITextField *)urlTextField
184 { 201 {
185 if (!_urlTextField) { 202 if (!_urlTextField) {
186 - _urlTextField = [[UITextField alloc] initWithFrame:CGRectMake(10, 130, KScreenWidth-20, 40)]; 203 + _urlTextField = [[UITextField alloc] initWithFrame:CGRectMake(10, 120, KScreenWidth-20, 40)];
187 _urlTextField.placeholder = @"请输入推流地址"; 204 _urlTextField.placeholder = @"请输入推流地址";
188 _urlTextField.borderStyle = UITextBorderStyleRoundedRect; 205 _urlTextField.borderStyle = UITextBorderStyleRoundedRect;
189 _urlTextField.returnKeyType = UIReturnKeyDone; 206 _urlTextField.returnKeyType = UIReturnKeyDone;
CNLivePlayerSDKTest/CNLivePlayerSDKTest/ViewController.m
@@ -20,23 +20,46 @@ @@ -20,23 +20,46 @@
20 - (void)viewDidLoad { 20 - (void)viewDidLoad {
21 [super viewDidLoad]; 21 [super viewDidLoad];
22 22
23 - UIButton *playerBtn = [UIButton buttonWithType:UIButtonTypeSystem];  
24 - playerBtn.frame = CGRectMake(0, 50, self.view.frame.size.width, 50);  
25 - [playerBtn setTitle:@"播放demo" forState:UIControlStateNormal]; 23 + self.title = @"视讯云 推流和播放SDK Demo";
  24 +
  25 + UIButton *playerBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  26 + playerBtn.frame = CGRectMake((CGRectGetWidth(self.view.frame)-150)/2, 100, 150, 50);
  27 + [playerBtn setTitle:@"播放" forState:UIControlStateNormal];
  28 + [playerBtn setTitleColor:[UIColor colorWithRed:23/255.0 green:110/255.0 blue:254/255.0 alpha:1] forState:UIControlStateNormal];
26 [playerBtn addTarget:self action:@selector(playerBtnAction) forControlEvents:UIControlEventTouchUpInside]; 29 [playerBtn addTarget:self action:@selector(playerBtnAction) forControlEvents:UIControlEventTouchUpInside];
  30 + playerBtn.layer.cornerRadius = 10;
  31 + playerBtn.layer.masksToBounds = YES;
  32 + playerBtn.layer.borderColor = [UIColor blackColor].CGColor;
  33 + playerBtn.layer.borderWidth = 1;
27 [self.view addSubview:playerBtn]; 34 [self.view addSubview:playerBtn];
28 35
29 - UIButton *barrageBtn = [UIButton buttonWithType:UIButtonTypeSystem];  
30 - barrageBtn.frame = CGRectMake(0, 150, self.view.frame.size.width, 50);  
31 - [barrageBtn setTitle:@"弹幕demo" forState:UIControlStateNormal]; 36 + UIButton *streamerBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  37 + streamerBtn.frame = CGRectMake((CGRectGetWidth(self.view.frame)-150)/2, 200, 150, 50);
  38 + [streamerBtn setTitle:@"推流" forState:UIControlStateNormal];
  39 + [streamerBtn setTitleColor:[UIColor colorWithRed:23/255.0 green:110/255.0 blue:254/255.0 alpha:1] forState:UIControlStateNormal];
  40 + [streamerBtn addTarget:self action:@selector(streamerBtnAction) forControlEvents:UIControlEventTouchUpInside];
  41 + streamerBtn.layer.cornerRadius = 10;
  42 + streamerBtn.layer.masksToBounds = YES;
  43 + streamerBtn.layer.borderColor = [UIColor blackColor].CGColor;
  44 + streamerBtn.layer.borderWidth = 1;
  45 + [self.view addSubview:streamerBtn];
  46 +
  47 + UIButton *barrageBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  48 + barrageBtn.frame = CGRectMake((CGRectGetWidth(self.view.frame)-150)/2, 300, 150, 50);
  49 + [barrageBtn setTitle:@"弹幕" forState:UIControlStateNormal];
  50 + [barrageBtn setTitleColor:[UIColor colorWithRed:23/255.0 green:110/255.0 blue:254/255.0 alpha:1] forState:UIControlStateNormal];
32 [barrageBtn addTarget:self action:@selector(barrageBtnAction) forControlEvents:UIControlEventTouchUpInside]; 51 [barrageBtn addTarget:self action:@selector(barrageBtnAction) forControlEvents:UIControlEventTouchUpInside];
  52 + barrageBtn.layer.cornerRadius = 10;
  53 + barrageBtn.layer.masksToBounds = YES;
  54 + barrageBtn.layer.borderColor = [UIColor blackColor].CGColor;
  55 + barrageBtn.layer.borderWidth = 1;
33 [self.view addSubview:barrageBtn]; 56 [self.view addSubview:barrageBtn];
34 57
35 - UIButton *streamerBtn = [UIButton buttonWithType:UIButtonTypeSystem];  
36 - streamerBtn.frame = CGRectMake(0, 250, self.view.frame.size.width, 50);  
37 - [streamerBtn setTitle:@"推流demo" forState:UIControlStateNormal];  
38 - [streamerBtn addTarget:self action:@selector(streamerBtnAction) forControlEvents:UIControlEventTouchUpInside];  
39 - [self.view addSubview:streamerBtn]; 58 + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, CGRectGetHeight([UIScreen mainScreen].bounds)-60, CGRectGetWidth(self.view.frame), 30)];
  59 + label.text = @"北京中投视讯文化传媒股份有限公司";
  60 + [self.view addSubview:label];
  61 + label.font = [UIFont systemFontOfSize:12];
  62 + label.textAlignment = NSTextAlignmentCenter;
40 } 63 }
41 64
42 - (void)playerBtnAction 65 - (void)playerBtnAction