Commit 27efad8b9218a332e99cb0e74da28c4fc4219151

Authored by zhangxiaowen
1 parent de05ddb6

no message

Showing 18 changed files with 473 additions and 527 deletions
CNLivePlayer/Classes/Streamer/CNLiveStreamerKit.h
@@ -329,7 +329,7 @@ FOUNDATION_EXPORT NSString *const CNLiveStreamerReconnectStatusChangedNotificati @@ -329,7 +329,7 @@ FOUNDATION_EXPORT NSString *const CNLiveStreamerReconnectStatusChangedNotificati
329 @discussion 横屏时: width > height 329 @discussion 横屏时: width > height
330 @discussion 需要与UI方向一致 330 @discussion 需要与UI方向一致
331 */ 331 */
332 -- (void)setVideoOrientationBy:(UIInterfaceOrientation)uiOrien; 332 +- (void)setVideoOrientation:(UIInterfaceOrientation)orientation;
333 333
334 /** 334 /**
335 @abstract 启动预览 335 @abstract 启动预览
@@ -403,13 +403,13 @@ FOUNDATION_EXPORT NSString *const CNLiveStreamerReconnectStatusChangedNotificati @@ -403,13 +403,13 @@ FOUNDATION_EXPORT NSString *const CNLiveStreamerReconnectStatusChangedNotificati
403 @param orie 旋转到目标朝向, 需要从demo中获取UI的朝向传入 403 @param orie 旋转到目标朝向, 需要从demo中获取UI的朝向传入
404 @discussion 采集到的图像的朝向还是和启动时的朝向一致 404 @discussion 采集到的图像的朝向还是和启动时的朝向一致
405 */ 405 */
406 -- (void)rotatePreviewTo:(UIInterfaceOrientation) orie; 406 +- (void)rotatePreviewTo:(UIInterfaceOrientation)orie;
407 407
408 /** 408 /**
409 @abstract 根据UI的朝向旋转推流画面 409 @abstract 根据UI的朝向旋转推流画面
410 @param orie 旋转到目标朝向, 需要从demo中获取UI的朝向传入 410 @param orie 旋转到目标朝向, 需要从demo中获取UI的朝向传入
411 */ 411 */
412 -- (void)rotateStreamTo:(UIInterfaceOrientation) orie; 412 +- (void)rotateStreamTo:(UIInterfaceOrientation)orie;
413 413
414 /** 414 /**
415 @abstract 当前采集设备是否支持自动变焦 415 @abstract 当前采集设备是否支持自动变焦
CNLivePlayer/Classes/Streamer/CNLiveStreamerKit.m
@@ -271,7 +271,7 @@ NSString * const CNLiveServiceConnectBreakNotification = @"CNLiveServiceConnectB @@ -271,7 +271,7 @@ NSString * const CNLiveServiceConnectBreakNotification = @"CNLiveServiceConnectB
271 _captureState = (CNLiveCaptureState)_manager.kit.captureState; 271 _captureState = (CNLiveCaptureState)_manager.kit.captureState;
272 272
273 if (self.logPrintEnable) { 273 if (self.logPrintEnable) {
274 - NSLog(@"CNLiveGPUStreamerKit-->采集设备工作状态CNLiveCaptureState:%ld", (unsigned long)self.captureState); 274 + NSLog(@"CNLiveStreamerKit-->采集设备工作状态CNLiveCaptureState:%ld", (unsigned long)self.captureState);
275 } 275 }
276 276
277 [[NSNotificationCenter defaultCenter] postNotificationName:CNLiveCaptureStateDidChangeNotification 277 [[NSNotificationCenter defaultCenter] postNotificationName:CNLiveCaptureStateDidChangeNotification
@@ -388,10 +388,7 @@ NSString * const CNLiveServiceConnectBreakNotification = @"CNLiveServiceConnectB @@ -388,10 +388,7 @@ NSString * const CNLiveServiceConnectBreakNotification = @"CNLiveServiceConnectB
388 } 388 }
389 389
390 - (void)enterForeground { 390 - (void)enterForeground {
391 -  
392 - // BOOL enterForeground = [_manager.kit.aCapDev startCapture];  
393 - // NSLog(@"CNLiveGPUStreamerKit-->重新开启音频采集状态,ret:%@",enterForeground ? @"YES" : @"NO");  
394 - 391 +
395 if (!_activitySuccess) return; 392 if (!_activitySuccess) return;
396 _enterBackground = NO; 393 _enterBackground = NO;
397 394
@@ -475,8 +472,8 @@ NSString * const CNLiveServiceConnectBreakNotification = @"CNLiveServiceConnectB @@ -475,8 +472,8 @@ NSString * const CNLiveServiceConnectBreakNotification = @"CNLiveServiceConnectB
475 } 472 }
476 473
477 //摄像头朝向 474 //摄像头朝向
478 --(void)setVideoOrientationBy:(UIInterfaceOrientation)uiOrien {  
479 - _manager.kit.videoOrientation = uiOrien; 475 +-(void)setVideoOrientation:(UIInterfaceOrientation)orientation {
  476 + _manager.kit.videoOrientation = orientation;
480 } 477 }
481 478
482 #pragma mark - mirror & rotate 479 #pragma mark - mirror & rotate
@@ -1063,13 +1060,8 @@ NSString * const CNLiveServiceConnectBreakNotification = @"CNLiveServiceConnectB @@ -1063,13 +1060,8 @@ NSString * const CNLiveServiceConnectBreakNotification = @"CNLiveServiceConnectB
1063 1060
1064 //启动直播活动 1061 //启动直播活动
1065 - (void)requestStartStreamer:(void (^)(void))successBlock failure:(void (^)(NSDictionary *))failureBlock timeString:(NSString *)timeString { 1062 - (void)requestStartStreamer:(void (^)(void))successBlock failure:(void (^)(NSDictionary *))failureBlock timeString:(NSString *)timeString {
1066 -  
1067 _reteying = NO; 1063 _reteying = NO;
1068 1064
1069 - // NSDate *date = [NSDate date];  
1070 - // NSInteger time = [date timeIntervalSince1970];  
1071 - // NSString *timeString = [NSString stringWithFormat:@"%ld", (long)time];  
1072 -  
1073 NSMutableDictionary *parameter = [@{@"appId": PLAYER_AppID, 1065 NSMutableDictionary *parameter = [@{@"appId": PLAYER_AppID,
1074 @"activityId": _activityId, 1066 @"activityId": _activityId,
1075 @"timestamp":timeString, 1067 @"timestamp":timeString,
Example/CNLivePlayer.xcodeproj/project.pbxproj
@@ -13,17 +13,17 @@ @@ -13,17 +13,17 @@
13 086413C222EAE591008713D3 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 086413C122EAE591008713D3 /* OpenGLES.framework */; }; 13 086413C222EAE591008713D3 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 086413C122EAE591008713D3 /* OpenGLES.framework */; };
14 086413C422EAEC11008713D3 /* libstdc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 086413C322EAEC11008713D3 /* libstdc++.tbd */; }; 14 086413C422EAEC11008713D3 /* libstdc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 086413C322EAEC11008713D3 /* libstdc++.tbd */; };
15 08740E51230E7DFB00B5D28D /* CNLiveStreamerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E3F230E7DFA00B5D28D /* CNLiveStreamerController.m */; }; 15 08740E51230E7DFB00B5D28D /* CNLiveStreamerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E3F230E7DFA00B5D28D /* CNLiveStreamerController.m */; };
16 - 08740E52230E7DFB00B5D28D /* StreamerDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E40230E7DFA00B5D28D /* StreamerDetailViewController.m */; }; 16 + 08740E52230E7DFB00B5D28D /* CNLiveStreamerDetailController.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E40230E7DFA00B5D28D /* CNLiveStreamerDetailController.m */; };
17 08740E53230E7DFB00B5D28D /* FilterFunctionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E41230E7DFA00B5D28D /* FilterFunctionView.m */; }; 17 08740E53230E7DFB00B5D28D /* FilterFunctionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E41230E7DFA00B5D28D /* FilterFunctionView.m */; };
18 08740E54230E7DFB00B5D28D /* SliderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E44230E7DFA00B5D28D /* SliderView.m */; }; 18 08740E54230E7DFB00B5D28D /* SliderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E44230E7DFA00B5D28D /* SliderView.m */; };
19 08740E55230E7DFB00B5D28D /* FloatingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E45230E7DFA00B5D28D /* FloatingViewController.m */; }; 19 08740E55230E7DFB00B5D28D /* FloatingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E45230E7DFA00B5D28D /* FloatingViewController.m */; };
20 08740E56230E7DFB00B5D28D /* AudioStreamingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E46230E7DFA00B5D28D /* AudioStreamingViewController.m */; }; 20 08740E56230E7DFB00B5D28D /* AudioStreamingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E46230E7DFA00B5D28D /* AudioStreamingViewController.m */; };
21 - 08740E57230E7DFB00B5D28D /* MoreFunctionsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E47230E7DFA00B5D28D /* MoreFunctionsView.m */; };  
22 - 08740E58230E7DFB00B5D28D /* AudioCfgView.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E48230E7DFA00B5D28D /* AudioCfgView.m */; };  
23 08740E59230E7DFB00B5D28D /* BgmPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E4D230E7DFA00B5D28D /* BgmPlayerView.m */; }; 21 08740E59230E7DFB00B5D28D /* BgmPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E4D230E7DFA00B5D28D /* BgmPlayerView.m */; };
24 - 08740E5C230E83B100B5D28D /* LoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E5B230E83B100B5D28D /* LoadingView.m */; };  
25 08740E5E230E8A0700B5D28D /* house.gif in Resources */ = {isa = PBXBuildFile; fileRef = 08740E5D230E8A0700B5D28D /* house.gif */; }; 22 08740E5E230E8A0700B5D28D /* house.gif in Resources */ = {isa = PBXBuildFile; fileRef = 08740E5D230E8A0700B5D28D /* house.gif */; };
26 08740E62230E8C6500B5D28D /* CNLivePlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E60230E8C6500B5D28D /* CNLivePlayerController.m */; }; 23 08740E62230E8C6500B5D28D /* CNLivePlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E60230E8C6500B5D28D /* CNLivePlayerController.m */; };
  24 + 08740E66230E935300B5D28D /* CNLiveLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E65230E935300B5D28D /* CNLiveLoadingView.m */; };
  25 + 08740E69230E989000B5D28D /* CNLiveMoreFunctionsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E68230E989000B5D28D /* CNLiveMoreFunctionsView.m */; };
  26 + 08740E6D230EBA6800B5D28D /* CNLiveVoiceSettingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 08740E6B230EBA6800B5D28D /* CNLiveVoiceSettingView.m */; };
27 1D258610626B544AFEEFD2F9 /* Pods_CNLivePlayer_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E14DC7AF4B1116AA5BC01855 /* Pods_CNLivePlayer_Example.framework */; }; 27 1D258610626B544AFEEFD2F9 /* Pods_CNLivePlayer_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E14DC7AF4B1116AA5BC01855 /* Pods_CNLivePlayer_Example.framework */; };
28 2A57832D4B5A8EF9638641C3 /* Pods_CNLivePlayer_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDD4ACEE076815DE64A1FE2E /* Pods_CNLivePlayer_Tests.framework */; }; 28 2A57832D4B5A8EF9638641C3 /* Pods_CNLivePlayer_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDD4ACEE076815DE64A1FE2E /* Pods_CNLivePlayer_Tests.framework */; };
29 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; }; 29 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; };
@@ -60,28 +60,28 @@ @@ -60,28 +60,28 @@
60 086413C122EAE591008713D3 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; 60 086413C122EAE591008713D3 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
61 086413C322EAEC11008713D3 /* libstdc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libstdc++.tbd"; path = "usr/lib/libstdc++.tbd"; sourceTree = SDKROOT; }; 61 086413C322EAEC11008713D3 /* libstdc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libstdc++.tbd"; path = "usr/lib/libstdc++.tbd"; sourceTree = SDKROOT; };
62 08740E3F230E7DFA00B5D28D /* CNLiveStreamerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLiveStreamerController.m; sourceTree = "<group>"; }; 62 08740E3F230E7DFA00B5D28D /* CNLiveStreamerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLiveStreamerController.m; sourceTree = "<group>"; };
63 - 08740E40230E7DFA00B5D28D /* StreamerDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StreamerDetailViewController.m; sourceTree = "<group>"; }; 63 + 08740E40230E7DFA00B5D28D /* CNLiveStreamerDetailController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLiveStreamerDetailController.m; sourceTree = "<group>"; };
64 08740E41230E7DFA00B5D28D /* FilterFunctionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FilterFunctionView.m; sourceTree = "<group>"; }; 64 08740E41230E7DFA00B5D28D /* FilterFunctionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FilterFunctionView.m; sourceTree = "<group>"; };
65 - 08740E42230E7DFA00B5D28D /* AudioCfgView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioCfgView.h; sourceTree = "<group>"; };  
66 08740E43230E7DFA00B5D28D /* BgmPlayerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BgmPlayerView.h; sourceTree = "<group>"; }; 65 08740E43230E7DFA00B5D28D /* BgmPlayerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BgmPlayerView.h; sourceTree = "<group>"; };
67 08740E44230E7DFA00B5D28D /* SliderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SliderView.m; sourceTree = "<group>"; }; 66 08740E44230E7DFA00B5D28D /* SliderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SliderView.m; sourceTree = "<group>"; };
68 08740E45230E7DFA00B5D28D /* FloatingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FloatingViewController.m; sourceTree = "<group>"; }; 67 08740E45230E7DFA00B5D28D /* FloatingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FloatingViewController.m; sourceTree = "<group>"; };
69 08740E46230E7DFA00B5D28D /* AudioStreamingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AudioStreamingViewController.m; sourceTree = "<group>"; }; 68 08740E46230E7DFA00B5D28D /* AudioStreamingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AudioStreamingViewController.m; sourceTree = "<group>"; };
70 - 08740E47230E7DFA00B5D28D /* MoreFunctionsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MoreFunctionsView.m; sourceTree = "<group>"; };  
71 - 08740E48230E7DFA00B5D28D /* AudioCfgView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AudioCfgView.m; sourceTree = "<group>"; };  
72 08740E49230E7DFA00B5D28D /* FilterFunctionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FilterFunctionView.h; sourceTree = "<group>"; }; 69 08740E49230E7DFA00B5D28D /* FilterFunctionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FilterFunctionView.h; sourceTree = "<group>"; };
73 - 08740E4A230E7DFA00B5D28D /* StreamerDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StreamerDetailViewController.h; sourceTree = "<group>"; }; 70 + 08740E4A230E7DFA00B5D28D /* CNLiveStreamerDetailController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNLiveStreamerDetailController.h; sourceTree = "<group>"; };
74 08740E4B230E7DFA00B5D28D /* CNLiveStreamerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNLiveStreamerController.h; sourceTree = "<group>"; }; 71 08740E4B230E7DFA00B5D28D /* CNLiveStreamerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNLiveStreamerController.h; sourceTree = "<group>"; };
75 08740E4C230E7DFA00B5D28D /* SliderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SliderView.h; sourceTree = "<group>"; }; 72 08740E4C230E7DFA00B5D28D /* SliderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SliderView.h; sourceTree = "<group>"; };
76 08740E4D230E7DFA00B5D28D /* BgmPlayerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BgmPlayerView.m; sourceTree = "<group>"; }; 73 08740E4D230E7DFA00B5D28D /* BgmPlayerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BgmPlayerView.m; sourceTree = "<group>"; };
77 08740E4E230E7DFA00B5D28D /* FloatingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FloatingViewController.h; sourceTree = "<group>"; }; 74 08740E4E230E7DFA00B5D28D /* FloatingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FloatingViewController.h; sourceTree = "<group>"; };
78 - 08740E4F230E7DFA00B5D28D /* MoreFunctionsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MoreFunctionsView.h; sourceTree = "<group>"; };  
79 08740E50230E7DFA00B5D28D /* AudioStreamingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioStreamingViewController.h; sourceTree = "<group>"; }; 75 08740E50230E7DFA00B5D28D /* AudioStreamingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioStreamingViewController.h; sourceTree = "<group>"; };
80 - 08740E5A230E83B100B5D28D /* LoadingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadingView.h; sourceTree = "<group>"; };  
81 - 08740E5B230E83B100B5D28D /* LoadingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoadingView.m; sourceTree = "<group>"; };  
82 08740E5D230E8A0700B5D28D /* house.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = house.gif; sourceTree = "<group>"; }; 76 08740E5D230E8A0700B5D28D /* house.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = house.gif; sourceTree = "<group>"; };
83 08740E60230E8C6500B5D28D /* CNLivePlayerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLivePlayerController.m; sourceTree = "<group>"; }; 77 08740E60230E8C6500B5D28D /* CNLivePlayerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLivePlayerController.m; sourceTree = "<group>"; };
84 08740E61230E8C6500B5D28D /* CNLivePlayerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNLivePlayerController.h; sourceTree = "<group>"; }; 78 08740E61230E8C6500B5D28D /* CNLivePlayerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNLivePlayerController.h; sourceTree = "<group>"; };
  79 + 08740E64230E935300B5D28D /* CNLiveLoadingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNLiveLoadingView.h; sourceTree = "<group>"; };
  80 + 08740E65230E935300B5D28D /* CNLiveLoadingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLiveLoadingView.m; sourceTree = "<group>"; };
  81 + 08740E67230E989000B5D28D /* CNLiveMoreFunctionsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNLiveMoreFunctionsView.h; sourceTree = "<group>"; };
  82 + 08740E68230E989000B5D28D /* CNLiveMoreFunctionsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLiveMoreFunctionsView.m; sourceTree = "<group>"; };
  83 + 08740E6B230EBA6800B5D28D /* CNLiveVoiceSettingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLiveVoiceSettingView.m; sourceTree = "<group>"; };
  84 + 08740E6C230EBA6800B5D28D /* CNLiveVoiceSettingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNLiveVoiceSettingView.h; sourceTree = "<group>"; };
85 17E088CE7F3FDB52D35B374B /* CNLivePlayer.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = CNLivePlayer.podspec; path = ../CNLivePlayer.podspec; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 85 17E088CE7F3FDB52D35B374B /* CNLivePlayer.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = CNLivePlayer.podspec; path = ../CNLivePlayer.podspec; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
86 26B97BD3DF7A4A551798F5CA /* Pods-CNLivePlayer_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CNLivePlayer_Tests.release.xcconfig"; path = "Target Support Files/Pods-CNLivePlayer_Tests/Pods-CNLivePlayer_Tests.release.xcconfig"; sourceTree = "<group>"; }; 86 26B97BD3DF7A4A551798F5CA /* Pods-CNLivePlayer_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CNLivePlayer_Tests.release.xcconfig"; path = "Target Support Files/Pods-CNLivePlayer_Tests/Pods-CNLivePlayer_Tests.release.xcconfig"; sourceTree = "<group>"; };
87 32AFD179FF73966F488CAFA0 /* Pods-CNLivePlayer_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CNLivePlayer_Example.debug.xcconfig"; path = "Target Support Files/Pods-CNLivePlayer_Example/Pods-CNLivePlayer_Example.debug.xcconfig"; sourceTree = "<group>"; }; 87 32AFD179FF73966F488CAFA0 /* Pods-CNLivePlayer_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CNLivePlayer_Example.debug.xcconfig"; path = "Target Support Files/Pods-CNLivePlayer_Example/Pods-CNLivePlayer_Example.debug.xcconfig"; sourceTree = "<group>"; };
@@ -159,27 +159,23 @@ @@ -159,27 +159,23 @@
159 08740E3E230E7DFA00B5D28D /* Streamer */ = { 159 08740E3E230E7DFA00B5D28D /* Streamer */ = {
160 isa = PBXGroup; 160 isa = PBXGroup;
161 children = ( 161 children = (
  162 + 08740E6A230E9EA200B5D28D /* Controller */,
  163 + 08740E63230E932600B5D28D /* View */,
162 08740E5D230E8A0700B5D28D /* house.gif */, 164 08740E5D230E8A0700B5D28D /* house.gif */,
163 08740E4B230E7DFA00B5D28D /* CNLiveStreamerController.h */, 165 08740E4B230E7DFA00B5D28D /* CNLiveStreamerController.h */,
164 08740E3F230E7DFA00B5D28D /* CNLiveStreamerController.m */, 166 08740E3F230E7DFA00B5D28D /* CNLiveStreamerController.m */,
165 - 08740E4A230E7DFA00B5D28D /* StreamerDetailViewController.h */,  
166 - 08740E40230E7DFA00B5D28D /* StreamerDetailViewController.m */,  
167 - 08740E5A230E83B100B5D28D /* LoadingView.h */,  
168 - 08740E5B230E83B100B5D28D /* LoadingView.m */, 167 + 08740E4A230E7DFA00B5D28D /* CNLiveStreamerDetailController.h */,
  168 + 08740E40230E7DFA00B5D28D /* CNLiveStreamerDetailController.m */,
169 08740E50230E7DFA00B5D28D /* AudioStreamingViewController.h */, 169 08740E50230E7DFA00B5D28D /* AudioStreamingViewController.h */,
170 08740E46230E7DFA00B5D28D /* AudioStreamingViewController.m */, 170 08740E46230E7DFA00B5D28D /* AudioStreamingViewController.m */,
171 08740E4E230E7DFA00B5D28D /* FloatingViewController.h */, 171 08740E4E230E7DFA00B5D28D /* FloatingViewController.h */,
172 08740E45230E7DFA00B5D28D /* FloatingViewController.m */, 172 08740E45230E7DFA00B5D28D /* FloatingViewController.m */,
173 08740E49230E7DFA00B5D28D /* FilterFunctionView.h */, 173 08740E49230E7DFA00B5D28D /* FilterFunctionView.h */,
174 08740E41230E7DFA00B5D28D /* FilterFunctionView.m */, 174 08740E41230E7DFA00B5D28D /* FilterFunctionView.m */,
175 - 08740E42230E7DFA00B5D28D /* AudioCfgView.h */,  
176 - 08740E48230E7DFA00B5D28D /* AudioCfgView.m */,  
177 08740E43230E7DFA00B5D28D /* BgmPlayerView.h */, 175 08740E43230E7DFA00B5D28D /* BgmPlayerView.h */,
178 08740E4D230E7DFA00B5D28D /* BgmPlayerView.m */, 176 08740E4D230E7DFA00B5D28D /* BgmPlayerView.m */,
179 08740E4C230E7DFA00B5D28D /* SliderView.h */, 177 08740E4C230E7DFA00B5D28D /* SliderView.h */,
180 08740E44230E7DFA00B5D28D /* SliderView.m */, 178 08740E44230E7DFA00B5D28D /* SliderView.m */,
181 - 08740E4F230E7DFA00B5D28D /* MoreFunctionsView.h */,  
182 - 08740E47230E7DFA00B5D28D /* MoreFunctionsView.m */,  
183 ); 179 );
184 path = Streamer; 180 path = Streamer;
185 sourceTree = "<group>"; 181 sourceTree = "<group>";
@@ -187,12 +183,32 @@ @@ -187,12 +183,32 @@
187 08740E5F230E8C6500B5D28D /* Player */ = { 183 08740E5F230E8C6500B5D28D /* Player */ = {
188 isa = PBXGroup; 184 isa = PBXGroup;
189 children = ( 185 children = (
190 - 08740E60230E8C6500B5D28D /* CNLivePlayerController.m */,  
191 08740E61230E8C6500B5D28D /* CNLivePlayerController.h */, 186 08740E61230E8C6500B5D28D /* CNLivePlayerController.h */,
  187 + 08740E60230E8C6500B5D28D /* CNLivePlayerController.m */,
192 ); 188 );
193 path = Player; 189 path = Player;
194 sourceTree = "<group>"; 190 sourceTree = "<group>";
195 }; 191 };
  192 + 08740E63230E932600B5D28D /* View */ = {
  193 + isa = PBXGroup;
  194 + children = (
  195 + 08740E6C230EBA6800B5D28D /* CNLiveVoiceSettingView.h */,
  196 + 08740E6B230EBA6800B5D28D /* CNLiveVoiceSettingView.m */,
  197 + 08740E64230E935300B5D28D /* CNLiveLoadingView.h */,
  198 + 08740E65230E935300B5D28D /* CNLiveLoadingView.m */,
  199 + 08740E67230E989000B5D28D /* CNLiveMoreFunctionsView.h */,
  200 + 08740E68230E989000B5D28D /* CNLiveMoreFunctionsView.m */,
  201 + );
  202 + path = View;
  203 + sourceTree = "<group>";
  204 + };
  205 + 08740E6A230E9EA200B5D28D /* Controller */ = {
  206 + isa = PBXGroup;
  207 + children = (
  208 + );
  209 + path = Controller;
  210 + sourceTree = "<group>";
  211 + };
196 6003F581195388D10070C39A = { 212 6003F581195388D10070C39A = {
197 isa = PBXGroup; 213 isa = PBXGroup;
198 children = ( 214 children = (
@@ -408,7 +424,7 @@ @@ -408,7 +424,7 @@
408 ); 424 );
409 runOnlyForDeploymentPostprocessing = 0; 425 runOnlyForDeploymentPostprocessing = 0;
410 shellPath = /bin/sh; 426 shellPath = /bin/sh;
411 - shellScript = "# Type a script or drag a script file from your workspace to insert its path.\nif [ \"${ACTION}\" = \"build\" ]\nthen\nINSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework\nDEVICE_DIR=${SRCROOT}/\"build\"/Debug-iphoneos/${PROJECT_NAME}/${PROJECT_NAME}.framework \nSIMULATOR_DIR=${SRCROOT}/\"build\"/Debug-iphonesimulator/${PROJECT_NAME}/${PROJECT_NAME}.framework \nif [ -d \"${INSTALL_DIR}\" ]\nthen\nrm -rf \"${INSTALL_DIR}\"\nfi\nmkdir -p \"${INSTALL_DIR}\"\ncp -R \"${DEVICE_DIR}/\" \"${INSTALL_DIR}/\"\nlipo -create \"${DEVICE_DIR}/${PROJECT_NAME}\" \"${SIMULATOR_DIR}/${PROJECT_NAME}\" -output \"${INSTALL_DIR}/${PROJECT_NAME}\"\nopen \"${SRCROOT}/Products\"\nfi\n"; 427 + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\nif [ \"${ACTION}\" = \"build\" ]\nthen\nINSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework\nDEVICE_DIR=${SRCROOT}/\"build\"/Debug-iphoneos/${PROJECT_NAME}/${PROJECT_NAME}.framework \nSIMULATOR_DIR=${SRCROOT}/\"build\"/Debug-iphonesimulator/${PROJECT_NAME}/${PROJECT_NAME}.framework \nif [ -d \"${INSTALL_DIR}\" ]\nthen\nrm -rf \"${INSTALL_DIR}\"\nfi\nmkdir -p \"${INSTALL_DIR}\"\ncp -R \"${DEVICE_DIR}/\" \"${INSTALL_DIR}/\"\nlipo -create \"${DEVICE_DIR}/${PROJECT_NAME}\" \"${SIMULATOR_DIR}/${PROJECT_NAME}\" -output \"${INSTALL_DIR}/${PROJECT_NAME}\"\n#open \"${SRCROOT}/Products\"\nfi\n";
412 }; 428 };
413 5113AD1A1A6CE60F5F11067D /* [CP] Check Pods Manifest.lock */ = { 429 5113AD1A1A6CE60F5F11067D /* [CP] Check Pods Manifest.lock */ = {
414 isa = PBXShellScriptBuildPhase; 430 isa = PBXShellScriptBuildPhase;
@@ -495,19 +511,19 @@ @@ -495,19 +511,19 @@
495 isa = PBXSourcesBuildPhase; 511 isa = PBXSourcesBuildPhase;
496 buildActionMask = 2147483647; 512 buildActionMask = 2147483647;
497 files = ( 513 files = (
498 - 08740E58230E7DFB00B5D28D /* AudioCfgView.m in Sources */,  
499 - 08740E5C230E83B100B5D28D /* LoadingView.m in Sources */,  
500 08740E55230E7DFB00B5D28D /* FloatingViewController.m in Sources */, 514 08740E55230E7DFB00B5D28D /* FloatingViewController.m in Sources */,
  515 + 08740E69230E989000B5D28D /* CNLiveMoreFunctionsView.m in Sources */,
501 6003F59E195388D20070C39A /* CNLiveAppDelegate.m in Sources */, 516 6003F59E195388D20070C39A /* CNLiveAppDelegate.m in Sources */,
502 - 08740E52230E7DFB00B5D28D /* StreamerDetailViewController.m in Sources */, 517 + 08740E52230E7DFB00B5D28D /* CNLiveStreamerDetailController.m in Sources */,
503 6003F5A7195388D20070C39A /* CNLiveViewController.m in Sources */, 518 6003F5A7195388D20070C39A /* CNLiveViewController.m in Sources */,
  519 + 08740E6D230EBA6800B5D28D /* CNLiveVoiceSettingView.m in Sources */,
504 08740E56230E7DFB00B5D28D /* AudioStreamingViewController.m in Sources */, 520 08740E56230E7DFB00B5D28D /* AudioStreamingViewController.m in Sources */,
505 08740E62230E8C6500B5D28D /* CNLivePlayerController.m in Sources */, 521 08740E62230E8C6500B5D28D /* CNLivePlayerController.m in Sources */,
506 08740E54230E7DFB00B5D28D /* SliderView.m in Sources */, 522 08740E54230E7DFB00B5D28D /* SliderView.m in Sources */,
507 6003F59A195388D20070C39A /* main.m in Sources */, 523 6003F59A195388D20070C39A /* main.m in Sources */,
508 08740E59230E7DFB00B5D28D /* BgmPlayerView.m in Sources */, 524 08740E59230E7DFB00B5D28D /* BgmPlayerView.m in Sources */,
509 - 08740E57230E7DFB00B5D28D /* MoreFunctionsView.m in Sources */,  
510 08740E53230E7DFB00B5D28D /* FilterFunctionView.m in Sources */, 525 08740E53230E7DFB00B5D28D /* FilterFunctionView.m in Sources */,
  526 + 08740E66230E935300B5D28D /* CNLiveLoadingView.m in Sources */,
511 08740E51230E7DFB00B5D28D /* CNLiveStreamerController.m in Sources */, 527 08740E51230E7DFB00B5D28D /* CNLiveStreamerController.m in Sources */,
512 ); 528 );
513 runOnlyForDeploymentPostprocessing = 0; 529 runOnlyForDeploymentPostprocessing = 0;
Example/CNLivePlayer/CNLivePlayer-Info.plist
@@ -2,10 +2,14 @@ @@ -2,10 +2,14 @@
2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3 <plist version="1.0"> 3 <plist version="1.0">
4 <dict> 4 <dict>
5 - <key>NSMicrophoneUsageDescription</key> 5 + <key>NSPhotoLibraryUsageDescription</key>
  6 + <string></string>
  7 + <key>NSPhotoLibraryAddUsageDescription</key>
6 <string></string> 8 <string></string>
7 <key>NSCameraUsageDescription</key> 9 <key>NSCameraUsageDescription</key>
8 <string></string> 10 <string></string>
  11 + <key>NSMicrophoneUsageDescription</key>
  12 + <string></string>
9 <key>CFBundleDevelopmentRegion</key> 13 <key>CFBundleDevelopmentRegion</key>
10 <string>en</string> 14 <string>en</string>
11 <key>CFBundleDisplayName</key> 15 <key>CFBundleDisplayName</key>
Example/CNLivePlayer/Images.xcassets/Streamer/互动电视180x180.imageset/Contents.json renamed to Example/CNLivePlayer/Images.xcassets/Streamer/logo.imageset/Contents.json
Example/CNLivePlayer/Images.xcassets/Streamer/互动电视180x180.imageset/互动电视180x180.png renamed to Example/CNLivePlayer/Images.xcassets/Streamer/logo.imageset/互动电视180x180.png

21.2 KB

Example/CNLivePlayer/Player/CNLivePlayerController.m
@@ -24,8 +24,8 @@ @@ -24,8 +24,8 @@
24 // Do any additional setup after loading the view. 24 // Do any additional setup after loading the view.
25 25
26 self.player = [[CNLivePlayer alloc]initVodPlayerWithVideoId:@"82_c8ff347048414b7295cef882f8361073" authSuccess:^{ 26 self.player = [[CNLivePlayer alloc]initVodPlayerWithVideoId:@"82_c8ff347048414b7295cef882f8361073" authSuccess:^{
27 - _player.view.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.width*9/16.0);  
28 - [_player prepareToPlay]; 27 + self.player.view.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.width*9/16.0);
  28 + [self.player prepareToPlay];
29 } authFailure:^(NSDictionary * _Nonnull errorInfo) { 29 } authFailure:^(NSDictionary * _Nonnull errorInfo) {
30 30
31 }]; 31 }];
Example/CNLivePlayer/Streamer/AudioStreamingViewController.m
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 #import "AudioStreamingViewController.h" 9 #import "AudioStreamingViewController.h"
10 #import "CNLiveStreamerManager.h" 10 #import "CNLiveStreamerManager.h"
11 #import "CNLiveStreamerKit.h" 11 #import "CNLiveStreamerKit.h"
12 -#import "AudioCfgView.h" 12 +#import "CNLiveVoiceSettingView.h"
13 #import "BgmPlayerView.h" 13 #import "BgmPlayerView.h"
14 #import "CNLiveStreamerBase.h" 14 #import "CNLiveStreamerBase.h"
15 #import "CNLiveWatermark.h" 15 #import "CNLiveWatermark.h"
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 30
31 @property (nonatomic,strong) CNLiveStreamerKit *kitCN; //直播推流 31 @property (nonatomic,strong) CNLiveStreamerKit *kitCN; //直播推流
32 @property (nonatomic,strong) UILabel *stateLab; 32 @property (nonatomic,strong) UILabel *stateLab;
33 -@property (nonatomic,strong) AudioCfgView *audioCfgView; //声音相关设置 33 +@property (nonatomic,strong) CNLiveVoiceSettingView *audioCfgView; //声音相关设置
34 @property (nonatomic,strong) BgmPlayerView *bgmPlayerView; //背景音乐 34 @property (nonatomic,strong) BgmPlayerView *bgmPlayerView; //背景音乐
35 35
36 @end 36 @end
@@ -426,10 +426,10 @@ @@ -426,10 +426,10 @@
426 return _stateLab; 426 return _stateLab;
427 } 427 }
428 428
429 -- (AudioCfgView *)audioCfgView 429 +- (CNLiveVoiceSettingView *)audioCfgView
430 { 430 {
431 if (!_audioCfgView) { 431 if (!_audioCfgView) {
432 - _audioCfgView = [[AudioCfgView alloc] initWithFrame:CGRectMake(0, 160, Width, 200)]; 432 + _audioCfgView = [[CNLiveVoiceSettingView alloc] initWithFrame:CGRectMake(0, 160, Width, 200)];
433 _audioCfgView.hidden = YES; 433 _audioCfgView.hidden = YES;
434 } 434 }
435 return _audioCfgView; 435 return _audioCfgView;
Example/CNLivePlayer/Streamer/CNLiveStreamerController.h
1 // 1 //
2 -// StreamerViewController.h  
3 -// CNLivePlayerSDKTest 2 +// CNLiveStreamerController.h
  3 +// CNLivePlayer_Example
4 // 4 //
5 -// Created by 雷浩杰 on 16/8/10.  
6 -// Copyright © 2016年 雷浩杰. All rights reserved. 5 +// Created by CNLive-zxw on 2019/8/17.
  6 +// Copyright © 2019 153993236@qq.com. All rights reserved.
7 // 7 //
8 8
9 #import <UIKit/UIKit.h> 9 #import <UIKit/UIKit.h>
Example/CNLivePlayer/Streamer/CNLiveStreamerController.m
1 // 1 //
2 -// StreamerViewController.m  
3 -// CNLivePlayerSDKTest 2 +// CNLiveStreamerController.m
  3 +// CNLivePlayer_Example
4 // 4 //
5 -// Created by 雷浩杰 on 16/8/10.  
6 -// Copyright © 2016年 雷浩杰. All rights reserved. 5 +// Created by CNLive-zxw on 2019/8/17.
  6 +// Copyright © 2019 153993236@qq.com. All rights reserved.
7 // 7 //
8 8
9 #import "CNLiveStreamerController.h" 9 #import "CNLiveStreamerController.h"
10 -#import "StreamerDetailViewController.h" 10 +#import "CNLiveStreamerDetailController.h"
11 #import "AudioStreamingViewController.h" 11 #import "AudioStreamingViewController.h"
12 12
13 #define KScreenWidth [UIScreen mainScreen].bounds.size.width 13 #define KScreenWidth [UIScreen mainScreen].bounds.size.width
@@ -61,7 +61,7 @@ @@ -61,7 +61,7 @@
61 [self presentViewController:vc animated:YES completion:NULL]; 61 [self presentViewController:vc animated:YES completion:NULL];
62 } 62 }
63 else { 63 else {
64 - StreamerDetailViewController *vc = [[StreamerDetailViewController alloc] init]; 64 + CNLiveStreamerDetailController *vc = [[CNLiveStreamerDetailController alloc] init];
65 vc.isAuthLive = NO; 65 vc.isAuthLive = NO;
66 vc.url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",self.urlTextField.text]]; 66 vc.url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",self.urlTextField.text]];
67 [self presentViewController:vc animated:YES completion:NULL]; 67 [self presentViewController:vc animated:YES completion:NULL];
@@ -77,7 +77,7 @@ @@ -77,7 +77,7 @@
77 [self presentViewController:vc animated:YES completion:NULL]; 77 [self presentViewController:vc animated:YES completion:NULL];
78 } 78 }
79 else { 79 else {
80 - StreamerDetailViewController *vc = [[StreamerDetailViewController alloc] init]; 80 + CNLiveStreamerDetailController *vc = [[CNLiveStreamerDetailController alloc] init];
81 vc.isAuthLive = YES; 81 vc.isAuthLive = YES;
82 vc.url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",self.urlTextField.text]]; 82 vc.url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",self.urlTextField.text]];
83 [self presentViewController:vc animated:YES completion:NULL]; 83 [self presentViewController:vc animated:YES completion:NULL];
@@ -85,7 +85,7 @@ @@ -85,7 +85,7 @@
85 85
86 } 86 }
87 else if (sender.selectedSegmentIndex == 2) { 87 else if (sender.selectedSegmentIndex == 2) {
88 - StreamerDetailViewController *vc = [[StreamerDetailViewController alloc] init]; 88 + CNLiveStreamerDetailController *vc = [[CNLiveStreamerDetailController alloc] init];
89 vc.isRecord = YES; 89 vc.isRecord = YES;
90 [self presentViewController:vc animated:YES completion:NULL]; 90 [self presentViewController:vc animated:YES completion:NULL];
91 91
@@ -107,6 +107,7 @@ @@ -107,6 +107,7 @@
107 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 107 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
108 [toast dismissWithClickedButtonIndex:0 animated:NO]; 108 [toast dismissWithClickedButtonIndex:0 animated:NO];
109 }); 109 });
  110 +
110 } 111 }
111 112
112 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 113 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
@@ -131,7 +132,7 @@ @@ -131,7 +132,7 @@
131 _urlTextField.delegate = self; 132 _urlTextField.delegate = self;
132 _urlTextField.text = @"rtmp://jsrtmp.up.cnlive.com/live/ceshi"; 133 _urlTextField.text = @"rtmp://jsrtmp.up.cnlive.com/live/ceshi";
133 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, -30, 80, 30)]; 134 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, -30, 80, 30)];
134 - label.text = @"推流地址"; 135 + label.text = @"推流地址:";
135 label.font = [UIFont systemFontOfSize:15]; 136 label.font = [UIFont systemFontOfSize:15];
136 [_urlTextField addSubview:label]; 137 [_urlTextField addSubview:label];
137 } 138 }
@@ -154,7 +155,6 @@ @@ -154,7 +155,6 @@
154 NSArray *items = @[ @"普通直播", 155 NSArray *items = @[ @"普通直播",
155 @"鉴权直播", 156 @"鉴权直播",
156 @"本地录制"]; 157 @"本地录制"];
157 -  
158 _liveType = [[UISegmentedControl alloc] initWithItems:items]; 158 _liveType = [[UISegmentedControl alloc] initWithItems:items];
159 _liveType.frame = CGRectMake(10, self.view.bounds.size.height-80, self.view.bounds.size.width-20, 40); 159 _liveType.frame = CGRectMake(10, self.view.bounds.size.height-80, self.view.bounds.size.width-20, 40);
160 _liveType.tintColor= [UIColor blackColor]; 160 _liveType.tintColor= [UIColor blackColor];
Example/CNLivePlayer/Streamer/StreamerDetailViewController.h renamed to Example/CNLivePlayer/Streamer/CNLiveStreamerDetailController.h
1 // 1 //
2 -// LiveViewController.h 2 +// CNLiveStreamerDetailController.h
3 // CNLiveLiveDemo 3 // CNLiveLiveDemo
4 // 4 //
5 // Created by Android on 16/8/10. 5 // Created by Android on 16/8/10.
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 8
9 #import <UIKit/UIKit.h> 9 #import <UIKit/UIKit.h>
10 10
11 -@interface StreamerDetailViewController : UIViewController 11 +@interface CNLiveStreamerDetailController : UIViewController
12 12
13 @property (nonatomic, assign) BOOL isAuthLive; 13 @property (nonatomic, assign) BOOL isAuthLive;
14 @property (nonatomic, assign) BOOL isRecord; 14 @property (nonatomic, assign) BOOL isRecord;
Example/CNLivePlayer/Streamer/StreamerDetailViewController.m renamed to Example/CNLivePlayer/Streamer/CNLiveStreamerDetailController.m
1 // 1 //
2 -// LiveViewController.m 2 +// CNLiveStreamerDetailController.m
3 // CNLiveLiveDemo 3 // CNLiveLiveDemo
4 // 4 //
5 // Created by Android on 16/8/10. 5 // Created by Android on 16/8/10.
6 // Copyright © 2016年 Android. All rights reserved. 6 // Copyright © 2016年 Android. All rights reserved.
7 // 7 //
8 8
9 -#import "StreamerDetailViewController.h" 9 +#import "CNLiveStreamerDetailController.h"
10 #import "FilterFunctionView.h" 10 #import "FilterFunctionView.h"
11 #import "CNLivePlayerManager.h" 11 #import "CNLivePlayerManager.h"
12 -#import "AudioCfgView.h"  
13 -#import "LoadingView.h"  
14 -#import "MoreFunctionsView.h" 12 +#import "CNLiveVoiceSettingView.h"
  13 +
15 #import <GPUImage/GPUImage.h> 14 #import <GPUImage/GPUImage.h>
16 #import <YYImage/YYImage.h> 15 #import <YYImage/YYImage.h>
17 #import "FloatingViewController.h" 16 #import "FloatingViewController.h"
18 #import "CNLiveStreamerKit.h" 17 #import "CNLiveStreamerKit.h"
19 18
  19 +#import "CNLiveLoadingView.h"
  20 +#import "CNLiveMoreFunctionsView.h"
  21 +
20 #import "CNLiveAudioCapture.h" 22 #import "CNLiveAudioCapture.h"
21 #import "CNLiveBeautifyFaceFilter.h" 23 #import "CNLiveBeautifyFaceFilter.h"
22 #import "CNLiveStreamerBase.h" 24 #import "CNLiveStreamerBase.h"
23 #import "CNLiveWatermark.h" 25 #import "CNLiveWatermark.h"
24 26
25 -#define Width [UIScreen mainScreen].bounds.size.width  
26 -#define Height [UIScreen mainScreen].bounds.size.height 27 +#define Status_Bar_Height [[UIApplication sharedApplication] statusBarFrame].size.height
  28 +#define Bottom_Safe_Distance Status_Bar_Height >= 44 ? 59:10
  29 +#define Screen_Width [UIScreen mainScreen].bounds.size.width
  30 +#define Screen_Height [UIScreen mainScreen].bounds.size.height
27 31
28 #define SYSTEM_VERSION_GE_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 32 #define SYSTEM_VERSION_GE_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
29 33
30 -@interface StreamerDetailViewController ()<UIGestureRecognizerDelegate,LoadingViewDelegate>  
31 -{  
32 - UIButton *_startLiveBtn;  
33 - UIButton *_flashBtn;  
34 - UIButton *_previewBtn;  
35 - CGFloat _currentPinchZoomFactor;//当前触摸缩放因子 34 +@interface CNLiveStreamerDetailController()<UIGestureRecognizerDelegate, CNLiveLoadingViewDelegate> {
  35 + UIButton *_startLiveBtn; //开始推流
  36 + UIButton *_previewBtn; //预览按钮
  37 +
  38 + UIButton *_backBtn; //返回
  39 + UIButton *_cameraBtn; //相机
  40 + UIButton *_flashBtn; //打开闪光灯
  41 + UIButton *_filterBtn; //滤镜
  42 + UIButton *_voiceBtn; //声音
  43 + UIButton *_moreBtn; //更多
  44 +
36 45
37 - NSString *_bypassRecFile; // 旁路录制 46 + CGFloat _currentPinchZoomFactor; //当前触摸缩放因子
  47 +
  48 + NSString *_bypassRecFile; // 旁路录制
38 49
39 - YYImageDecoder * _animateDecoder; 50 + YYImageDecoder * _animateDecoder;
40 int _animateIdx; 51 int _animateIdx;
41 52
42 - NSTimeInterval _dlTime; 53 + NSTimeInterval _dlTime;
43 54
44 } 55 }
45 56
46 -@property (nonatomic,strong) UIView *captureView;  
47 -@property (nonatomic,strong) UILabel *stateLab;  
48 -@property (nonatomic,strong) NSURL *hostURL;  
49 -@property (nonatomic,strong) FilterFunctionView *filterView;  
50 -@property (nonatomic,strong) CNLiveStreamerKit *kitCN; //直播推流  
51 -@property (nonatomic,strong) AudioCfgView *audioCfgView; //声音相关设置  
52 -@property (nonatomic, strong) LoadingView *loadingView;  
53 -@property (nonatomic, strong) MoreFunctionsView *moreFuncsView; 57 +@property (nonatomic, strong) UIView *captureView;
  58 +
  59 +@property (nonatomic, strong) UILabel *stateLabel;
  60 +
  61 +@property (nonatomic, strong) NSURL *hostURL;
  62 +@property (nonatomic, strong) FilterFunctionView *filterView;
  63 +@property (nonatomic, strong) CNLiveStreamerKit *kitCN; //直播推流
  64 +@property (nonatomic, strong) CNLiveVoiceSettingView *voiceView; //声音相关设置
  65 +
  66 +@property (nonatomic, strong) CNLiveLoadingView *loadingView;
  67 +@property (nonatomic, strong) CNLiveMoreFunctionsView *moreView;
54 68
55 @property (nonatomic, strong) NSLock *dlLock; 69 @property (nonatomic, strong) NSLock *dlLock;
56 @property (nonatomic, strong) GPUImagePicture *logoPicure; 70 @property (nonatomic, strong) GPUImagePicture *logoPicure;
@@ -58,17 +72,17 @@ @@ -58,17 +72,17 @@
58 72
59 @end 73 @end
60 74
61 -@implementation StreamerDetailViewController  
62 - 75 +@implementation CNLiveStreamerDetailController
  76 +#pragma mark - 旋转
63 // 旋转处理,通过旋转bgView来做到画面相对手机静止不动 77 // 旋转处理,通过旋转bgView来做到画面相对手机静止不动
64 -- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator NS_AVAILABLE_IOS(8_0)  
65 -{ 78 +- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
66 [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 79 [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
67 80
68 // size 81 // size
69 CGSize screenSize = [UIScreen mainScreen].bounds.size; 82 CGSize screenSize = [UIScreen mainScreen].bounds.size;
70 CGFloat minLength = MIN(screenSize.width, screenSize.height); 83 CGFloat minLength = MIN(screenSize.width, screenSize.height);
71 CGFloat maxLength = MAX(screenSize.width, screenSize.height); 84 CGFloat maxLength = MAX(screenSize.width, screenSize.height);
  85 +
72 CGRect newFrame; 86 CGRect newFrame;
73 87
74 // frame 88 // frame
@@ -84,15 +98,19 @@ @@ -84,15 +98,19 @@
84 if (toDeviceOrientation == UIDeviceOrientationPortrait) { 98 if (toDeviceOrientation == UIDeviceOrientationPortrait) {
85 newTransform = CGAffineTransformIdentity; 99 newTransform = CGAffineTransformIdentity;
86 newFrame = CGRectMake(0, 0, minLength, maxLength); 100 newFrame = CGRectMake(0, 0, minLength, maxLength);
87 - } else { 101 + }
  102 + else {
  103 +
88 if (currentInterfaceOrientation == UIInterfaceOrientationPortrait) { 104 if (currentInterfaceOrientation == UIInterfaceOrientationPortrait) {
89 newTransform = CGAffineTransformMakeRotation(M_PI_2*(toDeviceOrientation == UIDeviceOrientationLandscapeRight ? 1 : -1)); 105 newTransform = CGAffineTransformMakeRotation(M_PI_2*(toDeviceOrientation == UIDeviceOrientationLandscapeRight ? 1 : -1));
90 - } else { 106 + }
  107 + else {
91 needStay = YES; 108 needStay = YES;
92 if (currentInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) { 109 if (currentInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
93 newTransform = CGAffineTransformRotate(_captureView.transform, M_PI * 1.00001); 110 newTransform = CGAffineTransformRotate(_captureView.transform, M_PI * 1.00001);
94 newTransformOfStay = CGAffineTransformRotate(_captureView.transform, M_PI); 111 newTransformOfStay = CGAffineTransformRotate(_captureView.transform, M_PI);
95 - }else{ 112 + }
  113 + else{
96 newTransform = CGAffineTransformRotate(_captureView.transform, SYSTEM_VERSION_GE_TO(@"8.0") ? 1.00001 * M_PI : M_PI * 0.99999); 114 newTransform = CGAffineTransformRotate(_captureView.transform, SYSTEM_VERSION_GE_TO(@"8.0") ? 1.00001 * M_PI : M_PI * 0.99999);
97 newTransformOfStay = CGAffineTransformRotate(_captureView.transform, M_PI); 115 newTransformOfStay = CGAffineTransformRotate(_captureView.transform, M_PI);
98 } 116 }
@@ -102,17 +120,16 @@ @@ -102,17 +120,16 @@
102 120
103 __weak typeof(self) weakSelf = self; 121 __weak typeof(self) weakSelf = self;
104 [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { 122 [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
105 -  
106 if(SYSTEM_VERSION_GE_TO(@"8.0")) { 123 if(SYSTEM_VERSION_GE_TO(@"8.0")) {
107 [self onViewRotate]; 124 [self onViewRotate];
108 } 125 }
109 -  
110 __strong __typeof(weakSelf) strongSelf = weakSelf; 126 __strong __typeof(weakSelf) strongSelf = weakSelf;
111 if (!strongSelf) { 127 if (!strongSelf) {
112 return ; 128 return ;
113 } 129 }
114 _captureView.transform = newTransform; 130 _captureView.transform = newTransform;
115 _captureView.frame = newFrame; 131 _captureView.frame = newFrame;
  132 +
116 } completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { 133 } completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
117 __strong __typeof(weakSelf)strongSelf = weakSelf; 134 __strong __typeof(weakSelf)strongSelf = weakSelf;
118 if (!strongSelf) { 135 if (!strongSelf) {
@@ -123,10 +140,8 @@ @@ -123,10 +140,8 @@
123 _captureView.frame = newFrame; 140 _captureView.frame = newFrame;
124 needStay = NO; 141 needStay = NO;
125 } 142 }
126 -  
127 - _previewBtn.frame = CGRectMake(5, Height-40, 90, 30);  
128 - _startLiveBtn.frame = CGRectMake(Width-95, Height-40, 90, 30);  
129 - _stateLab.frame = CGRectMake(0, Height/2-50, Width, 100); 143 + _previewBtn.frame = CGRectMake(20, Screen_Height-60, 90, 30);
  144 + _startLiveBtn.frame = CGRectMake(Screen_Width-90-20, Screen_Height-60, 90, 30);
130 145
131 }]; 146 }];
132 } 147 }
@@ -138,23 +153,22 @@ @@ -138,23 +153,22 @@
138 [self onViewRotate]; 153 [self onViewRotate];
139 } 154 }
140 155
  156 +- (void)onViewRotate {
  157 + UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
  158 + [_kitCN rotateStreamTo:orientation];
  159 +
  160 +}
  161 +
141 - (void)viewDidLoad { 162 - (void)viewDidLoad {
142 [super viewDidLoad]; 163 [super viewDidLoad];
143 164
144 self.view.backgroundColor = [UIColor whiteColor]; 165 self.view.backgroundColor = [UIColor whiteColor];
145 166
146 - [self.view addSubview:self.captureView];  
147 - [self.view addSubview:self.filterView];  
148 - [self.view addSubview:self.stateLab];  
149 - [self.view addSubview:self.audioCfgView];  
150 - [self.captureView addSubview:self.loadingView];  
151 - [self.view addSubview:self.moreFuncsView];  
152 [self createUI]; 167 [self createUI];
153 168
154 _bypassRecFile =[NSHomeDirectory() stringByAppendingString:@"/Library/Caches/rec.mp4"]; 169 _bypassRecFile =[NSHomeDirectory() stringByAppendingString:@"/Library/Caches/rec.mp4"];
155 170
156 if (_isAuthLive) { 171 if (_isAuthLive) {
157 -  
158 NSDate *date = [NSDate date]; 172 NSDate *date = [NSDate date];
159 NSInteger time = [date timeIntervalSince1970]; 173 NSInteger time = [date timeIntervalSince1970];
160 NSString *activityId = [NSString stringWithFormat:@"%ld", (long)time]; 174 NSString *activityId = [NSString stringWithFormat:@"%ld", (long)time];
@@ -162,62 +176,89 @@ @@ -162,62 +176,89 @@
162 _kitCN = [[CNLiveStreamerKit alloc] initVodStreamerWithDefaultConfig]; 176 _kitCN = [[CNLiveStreamerKit alloc] initVodStreamerWithDefaultConfig];
163 _kitCN.activityId = activityId; 177 _kitCN.activityId = activityId;
164 _kitCN.channelId = @"498122"; 178 _kitCN.channelId = @"498122";
165 -// _kitCN.isHorizontalScreen = YES;  
166 179
167 //设置重连参数 180 //设置重连参数
168 _kitCN.maxAutoRetry = 3; 181 _kitCN.maxAutoRetry = 3;
169 _kitCN.autoRetryDelay = 5; 182 _kitCN.autoRetryDelay = 5;
170 -  
171 - [self setStreamerCfg];  
172 - [self addObservers];  
173 -  
174 - //声音相关设置  
175 - [self audioCfg];  
176 - [self moreFunctionCfg];  
177 -  
178 183
179 }else{ 184 }else{
180 -  
181 _kitCN = [[CNLiveStreamerKit alloc] initWithDefaultConfig:NO]; 185 _kitCN = [[CNLiveStreamerKit alloc] initWithDefaultConfig:NO];
182 _hostURL = _url; 186 _hostURL = _url;
183 187
184 - [self setStreamerCfg];  
185 - [self addObservers];  
186 - [self audioCfg];  
187 - [self moreFunctionCfg];  
188 } 188 }
189 189
190 - __weak StreamerDetailViewController *weakself = self; 190 + //通知
  191 + [self addObservers];
  192 +
  193 + //推流器配置
  194 + [self setStreamerConfig];
  195 + //声音相关设置
  196 + [self voiceConfig];
  197 + //更多配置
  198 + [self moreFunctionsConfig];
  199 +
  200 + __weak typeof(self) weakSelf = self;
191 _kitCN.streamerBase.bypassRecordStateChange = ^(CNLiveRecordState state) { 201 _kitCN.streamerBase.bypassRecordStateChange = ^(CNLiveRecordState state) {
192 //旁路录制状态改变会调用该block 202 //旁路录制状态改变会调用该block
193 - [weakself onBypassRecordStateChange:state]; 203 + __strong typeof(self) strongSelf = weakSelf;
  204 + if(!strongSelf){
  205 + return ;
  206 + }
  207 + [strongSelf onBypassRecordStateChange:state];
  208 +
194 }; 209 };
195 210
196 } 211 }
197 212
  213 +#pragma mark - UI
198 - (void)createUI { 214 - (void)createUI {
199 - _startLiveBtn = [self addTextButton:@"开始推流" selectedTitle:@"停止推流" frame:CGRectMake(Width-95, Height-40, 90, 30) radius:7 action:@selector(startStreaming:)];  
200 - _previewBtn = [self addTextButton:@"关闭预览" selectedTitle:@"开启预览" frame:CGRectMake(5, Height-40, 90, 30) radius:7 action:@selector(startPreview:)]; 215 + //预览视图
  216 + [self.view addSubview:self.captureView];
  217 + //滤镜视图
  218 + [self.view addSubview:self.filterView];
  219 + //状态提示
  220 + [self.view addSubview:self.stateLabel];
  221 + //声音设置
  222 + [self.view addSubview:self.voiceView];
  223 + //加载loading
  224 + [self.captureView addSubview:self.loadingView];
  225 + //更多视图
  226 + [self.view addSubview:self.moreView];
201 227
202 - [self addImageBtn:[UIImage imageNamed:@"back"] selectedImg:nil frame:CGRectMake(20, 20, 33, 33) action:@selector(quit)];  
203 - [self addImageBtn:[UIImage imageNamed:@"camera"] selectedImg:nil frame:CGRectMake(70, 20, 33, 33) action:@selector(changeCamera:)];  
204 - _flashBtn = [self addImageBtn:[UIImage imageNamed:@"flash close"] selectedImg:[UIImage imageNamed:@"flash open"] frame:CGRectMake(120, 20, 33, 33) action:@selector(flash:)];  
205 - [self addImageBtn:[UIImage imageNamed:@"filter"] selectedImg:[UIImage imageNamed:@"filter"] frame:CGRectMake(170, 20, 33, 33) action:@selector(openFilter:)];  
206 - [self addImageBtn:[UIImage imageNamed:@"voice"] selectedImg:[UIImage imageNamed:@"voice"] frame:CGRectMake(220, 20, 33, 33) action:@selector(voiceCfg:)];  
207 - [self addImageBtn:[UIImage imageNamed:@"更多"] selectedImg:[UIImage imageNamed:@"更多"] frame:CGRectMake(Width-53, 20, 33, 33) action:@selector(moreFunction:)]; 228 + CGFloat btnWidth = 90;
  229 + CGFloat btnHeight = 30;
208 230
209 - UITapGestureRecognizer * singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)];  
210 - singleRecognizer.delegate = self;  
211 - [self.captureView addGestureRecognizer:singleRecognizer]; 231 + CGFloat btnMargin = Status_Bar_Height+10;
  232 +
  233 + //开始推流
  234 + _startLiveBtn = [self addTextButton:@"开始推流" selectedTitle:@"停止推流" frame:CGRectMake(Screen_Width-btnWidth-10, Screen_Height-btnHeight-30, btnWidth, btnHeight) radius:7 action:@selector(startLiving:)];
  235 + //关闭预览
  236 + _previewBtn = [self addTextButton:@"关闭预览" selectedTitle:@"开启预览" frame:CGRectMake(10, Screen_Height-btnHeight-30, btnWidth, btnHeight) radius:7 action:@selector(startPreview:)];
  237 + //返回
  238 + _backBtn = [self addImageBtn:[UIImage imageNamed:@"back"] selectedImg:nil frame:CGRectMake(10, btnMargin, btnHeight, btnHeight) action:@selector(backBtnDidClicked)];
  239 + //相机
  240 + _cameraBtn = [self addImageBtn:[UIImage imageNamed:@"camera"] selectedImg:nil frame:CGRectMake(70, btnMargin, btnHeight, btnHeight) action:@selector(cameraBtnDidClicked:)];
  241 + //闪光灯
  242 + _flashBtn = [self addImageBtn:[UIImage imageNamed:@"flash close"] selectedImg:[UIImage imageNamed:@"flash open"] frame:CGRectMake(120, btnMargin, btnHeight, btnHeight) action:@selector(flashBtnDidClicked:)];
212 243
213 - UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchDetected:)]; 244 + //滤镜
  245 + _filterBtn = [self addImageBtn:[UIImage imageNamed:@"filter"] selectedImg:[UIImage imageNamed:@"filter"] frame:CGRectMake(170, btnMargin, btnHeight, btnHeight) action:@selector(filterBtnDidClicked:)];
  246 + //声音
  247 + _voiceBtn = [self addImageBtn:[UIImage imageNamed:@"voice"] selectedImg:[UIImage imageNamed:@"voice"] frame:CGRectMake(220, btnMargin, btnHeight, btnHeight) action:@selector(voiceBtnDidClicked:)];
  248 + //更多
  249 + _moreBtn = [self addImageBtn:[UIImage imageNamed:@"更多"] selectedImg:[UIImage imageNamed:@"更多"] frame:CGRectMake(Screen_Width-btnHeight-10, btnMargin, btnHeight, btnHeight) action:@selector(moreBtnDidClicked:)];
  250 +
  251 + UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)];
  252 + tapRecognizer.delegate = self;
  253 + [self.captureView addGestureRecognizer:tapRecognizer];
  254 +
  255 + UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(onPinch:)];
214 [self.view addGestureRecognizer:pinch]; 256 [self.view addGestureRecognizer:pinch];
215 257
216 } 258 }
217 259
218 #pragma mark - initialization 260 #pragma mark - initialization
219 -- (void)setStreamerCfg  
220 -{ 261 +- (void)setStreamerConfig {
221 //采集配置 262 //采集配置
222 _kitCN.capPreset = AVCaptureSessionPreset1280x720; 263 _kitCN.capPreset = AVCaptureSessionPreset1280x720;
223 _kitCN.previewDimension = CGSizeMake(720, 1280); 264 _kitCN.previewDimension = CGSizeMake(720, 1280);
@@ -234,12 +275,11 @@ @@ -234,12 +275,11 @@
234 _kitCN.streamerBase.audiokBPS = 48; 275 _kitCN.streamerBase.audiokBPS = 48;
235 276
236 //设置画面朝向 277 //设置画面朝向
237 - [_kitCN setVideoOrientationBy:[[UIApplication sharedApplication] statusBarOrientation]]; 278 + [_kitCN setVideoOrientation:[[UIApplication sharedApplication] statusBarOrientation]];
238 [_kitCN startPreview:self.captureView]; 279 [_kitCN startPreview:self.captureView];
239 280
240 //水印图片 281 //水印图片
241 - _kitCN.watermark.logoPic = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"互动电视180x180"]];  
242 -; 282 + _kitCN.watermark.logoPic = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"logo"]];
243 _kitCN.watermark.logoRect = CGRectMake(0.05, 0.05, 60, 60); 283 _kitCN.watermark.logoRect = CGRectMake(0.05, 0.05, 60, 60);
244 _kitCN.watermark.logoAlpha = 0.6; 284 _kitCN.watermark.logoAlpha = 0.6;
245 285
@@ -251,19 +291,130 @@ @@ -251,19 +291,130 @@
251 [_kitCN.watermark updateTextLabel]; 291 [_kitCN.watermark updateTextLabel];
252 292
253 } 293 }
254 -  
255 -#pragma mark -  
256 -#pragma mark - 旋转  
257 -- (void)onViewRotate {  
258 - UIInterfaceOrientation orie = [[UIApplication sharedApplication] statusBarOrientation];  
259 - [_kitCN rotateStreamTo:orie];  
260 - 294 +- (void)voiceConfig{
  295 + //声音相关设置
  296 + __weak typeof(self) weakSelf = self;
  297 + _voiceView.audioEffectBlock = ^(int type) { //音效
  298 + __strong typeof(self) strongSelf = weakSelf;
  299 + if(!strongSelf){
  300 + return ;
  301 + }
  302 + strongSelf.kitCN.audioCapture.audioEffectType = type;
  303 + };
  304 +
  305 + _voiceView.reverbTypeBlock = ^(int type) { //混响
  306 + __strong typeof(self) strongSelf = weakSelf;
  307 + if(!strongSelf){
  308 + return ;
  309 + }
  310 + strongSelf.kitCN.audioCapture.reverbType = type;
  311 + };
  312 +
  313 + _voiceView.bPlayCapturedAudio = ^(BOOL isOn) { //耳返
  314 + __strong typeof(self) strongSelf = weakSelf;
  315 + if(!strongSelf){
  316 + return ;
  317 + }
  318 + if ([CNLiveAudioCapture isHeadsetPluggedIn]) {
  319 + [strongSelf.kitCN.audioCapture setBPlayCapturedAudio:isOn];
  320 + }
  321 + else {
  322 + strongSelf.voiceView.bPlaySwitch.on = NO;
  323 + [strongSelf toast:@"未检测到耳机"];
  324 + }
  325 + };
  326 +
  327 + _voiceView.micVolumeBlock = ^(float micVolume) { //麦克风音量
  328 + __strong typeof(self) strongSelf = weakSelf;
  329 + if(!strongSelf){
  330 + return ;
  331 + }
  332 + strongSelf.kitCN.audioCapture.micVolume = micVolume;
  333 + };
  334 +
  335 + _voiceView.bPlayVolumeBlock = ^(float bPlayVolume) { //耳返音量
  336 + __strong typeof(self) strongSelf = weakSelf;
  337 + if(!strongSelf){
  338 + return ;
  339 + }
  340 + strongSelf.kitCN.audioCapture.bPlayVolume = bPlayVolume;
  341 + };
  342 +
261 } 343 }
262 344
263 -#pragma mark - Action 345 +- (void)moreFunctionsConfig{
  346 + __weak typeof(self) weakSelf = self;
  347 +
  348 + _moreView.moreBlock = ^(CNLiveMoreFunctionsType type, NSInteger idx, UISegmentedControl *seg) {
  349 + __strong typeof(self) strongSelf = weakSelf;
  350 + if(!strongSelf){
  351 + return ;
  352 + }
  353 + if (type == CNLiveMoreFunctionsScreenshot) { //截图
  354 + seg.selectedSegmentIndex = -1;
  355 +
  356 + switch (idx) {
  357 + case 0: {
  358 + NSDate *date = [NSDate date];
  359 + NSInteger time = [date timeIntervalSince1970];
  360 + NSString *path = [NSString stringWithFormat:@"snapshot/%ld.jpg", (long)time];
  361 + [strongSelf.kitCN.streamerBase takePhotoWithQuality:1 fileName:path];
  362 + }
  363 + break;
  364 + case 1: {
  365 + [strongSelf.kitCN.streamerBase getSnapshotWithCompletion:^(UIImage *img){
  366 + //所截图片
  367 + }];
  368 + }
  369 + break;
  370 +
  371 + default:
  372 + break;
  373 + }
  374 +
  375 + } else if (type == CNLiveMoreFunctionsLiveScene) {
  376 + //直播场景
  377 + strongSelf.kitCN.streamerBase.liveScene = (CNLiveLiveScene)idx;
  378 +
  379 + } else if (type == CNLiveMoreFunctionsRecordScene) {
  380 + //录制场景
  381 + strongSelf.kitCN.streamerBase.recScene = (CNLiveRecScene)idx;
  382 +
  383 + } else {
  384 + //logo
  385 + switch (idx) {
  386 + case 0: {
  387 + [strongSelf.dlLock lock];
  388 + _animateDecoder = nil;
  389 + strongSelf.kitCN.watermark.logoPic = nil;
  390 + [strongSelf.dlLock unlock];
  391 + }
  392 + break;
  393 + case 1: {
  394 + [strongSelf.dlLock lock];
  395 + _animateDecoder = nil;
  396 + strongSelf.kitCN.watermark.logoPic = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"logo"]];
  397 + [strongSelf.dlLock unlock];
  398 + }
  399 + break;
  400 + case 2: {
  401 + [strongSelf setupAnimateLogo:[[NSBundle mainBundle] pathForResource:@"house" ofType:@"gif"]];
  402 +
  403 + }
  404 + break;
  405 +
  406 + default:
  407 + break;
  408 + }
  409 + }
  410 +
  411 + };
  412 +
  413 +
  414 +}
264 415
265 -- (void)startPreview:(UIButton *)button  
266 -{ 416 +#pragma mark - 响应方法
  417 +- (void)startPreview:(UIButton *)button {
267 button.selected = !button.selected; 418 button.selected = !button.selected;
268 if (button.selected) { 419 if (button.selected) {
269 _startLiveBtn.enabled = NO; 420 _startLiveBtn.enabled = NO;
@@ -278,75 +429,62 @@ @@ -278,75 +429,62 @@
278 } 429 }
279 } 430 }
280 431
281 -- (void)startStreaming:(UIButton *)button  
282 -{ 432 +- (void)startLiving:(UIButton *)button {
283 button.selected = !button.selected; 433 button.selected = !button.selected;
284 434
285 if (button.selected) { 435 if (button.selected) {
286 -  
287 if (!_isRecord) { //若不是本地录制 436 if (!_isRecord) { //若不是本地录制
288 -  
289 if (_isAuthLive) { 437 if (_isAuthLive) {
290 -  
291 [_loadingView setLoadingViewStyle:LoadingViewStyleStartLoading]; 438 [_loadingView setLoadingViewStyle:LoadingViewStyleStartLoading];
292 -  
293 //SDK内部创建活动并开启推流 439 //SDK内部创建活动并开启推流
294 [_kitCN startStream:^{ 440 [_kitCN startStream:^{
295 [_loadingView setLoadingViewStyle:LoadingViewStyleStopLoading]; 441 [_loadingView setLoadingViewStyle:LoadingViewStyleStopLoading];
296 NSLog(@"开启推流成功 ------- success"); 442 NSLog(@"开启推流成功 ------- success");
  443 +
297 } failure:^(NSDictionary *errorDic) { 444 } failure:^(NSDictionary *errorDic) {
298 [_loadingView setLoadingViewStyle:LoadingViewStyleStopLoading]; 445 [_loadingView setLoadingViewStyle:LoadingViewStyleStopLoading];
299 [self toast:errorDic[@"errorMessage"]]; 446 [self toast:errorDic[@"errorMessage"]];
300 _startLiveBtn.selected = NO; 447 _startLiveBtn.selected = NO;
301 }]; 448 }];
302 449
303 - //由后台创建活动,SDK只负责开启活动  
304 -// [_kitCN startStreamWithUrl:@"rtmp://jsrtmp.up.cnlive.com/live/60_iostest?vdoid=60_1496281944" activityId:@"60_1496281944" success:^{  
305 -// [_loadingView setLoadingViewStyle:LoadingViewStyleStopLoading];  
306 -// NSLog(@"开启推流成功 ------- success");  
307 -// } failure:^(NSDictionary *errorDic) {  
308 -// [_loadingView setLoadingViewStyle:LoadingViewStyleStopLoading];  
309 -// [self toast:errorDic[@"errorMessage"]];  
310 -// _startLiveBtn.selected = NO;  
311 -// }];  
312 -  
313 }else{ 450 }else{
314 [_kitCN startStream:_hostURL]; 451 [_kitCN startStream:_hostURL];
315 } 452 }
316 453
317 - } else {  
318 - 454 + }
  455 + else {
319 NSDate *date = [NSDate date]; 456 NSDate *date = [NSDate date];
320 NSInteger time = [date timeIntervalSince1970]; 457 NSInteger time = [date timeIntervalSince1970];
321 NSString *videoName = [NSString stringWithFormat:@"%ld", (long)time]; 458 NSString *videoName = [NSString stringWithFormat:@"%ld", (long)time];
322 -  
323 //存储地址 459 //存储地址
324 NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp4", videoName]]; 460 NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp4", videoName]];
325 _hostURL = [NSURL URLWithString:path]; 461 _hostURL = [NSURL URLWithString:path];
326 [_kitCN startStream:_hostURL]; 462 [_kitCN startStream:_hostURL];
  463 +
327 } 464 }
328 465
329 - }else{  
330 - 466 + }
  467 + else{
331 if (!_isRecord) { 468 if (!_isRecord) {
332 [_kitCN stopStream]; 469 [_kitCN stopStream];
333 - } else { 470 + }
  471 + else {
334 [_kitCN stopRecord]; 472 [_kitCN stopRecord];
335 473
336 [self saveVideoToAlbum:[_hostURL absoluteString]]; 474 [self saveVideoToAlbum:[_hostURL absoluteString]];
337 } 475 }
338 - _stateLab.text = nil; 476 + _stateLabel.text = nil;
339 } 477 }
340 } 478 }
341 479
342 -- (void)openFilter:(UIButton *)button {  
343 - _audioCfgView.hidden = YES;  
344 - _moreFuncsView.hidden = YES; 480 +- (void)filterBtnDidClicked:(UIButton *)button {
  481 + _voiceView.hidden = YES;
  482 + _moreView.hidden = YES;
345 _filterView.hidden = !_filterView.hidden; 483 _filterView.hidden = !_filterView.hidden;
346 484
347 if (_filterView.hidden == NO) { 485 if (_filterView.hidden == NO) {
348 486
349 - __weak StreamerDetailViewController *weakself = self; 487 + __weak CNLiveStreamerDetailController *weakself = self;
350 488
351 _filterView.filterViewBlock = ^(float grindRatio , float whitenRatio, float intensity){ 489 _filterView.filterViewBlock = ^(float grindRatio , float whitenRatio, float intensity){
352 490
@@ -369,21 +507,21 @@ @@ -369,21 +507,21 @@
369 } 507 }
370 } 508 }
371 509
372 -- (void)changeCamera:(UIButton *)button { 510 +- (void)cameraBtnDidClicked:(UIButton *)button {
373 [_kitCN switchCamera]; 511 [_kitCN switchCamera];
374 if (![_kitCN isTorchSupported]) { 512 if (![_kitCN isTorchSupported]) {
375 _flashBtn.selected = NO; 513 _flashBtn.selected = NO;
376 } 514 }
377 } 515 }
378 516
379 -- (void)flash:(UIButton *)button { 517 +- (void)flashBtnDidClicked:(UIButton *)button {
380 if ([_kitCN isTorchSupported]) { 518 if ([_kitCN isTorchSupported]) {
381 [_kitCN toggleTorch]; 519 [_kitCN toggleTorch];
382 button.selected = !button.selected; 520 button.selected = !button.selected;
383 } 521 }
384 } 522 }
385 523
386 -- (void)quit { 524 +- (void)backBtnDidClicked {
387 if (_kitCN.streamState == CNLiveStreamStateConnected) { 525 if (_kitCN.streamState == CNLiveStreamStateConnected) {
388 [_kitCN stopStream]; 526 [_kitCN stopStream];
389 } 527 }
@@ -403,7 +541,7 @@ @@ -403,7 +541,7 @@
403 - (void)bypassRecordOn:(UISwitch *)sender { 541 - (void)bypassRecordOn:(UISwitch *)sender {
404 542
405 BOOL bRec = _kitCN.streamerBase.bypassRecordState == CNLiveRecordStateRecording; 543 BOOL bRec = _kitCN.streamerBase.bypassRecordState == CNLiveRecordStateRecording;
406 - if (_moreFuncsView.bypassRecord.on){ 544 + if (_moreView.bypassRecord.on){
407 if ( _kitCN.streamerBase.isStreaming && !bRec){ 545 if ( _kitCN.streamerBase.isStreaming && !bRec){
408 // 如果启动录像时使用和上次相同的路径,则会覆盖掉上一次录像的文件内容 546 // 如果启动录像时使用和上次相同的路径,则会覆盖掉上一次录像的文件内容
409 [self deleteFile:_bypassRecFile]; 547 [self deleteFile:_bypassRecFile];
@@ -414,7 +552,7 @@ @@ -414,7 +552,7 @@
414 else { 552 else {
415 NSString * msg = @"推流过程中才能旁路录像"; 553 NSString * msg = @"推流过程中才能旁路录像";
416 [self toast:msg]; 554 [self toast:msg];
417 - _moreFuncsView.bypassRecord.on = NO; 555 + _moreView.bypassRecord.on = NO;
418 } 556 }
419 } 557 }
420 else if (bRec){ 558 else if (bRec){
@@ -423,7 +561,7 @@ @@ -423,7 +561,7 @@
423 561
424 } 562 }
425 563
426 -- (void)floatingWindowBtnAction { 564 +- (void)floatingWindowBtnClicked {
427 FloatingViewController *vc = [[FloatingViewController alloc] init]; 565 FloatingViewController *vc = [[FloatingViewController alloc] init];
428 vc.kit = _kitCN; 566 vc.kit = _kitCN;
429 [self presentViewController:vc animated:YES completion:NULL]; 567 [self presentViewController:vc animated:YES completion:NULL];
@@ -431,8 +569,7 @@ @@ -431,8 +569,7 @@
431 569
432 570
433 //对焦与曝光 571 //对焦与曝光
434 -- (void)onTap:(UIGestureRecognizer *)sender  
435 -{ 572 +- (void)onTap:(UIGestureRecognizer *)sender {
436 CGPoint current = [sender locationInView:self.view]; 573 CGPoint current = [sender locationInView:self.view];
437 CGPoint point = [self convertToPointOfInterestFromViewCoordinates:current]; 574 CGPoint point = [self convertToPointOfInterestFromViewCoordinates:current];
438 [_kitCN exposureAtPoint:point]; 575 [_kitCN exposureAtPoint:point];
@@ -440,7 +577,7 @@ @@ -440,7 +577,7 @@
440 } 577 }
441 578
442 //缩放 579 //缩放
443 -- (void)pinchDetected:(UIPinchGestureRecognizer *)recognizer{ 580 +- (void)onPinch:(UIPinchGestureRecognizer *)recognizer{
444 if (recognizer.state == UIGestureRecognizerStateBegan) { 581 if (recognizer.state == UIGestureRecognizerStateBegan) {
445 _currentPinchZoomFactor = _kitCN.pinchZoomFactor; 582 _currentPinchZoomFactor = _kitCN.pinchZoomFactor;
446 } 583 }
@@ -448,118 +585,16 @@ @@ -448,118 +585,16 @@
448 [_kitCN setPinchZoomFactor:zoomFactor]; 585 [_kitCN setPinchZoomFactor:zoomFactor];
449 } 586 }
450 587
451 -- (void)voiceCfg:(UIButton *)button { 588 +- (void)voiceBtnDidClicked:(UIButton *)button {
452 _filterView.hidden = YES; 589 _filterView.hidden = YES;
453 - _moreFuncsView.hidden = YES;  
454 - _audioCfgView.hidden = !_audioCfgView.hidden; 590 + _moreView.hidden = YES;
  591 + _voiceView.hidden = !_voiceView.hidden;
455 } 592 }
456 593
457 -- (void)moreFunction:(UIButton *)button { 594 +- (void)moreBtnDidClicked:(UIButton *)button {
458 _filterView.hidden = YES; 595 _filterView.hidden = YES;
459 - _audioCfgView.hidden = YES;  
460 - _moreFuncsView.hidden = !_moreFuncsView.hidden;  
461 -}  
462 -  
463 -- (void)audioCfg {  
464 - //声音相关设置  
465 - __weak StreamerDetailViewController *weakself = self;  
466 -  
467 - _audioCfgView.audioEffectBlock = ^(int type) { //音效  
468 - weakself.kitCN.audioCapture.audioEffectType = type;  
469 - };  
470 -  
471 - _audioCfgView.reverbTypeBlock = ^(int type) { //混响  
472 - weakself.kitCN.audioCapture.reverbType = type;  
473 - };  
474 -  
475 - _audioCfgView.bPlayCapturedAudio = ^(BOOL isOn) { //耳返  
476 - if ([CNLiveAudioCapture isHeadsetPluggedIn]) {  
477 - [weakself.kitCN.audioCapture setBPlayCapturedAudio:isOn];  
478 - } else {  
479 - weakself.audioCfgView.bPlaySwitch.on = NO;  
480 - [weakself toast:@"未检测到耳机"];  
481 - }  
482 - };  
483 -  
484 - _audioCfgView.micVolumeBlock = ^(float micVolume) { //麦克风音量  
485 - weakself.kitCN.audioCapture.micVolume = micVolume;  
486 - };  
487 -  
488 - _audioCfgView.bPlayVolumeBlock = ^(float bPlayVolume) { //耳返音量  
489 - weakself.kitCN.audioCapture.bPlayVolume = bPlayVolume;  
490 - };  
491 -  
492 -}  
493 -  
494 -- (void)moreFunctionCfg {  
495 -  
496 - __weak StreamerDetailViewController *weakself = self;  
497 -  
498 - _moreFuncsView.moreFuncBlock = ^(MoreFuncType type, NSInteger idx, UISegmentedControl *seg) {  
499 -  
500 - NSLog(@"type:%lu--idx:%ld", (unsigned long)type,(long)idx);  
501 -  
502 - if (type == MoreFuncTypeScreenshot) { //截图  
503 -  
504 - seg.selectedSegmentIndex = -1;  
505 -  
506 - switch (idx) {  
507 - case 0: {  
508 - NSString *path = @"snapshot/c.jpg";  
509 - [weakself.kitCN.streamerBase takePhotoWithQuality:1 fileName:path];  
510 - NSLog(@"Snapshot save to %@", path);  
511 - }  
512 - break;  
513 - case 1: {  
514 - [weakself.kitCN.streamerBase getSnapshotWithCompletion:^(UIImage * img){  
515 - //所截图片  
516 - }];  
517 - }  
518 - break;  
519 -  
520 - default:  
521 - break;  
522 - }  
523 -  
524 - } else if (type == MoreFuncTypeLiveScene) { //直播场景  
525 -  
526 - weakself.kitCN.streamerBase.liveScene = (CNLiveLiveScene)idx;  
527 -  
528 - } else if (type == MoreFuncTypeRecordScene) { //录制场景  
529 -  
530 - weakself.kitCN.streamerBase.recScene = (CNLiveRecScene)idx;  
531 -  
532 - } else { //logo  
533 -  
534 - switch (idx) {  
535 - case 0: {  
536 - [weakself.dlLock lock];  
537 - _animateDecoder = nil;  
538 - weakself.kitCN.watermark.logoPic = nil;  
539 - [weakself.dlLock unlock];  
540 - }  
541 - break;  
542 - case 1: {  
543 - [weakself.dlLock lock];  
544 - _animateDecoder = nil;  
545 - weakself.kitCN.watermark.logoPic = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"互动电视180x180"]];  
546 - [weakself.dlLock unlock];  
547 - }  
548 - break;  
549 - case 2: {  
550 -  
551 - [weakself setupAnimateLogo:[[NSBundle mainBundle] pathForResource:@"house" ofType:@"gif"]];  
552 - }  
553 - break;  
554 -  
555 - default:  
556 - break;  
557 - }  
558 - }  
559 -  
560 - };  
561 -  
562 - 596 + _voiceView.hidden = YES;
  597 + _moreView.hidden = !_moreView.hidden;
563 } 598 }
564 599
565 - (void)setupAnimateLogo:(NSString *)path { 600 - (void)setupAnimateLogo:(NSString *)path {
@@ -583,7 +618,7 @@ @@ -583,7 +618,7 @@
583 return; 618 return;
584 } 619 }
585 [_dlLock lock]; 620 [_dlLock lock];
586 - YYImageFrame* frame = [_animateDecoder frameAtIndex:_animateIdx 621 + YYImageFrame * frame = [_animateDecoder frameAtIndex:_animateIdx
587 decodeForDisplay:NO]; 622 decodeForDisplay:NO];
588 if (frame.image) { 623 if (frame.image) {
589 _kitCN.watermark.logoPic = [[GPUImagePicture alloc] initWithImage:frame.image]; 624 _kitCN.watermark.logoPic = [[GPUImagePicture alloc] initWithImage:frame.image];
@@ -609,17 +644,15 @@ @@ -609,17 +644,15 @@
609 }); 644 });
610 } 645 }
611 646
612 -#pragma mark -  
613 -#pragma mark - nitification  
614 -- (void)addObservers  
615 -{ 647 +#pragma mark - 通知
  648 +- (void)addObservers {
616 [[NSNotificationCenter defaultCenter] addObserver:self 649 [[NSNotificationCenter defaultCenter] addObserver:self
617 - selector:@selector(captureStateChange) 650 + selector:@selector(captureStateChanged)
618 name:CNLiveCaptureStateDidChangeNotification 651 name:CNLiveCaptureStateDidChangeNotification
619 object:nil]; 652 object:nil];
620 653
621 [[NSNotificationCenter defaultCenter] addObserver:self 654 [[NSNotificationCenter defaultCenter] addObserver:self
622 - selector:@selector(streamStateChange) 655 + selector:@selector(streamStateChanged)
623 name:CNLiveStreamerStateDidChangeNotification 656 name:CNLiveStreamerStateDidChangeNotification
624 object:nil]; 657 object:nil];
625 658
@@ -627,90 +660,64 @@ @@ -627,90 +660,64 @@
627 selector:@selector(reconnectStatusChanged) 660 selector:@selector(reconnectStatusChanged)
628 name:CNLiveStreamerReconnectStatusChangedNotification 661 name:CNLiveStreamerReconnectStatusChangedNotification
629 object:nil]; 662 object:nil];
630 -  
631 - [[NSNotificationCenter defaultCenter] addObserver:self  
632 - selector:@selector(enterBg)  
633 - name:UIApplicationDidEnterBackgroundNotification  
634 - object:nil];  
635 -  
636 - [[NSNotificationCenter defaultCenter] addObserver:self  
637 - selector:@selector(becameActive)  
638 - name:UIApplicationDidBecomeActiveNotification  
639 - object:nil];  
640 } 663 }
641 664
642 -#pragma mark - notification  
643 -  
644 -- (void)enterBg  
645 -{  
646 -// [_kitCN appEnterBackground];  
647 -}  
648 -  
649 -- (void)becameActive  
650 -{  
651 -// [_kitCN appBecomeActive];  
652 -}  
653 -  
654 -- (void)captureStateChange  
655 -{  
656 - 665 +- (void)captureStateChanged {
657 if ( _kitCN.captureState == CNLiveCaptureStateIdle){ 666 if ( _kitCN.captureState == CNLiveCaptureStateIdle){
658 //初始化时状态为空闲 667 //初始化时状态为空闲
659 - _stateLab.text = @"CNLiveCaptureStateIdle"; 668 + _stateLabel.text = @"CNLiveCaptureStateIdle";
660 669
661 return; 670 return;
662 } 671 }
663 else if (_kitCN.captureState == CNLiveCaptureStateCapturing ) { 672 else if (_kitCN.captureState == CNLiveCaptureStateCapturing ) {
664 //设备工作中 673 //设备工作中
665 - _stateLab.text = @"CNLiveCaptureStateCapturing"; 674 + _stateLabel.text = @"CNLiveCaptureStateCapturing";
666 675
667 return; 676 return;
668 } 677 }
669 else if (_kitCN.captureState == CNLiveCaptureStateClosingCapture ) { 678 else if (_kitCN.captureState == CNLiveCaptureStateClosingCapture ) {
670 //关闭采集设备中 679 //关闭采集设备中
671 - _stateLab.text = @"CNLiveCaptureStateClosingCapture"; 680 + _stateLabel.text = @"CNLiveCaptureStateClosingCapture";
672 681
673 return; 682 return;
674 } 683 }
675 else if (_kitCN.captureState == CNLiveCaptureStateDevAuthDenied ) { 684 else if (_kitCN.captureState == CNLiveCaptureStateDevAuthDenied ) {
676 //设备授权被拒绝 685 //设备授权被拒绝
677 NSLog(@"---------CNLiveCaptureStateDevAuthDenied"); 686 NSLog(@"---------CNLiveCaptureStateDevAuthDenied");
678 - _stateLab.text = @"camera/mic Authorization Denied"; 687 + _stateLabel.text = @"camera/mic Authorization Denied";
679 688
680 return; 689 return;
681 } 690 }
682 else if (_kitCN.captureState == CNLiveCaptureStateParameterError ) { 691 else if (_kitCN.captureState == CNLiveCaptureStateParameterError ) {
683 // 参数错误,无法打开 692 // 参数错误,无法打开
684 NSLog(@"---------CNLiveCaptureStateParameterError"); 693 NSLog(@"---------CNLiveCaptureStateParameterError");
685 - _stateLab.text = @"capture devices ParameterError"; 694 + _stateLabel.text = @"capture devices ParameterError";
686 695
687 return; 696 return;
688 } 697 }
689 else if (_kitCN.captureState == CNLiveCaptureStateDevBusy ) { 698 else if (_kitCN.captureState == CNLiveCaptureStateDevBusy ) {
690 //设备正忙,请稍后尝试 699 //设备正忙,请稍后尝试
691 NSLog(@"---------CNLiveCaptureStateDevBusy"); 700 NSLog(@"---------CNLiveCaptureStateDevBusy");
692 - _stateLab.text = @"device busy, try later"; 701 + _stateLabel.text = @"device busy, try later";
693 702
694 } 703 }
695 } 704 }
696 705
697 -- (void)streamStateChange  
698 -{  
699 - 706 +- (void)streamStateChanged {
700 if (_kitCN.streamState == CNLiveStreamStateIdle) { 707 if (_kitCN.streamState == CNLiveStreamStateIdle) {
701 NSLog(@"---------CNLiveStreamStateIdle"); 708 NSLog(@"---------CNLiveStreamStateIdle");
702 - _stateLab.text = @"CNLiveStreamStateIdle"; 709 + _stateLabel.text = @"CNLiveStreamStateIdle";
703 } 710 }
704 711
705 if (_kitCN.streamState == CNLiveStreamStateConnected) { 712 if (_kitCN.streamState == CNLiveStreamStateConnected) {
706 _startLiveBtn.selected = YES; 713 _startLiveBtn.selected = YES;
707 NSLog(@"---------CNLiveStreamStateConnected"); 714 NSLog(@"---------CNLiveStreamStateConnected");
708 - _stateLab.text = [NSString stringWithFormat:@"CNLiveStreamStateConnected------%@",_hostURL]; 715 + _stateLabel.text = [NSString stringWithFormat:@"CNLiveStreamStateConnected------%@",_hostURL];
709 } 716 }
710 717
711 if (_kitCN.streamState == CNLiveStreamStateConnecting) { 718 if (_kitCN.streamState == CNLiveStreamStateConnecting) {
712 NSLog(@"---------CNLiveStreamStateConnecting"); 719 NSLog(@"---------CNLiveStreamStateConnecting");
713 - _stateLab.text = @"CNLiveStreamStateConnecting"; 720 + _stateLabel.text = @"CNLiveStreamStateConnecting";
714 } 721 }
715 722
716 //推流出错 723 //推流出错
@@ -722,41 +729,39 @@ @@ -722,41 +729,39 @@
722 //断开推流 729 //断开推流
723 if ( _kitCN.streamState == CNLiveStreamStateDisconnecting) { 730 if ( _kitCN.streamState == CNLiveStreamStateDisconnecting) {
724 NSLog(@"---------CNLiveStreamStateDisconnecting"); 731 NSLog(@"---------CNLiveStreamStateDisconnecting");
725 - _stateLab.text = @"CNLiveStreamStateDisconnecting";  
726 - 732 + _stateLabel.text = @"CNLiveStreamStateDisconnecting";
727 } 733 }
728 734
729 //结束推流成功 735 //结束推流成功
730 if ( _kitCN.streamState == CNLiveStopStreamSuccess) { 736 if ( _kitCN.streamState == CNLiveStopStreamSuccess) {
731 NSLog(@"---------CNLiveStopStreamSuccess"); 737 NSLog(@"---------CNLiveStopStreamSuccess");
732 - _stateLab.text = @"CNLiveStopStreamSuccess";  
733 - 738 + _stateLabel.text = @"CNLiveStopStreamSuccess";
734 } 739 }
  740 +
735 } 741 }
736 742
737 - (void)onStreamError { 743 - (void)onStreamError {
738 -  
739 _startLiveBtn.selected = NO; 744 _startLiveBtn.selected = NO;
740 745
741 CNLiveStreamErrorCode err = _kitCN.streamErrorCode; 746 CNLiveStreamErrorCode err = _kitCN.streamErrorCode;
742 [self toast:[NSString stringWithFormat:@"error ------ %lu",(unsigned long)err]]; 747 [self toast:[NSString stringWithFormat:@"error ------ %lu",(unsigned long)err]];
743 748
744 - NSLog(@"onErr: %lu [%@]", (unsigned long) err, _stateLab.text); 749 + NSLog(@"onErr: %lu [%@]", (unsigned long) err, _stateLabel.text);
745 750
746 if ( CNLiveStreamErrorCode_CNLiveAUTHFAILED == err ) { 751 if ( CNLiveStreamErrorCode_CNLiveAUTHFAILED == err ) {
747 - _stateLab.text = @"SDK auth failed, \npls check ak/sk"; 752 + _stateLabel.text = @"SDK auth failed, \npls check ak/sk";
748 } 753 }
749 else if ( CNLiveStreamErrorCode_CODEC_OPEN_FAILED == err) { 754 else if ( CNLiveStreamErrorCode_CODEC_OPEN_FAILED == err) {
750 - _stateLab.text = @"Selected Codec not supported \n in this version"; 755 + _stateLabel.text = @"Selected Codec not supported \n in this version";
751 } 756 }
752 else if ( CNLiveStreamErrorCode_CONNECT_FAILED == err) { 757 else if ( CNLiveStreamErrorCode_CONNECT_FAILED == err) {
753 - _stateLab.text = @"Connecting error, pls check host url \nor network"; 758 + _stateLabel.text = @"Connecting error, pls check host url \nor network";
754 } 759 }
755 else if ( CNLiveStreamErrorCode_CONNECT_BREAK == err) { 760 else if ( CNLiveStreamErrorCode_CONNECT_BREAK == err) {
756 - _stateLab.text = @"Connection break"; 761 + _stateLabel.text = @"Connection break";
757 } 762 }
758 else if ( CNLiveStreamErrorCode_ABNORMAL == err) { 763 else if ( CNLiveStreamErrorCode_ABNORMAL == err) {
759 - _stateLab.text = @"CNLiveStreamErrorCode_ABNORMAL"; 764 + _stateLabel.text = @"CNLiveStreamErrorCode_ABNORMAL";
760 [self toast:@"推流异常中断~~"]; 765 [self toast:@"推流异常中断~~"];
761 _startLiveBtn.selected = NO; 766 _startLiveBtn.selected = NO;
762 767
@@ -775,8 +780,7 @@ @@ -775,8 +780,7 @@
775 } 780 }
776 } 781 }
777 782
778 -- (void) tryReconnect  
779 -{ 783 +- (void)tryReconnect {
780 dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)); 784 dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC));
781 dispatch_after(delay, dispatch_get_main_queue(), ^{ 785 dispatch_after(delay, dispatch_get_main_queue(), ^{
782 786
@@ -830,26 +834,23 @@ @@ -830,26 +834,23 @@
830 else if (newState == CNLiveRecordStateStopped) { 834 else if (newState == CNLiveRecordStateStopped) {
831 NSLog(@"stop bypass record"); 835 NSLog(@"stop bypass record");
832 [self saveVideoToAlbum:_bypassRecFile]; 836 [self saveVideoToAlbum:_bypassRecFile];
833 - _moreFuncsView.bypassRecord.on = NO; 837 + _moreView.bypassRecord.on = NO;
834 } 838 }
835 else if (newState == CNLiveRecordStateError) { 839 else if (newState == CNLiveRecordStateError) {
836 NSLog(@"bypass record error %@", _kitCN.streamerBase.bypassRecordErrorName); 840 NSLog(@"bypass record error %@", _kitCN.streamerBase.bypassRecordErrorName);
837 } 841 }
838 } 842 }
839 843
840 -#pragma mark -  
841 #pragma mark - LoadingViewDelegate 844 #pragma mark - LoadingViewDelegate
842 -- (void)loadingView:(LoadingView *)loadingViewRetryAction {  
843 - [self startStreaming:_startLiveBtn]; 845 +- (void)loadingView:(CNLiveLoadingView *)view {
  846 + [self startLiving:_startLiveBtn];
  847 +
844 } 848 }
845 849
846 -#pragma mark -  
847 -#pragma mark -  
848 /** 850 /**
849 @abstract 将UI的坐标转换成相机坐标 851 @abstract 将UI的坐标转换成相机坐标
850 */ 852 */
851 -- (CGPoint)convertToPointOfInterestFromViewCoordinates:(CGPoint)viewCoordinates  
852 -{ 853 +- (CGPoint)convertToPointOfInterestFromViewCoordinates:(CGPoint)viewCoordinates {
853 CGPoint pointOfInterest = CGPointMake(.5f, .5f); 854 CGPoint pointOfInterest = CGPointMake(.5f, .5f);
854 CGSize frameSize = self.view.frame.size; 855 CGSize frameSize = self.view.frame.size;
855 CGSize apertureSize = [_kitCN captureDimension]; 856 CGSize apertureSize = [_kitCN captureDimension];
@@ -882,27 +883,19 @@ @@ -882,27 +883,19 @@
882 return pointOfInterest; 883 return pointOfInterest;
883 } 884 }
884 885
885 -- (void)toast:(NSString*)message  
886 -{  
887 -  
888 - UIAlertView *toast = [[UIAlertView alloc] initWithTitle:nil  
889 - message:message  
890 - delegate:nil  
891 - cancelButtonTitle:nil  
892 - otherButtonTitles:nil, nil]; 886 +#pragma mark - 工具方法
  887 +- (void)toast:(NSString *)message {
  888 + UIAlertView *toast = [[UIAlertView alloc] initWithTitle:nil message:message delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil];
893 [toast show]; 889 [toast show];
894 - double duration = 2.5; 890 + double duration = 2.0;
895 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 891 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
896 [toast dismissWithClickedButtonIndex:0 animated:NO]; 892 [toast dismissWithClickedButtonIndex:0 animated:NO];
897 }); 893 });
  894 +
898 } 895 }
899 896
900 897
901 -- (UIButton *)addTextButton:(NSString *)title  
902 - selectedTitle:(NSString *)selectedTitle  
903 - frame:(CGRect)frame  
904 - radius:(CGFloat)radius  
905 - action:(SEL)action { 898 +- (UIButton *)addTextButton:(NSString *)title selectedTitle:(NSString *)selectedTitle frame:(CGRect)frame radius:(CGFloat)radius action:(SEL)action {
906 UIButton * button; 899 UIButton * button;
907 button = [UIButton buttonWithType:UIButtonTypeCustom]; 900 button = [UIButton buttonWithType:UIButtonTypeCustom];
908 button.frame = frame; 901 button.frame = frame;
@@ -913,17 +906,14 @@ @@ -913,17 +906,14 @@
913 [button setTitleColor:[UIColor colorWithRed:23/255.0 green:110/255.0 blue:254/255.0 alpha:1] forState:UIControlStateNormal]; 906 [button setTitleColor:[UIColor colorWithRed:23/255.0 green:110/255.0 blue:254/255.0 alpha:1] forState:UIControlStateNormal];
914 button.layer.cornerRadius = radius; 907 button.layer.cornerRadius = radius;
915 button.layer.masksToBounds = YES; 908 button.layer.masksToBounds = YES;
916 - button.layer.borderColor = [UIColor blackColor].CGColor; 909 + button.layer.borderColor = [UIColor colorWithRed:23/255.0 green:110/255.0 blue:254/255.0 alpha:1].CGColor;
917 button.layer.borderWidth = 1; 910 button.layer.borderWidth = 1;
918 [self.view addSubview:button]; 911 [self.view addSubview:button];
919 return button; 912 return button;
920 913
921 } 914 }
922 915
923 -- (UIButton *)addImageBtn:(UIImage *)normalImg  
924 - selectedImg:(UIImage *)selectedImg  
925 - frame:(CGRect)frame  
926 - action:(SEL)action { 916 +- (UIButton *)addImageBtn:(UIImage *)normalImg selectedImg:(UIImage *)selectedImg frame:(CGRect)frame action:(SEL)action {
927 UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 917 UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
928 button.frame = frame; 918 button.frame = frame;
929 [button setImage:normalImg forState:UIControlStateNormal]; 919 [button setImage:normalImg forState:UIControlStateNormal];
@@ -931,11 +921,11 @@ @@ -931,11 +921,11 @@
931 [button addTarget:self action:action forControlEvents:UIControlEventTouchUpInside]; 921 [button addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
932 [self.view addSubview:button]; 922 [self.view addSubview:button];
933 return button; 923 return button;
  924 +
934 } 925 }
935 926
936 -  
937 //保存视频到相簿 927 //保存视频到相簿
938 -- (void) saveVideoToAlbum: (NSString*) path { 928 +- (void)saveVideoToAlbum:(NSString *)path {
939 NSFileManager *fileManager = [NSFileManager defaultManager]; 929 NSFileManager *fileManager = [NSFileManager defaultManager];
940 if (![fileManager fileExistsAtPath:path]) { 930 if (![fileManager fileExistsAtPath:path]) {
941 return; 931 return;
@@ -949,7 +939,7 @@ @@ -949,7 +939,7 @@
949 } 939 }
950 940
951 //删除文件,保证保存到相册里面的视频时间是最新的 941 //删除文件,保证保存到相册里面的视频时间是最新的
952 --(void)deleteFile:(NSString *)file{ 942 +- (void)deleteFile:(NSString *)file{
953 NSFileManager *fileManager = [NSFileManager defaultManager]; 943 NSFileManager *fileManager = [NSFileManager defaultManager];
954 if ([fileManager fileExistsAtPath:file]) { 944 if ([fileManager fileExistsAtPath:file]) {
955 [fileManager removeItemAtPath:file error:nil]; 945 [fileManager removeItemAtPath:file error:nil];
@@ -969,10 +959,8 @@ @@ -969,10 +959,8 @@
969 [self toast:message]; 959 [self toast:message];
970 } 960 }
971 961
972 -#pragma mark - GetMethod  
973 -  
974 -- (UIView *)captureView  
975 -{ 962 +#pragma mark - 懒加载
  963 +- (UIView *)captureView {
976 if (!_captureView) { 964 if (!_captureView) {
977 _captureView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)]; 965 _captureView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
978 _captureView.backgroundColor = [UIColor whiteColor]; 966 _captureView.backgroundColor = [UIColor whiteColor];
@@ -980,50 +968,48 @@ @@ -980,50 +968,48 @@
980 return _captureView; 968 return _captureView;
981 } 969 }
982 970
983 -- (UILabel *)stateLab  
984 -{  
985 - if (!_stateLab) {  
986 - _stateLab = [[UILabel alloc] initWithFrame:CGRectMake(0, Height/2-50, Width, 100)];  
987 - _stateLab.backgroundColor = [UIColor clearColor];  
988 - _stateLab.numberOfLines = 0;  
989 - _stateLab.textColor = [UIColor redColor]; 971 +- (UILabel *)stateLabel {
  972 + if (!_stateLabel) {
  973 + _stateLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, Screen_Width, 100)];
  974 + _stateLabel.backgroundColor = [UIColor clearColor];
  975 + _stateLabel.center = self.view.center;
  976 + _stateLabel.textAlignment = NSTextAlignmentCenter;
  977 + _stateLabel.numberOfLines = 0;
  978 + _stateLabel.textColor = [UIColor redColor];
990 } 979 }
991 - return _stateLab; 980 + return _stateLabel;
992 } 981 }
993 982
994 -- (FilterFunctionView *)filterView  
995 -{ 983 +- (FilterFunctionView *)filterView {
996 if (!_filterView) { 984 if (!_filterView) {
997 - _filterView = [[FilterFunctionView alloc] initWithFrame:CGRectMake(0, 80, Width, 240)]; 985 + _filterView = [[FilterFunctionView alloc] initWithFrame:CGRectMake(0, 80, Screen_Width, 240)];
998 _filterView.hidden = YES; 986 _filterView.hidden = YES;
999 } 987 }
1000 return _filterView; 988 return _filterView;
1001 } 989 }
1002 990
1003 -- (AudioCfgView *)audioCfgView  
1004 -{  
1005 - if (!_audioCfgView) {  
1006 - _audioCfgView = [[AudioCfgView alloc] initWithFrame:CGRectMake(0, 80, Width, 200)];  
1007 - _audioCfgView.hidden = YES; 991 +- (CNLiveVoiceSettingView *)voiceView {
  992 + if (!_voiceView) {
  993 + _voiceView = [[CNLiveVoiceSettingView alloc] initWithFrame:CGRectMake(0, 80, Screen_Width, 200)];
  994 + _voiceView.hidden = YES;
1008 } 995 }
1009 - return _audioCfgView; 996 + return _voiceView;
1010 } 997 }
1011 998
1012 -- (MoreFunctionsView *)moreFuncsView  
1013 -{  
1014 - if (!_moreFuncsView) {  
1015 - _moreFuncsView = [[MoreFunctionsView alloc] initWithFrame:CGRectMake(0, 80, Width, 240)];  
1016 - [_moreFuncsView.bypassRecord addTarget:self action:@selector(bypassRecordOn:) forControlEvents:UIControlEventValueChanged];  
1017 - [_moreFuncsView.floatingWindowBtn addTarget:self action:@selector(floatingWindowBtnAction) forControlEvents:UIControlEventTouchUpInside];  
1018 - _moreFuncsView.hidden = YES; 999 +- (CNLiveMoreFunctionsView *)moreView {
  1000 + if (!_moreView) {
  1001 + _moreView = [[CNLiveMoreFunctionsView alloc] initWithFrame:CGRectMake(0, 80, Screen_Width, 240)];
  1002 + [_moreView.bypassRecord addTarget:self action:@selector(bypassRecordOn:) forControlEvents:UIControlEventValueChanged];
  1003 + [_moreView.floatingWindowBtn addTarget:self action:@selector(floatingWindowBtnClicked) forControlEvents:UIControlEventTouchUpInside];
  1004 + _moreView.hidden = YES;
1019 } 1005 }
1020 - return _moreFuncsView; 1006 + return _moreView;
1021 } 1007 }
1022 1008
1023 -- (LoadingView *)loadingView  
1024 -{ 1009 +//loadingview
  1010 +- (CNLiveLoadingView *)loadingView {
1025 if (!_loadingView) { 1011 if (!_loadingView) {
1026 - _loadingView = [[LoadingView alloc] initWithFrame:CGRectMake(0, 0, 70, 70)]; 1012 + _loadingView = [[CNLiveLoadingView alloc] initWithFrame:CGRectMake(0, 0, 70, 70)];
1027 _loadingView.center = self.view.center; 1013 _loadingView.center = self.view.center;
1028 [_loadingView setLoadingViewStyle:LoadingViewStyleStopLoading]; 1014 [_loadingView setLoadingViewStyle:LoadingViewStyleStopLoading];
1029 _loadingView.delegate = self; 1015 _loadingView.delegate = self;
@@ -1031,8 +1017,7 @@ @@ -1031,8 +1017,7 @@
1031 return _loadingView; 1017 return _loadingView;
1032 } 1018 }
1033 1019
1034 -- (void)dealloc  
1035 -{ 1020 +- (void)dealloc {
1036 [_kitCN quitStreaming]; 1021 [_kitCN quitStreaming];
1037 self.kitCN = nil; 1022 self.kitCN = nil;
1038 [[NSNotificationCenter defaultCenter] removeObserver:self]; 1023 [[NSNotificationCenter defaultCenter] removeObserver:self];
@@ -1041,19 +1026,4 @@ @@ -1041,19 +1026,4 @@
1041 1026
1042 } 1027 }
1043 1028
1044 -- (void)didReceiveMemoryWarning {  
1045 - [super didReceiveMemoryWarning];  
1046 - // Dispose of any resources that can be recreated.  
1047 -}  
1048 -  
1049 -/*  
1050 - #pragma mark - Navigation  
1051 -  
1052 - // In a storyboard-based application, you will often want to do a little preparation before navigation  
1053 - - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {  
1054 - // Get the new view controller using [segue destinationViewController].  
1055 - // Pass the selected object to the new view controller.  
1056 - }  
1057 - */  
1058 -  
1059 @end 1029 @end
Example/CNLivePlayer/Streamer/LoadingView.h renamed to Example/CNLivePlayer/Streamer/View/CNLiveLoadingView.h
1 // 1 //
2 -// LoadingView.h  
3 -// CNLivePlayerSDKDemo 2 +// CNLiveLoadingView.h
  3 +// CNLivePlayer
4 // 4 //
5 -// Created by iOS on 17/3/8.  
6 -// Copyright © 2017年 雷浩杰. All rights reserved. 5 +// Created by 153993236@qq.com on 07/26/2019.
  6 +// Copyright (c) 2019 153993236@qq.com. All rights reserved.
7 // 7 //
8 8
9 #import <UIKit/UIKit.h> 9 #import <UIKit/UIKit.h>
@@ -14,17 +14,17 @@ typedef NS_ENUM(NSUInteger, LoadingViewStyle) { @@ -14,17 +14,17 @@ typedef NS_ENUM(NSUInteger, LoadingViewStyle) {
14 LoadingViewStyleRetry, 14 LoadingViewStyleRetry,
15 }; 15 };
16 16
17 -@class LoadingView; 17 +@class CNLiveLoadingView;
18 18
19 -@protocol LoadingViewDelegate <NSObject> 19 +@protocol CNLiveLoadingViewDelegate <NSObject>
20 20
21 -- (void)loadingView:(LoadingView *)loadingViewRetryAction; 21 +- (void)loadingView:(CNLiveLoadingView *)view;
22 22
23 @end 23 @end
24 24
25 -@interface LoadingView : UIView 25 +@interface CNLiveLoadingView : UIView
26 26
27 -@property (nonatomic, assign) id<LoadingViewDelegate> delegate; 27 +@property (nonatomic, assign) id<CNLiveLoadingViewDelegate> delegate;
28 28
29 - (void)setLoadingViewStyle:(LoadingViewStyle)style; 29 - (void)setLoadingViewStyle:(LoadingViewStyle)style;
30 30
Example/CNLivePlayer/Streamer/LoadingView.m renamed to Example/CNLivePlayer/Streamer/View/CNLiveLoadingView.m
1 // 1 //
2 -// LoadingView.m  
3 -// CNLivePlayerSDKDemo 2 +// CNLiveLoadingView.m
  3 +// CNLivePlayer
4 // 4 //
5 -// Created by iOS on 17/3/8.  
6 -// Copyright © 2017年 雷浩杰. All rights reserved. 5 +// Created by 153993236@qq.com on 07/26/2019.
  6 +// Copyright (c) 2019 153993236@qq.com. All rights reserved.
7 // 7 //
8 8
9 -#import "LoadingView.h" 9 +#import "CNLiveLoadingView.h"
10 10
11 -@interface LoadingView () 11 +@interface CNLiveLoadingView ()
12 12
13 @property (nonatomic, strong) UIActivityIndicatorView *activityIndicator; 13 @property (nonatomic, strong) UIActivityIndicatorView *activityIndicator;
14 @property (nonatomic, strong) UIButton *retryBtn; 14 @property (nonatomic, strong) UIButton *retryBtn;
15 15
16 @end 16 @end
17 17
18 -@implementation LoadingView 18 +@implementation CNLiveLoadingView
19 19
20 -- (instancetype)initWithFrame:(CGRect)frame  
21 -{ 20 +- (instancetype)initWithFrame:(CGRect)frame {
22 self = [super initWithFrame:frame]; 21 self = [super initWithFrame:frame];
23 if (self) { 22 if (self) {
24 [self addSubview:self.activityIndicator]; 23 [self addSubview:self.activityIndicator];
@@ -29,7 +28,6 @@ @@ -29,7 +28,6 @@
29 return self; 28 return self;
30 } 29 }
31 30
32 -#pragma mark -  
33 #pragma mark - action 31 #pragma mark - action
34 - (void)retryBtnAction { 32 - (void)retryBtnAction {
35 if (self.delegate && [self.delegate respondsToSelector:@selector(loadingView:)]) { 33 if (self.delegate && [self.delegate respondsToSelector:@selector(loadingView:)]) {
@@ -60,9 +58,6 @@ @@ -60,9 +58,6 @@
60 } 58 }
61 } 59 }
62 60
63 -  
64 -  
65 -#pragma mark -  
66 #pragma mark - getter 61 #pragma mark - getter
67 - (UIActivityIndicatorView *)activityIndicator { 62 - (UIActivityIndicatorView *)activityIndicator {
68 if (!_activityIndicator) { 63 if (!_activityIndicator) {
Example/CNLivePlayer/Streamer/MoreFunctionsView.h renamed to Example/CNLivePlayer/Streamer/View/CNLiveMoreFunctionsView.h
1 // 1 //
2 -// MoreFunctionsView.h 2 +// CNLiveMoreFunctionsView.h
3 // CNLivePlayerSDKDemo 3 // CNLivePlayerSDKDemo
4 // 4 //
5 // Created by iOS on 2017/9/19. 5 // Created by iOS on 2017/9/19.
@@ -8,18 +8,18 @@ @@ -8,18 +8,18 @@
8 8
9 #import <UIKit/UIKit.h> 9 #import <UIKit/UIKit.h>
10 10
11 -typedef NS_ENUM(NSUInteger, MoreFuncType) {  
12 - MoreFuncTypeScreenshot = 0,  
13 - MoreFuncTypeLiveScene,  
14 - MoreFuncTypeRecordScene,  
15 - MoreFuncTypeLogo 11 +typedef NS_ENUM(NSUInteger, CNLiveMoreFunctionsType) {
  12 + CNLiveMoreFunctionsScreenshot = 0,
  13 + CNLiveMoreFunctionsLiveScene,
  14 + CNLiveMoreFunctionsRecordScene,
  15 + CNLiveMoreFunctionsLogo
16 }; 16 };
17 17
18 -typedef void(^MoreFuncBlock)(MoreFuncType type, NSInteger idx, UISegmentedControl *seg); 18 +typedef void(^MoreFunctionsBlock)(CNLiveMoreFunctionsType type, NSInteger idx, UISegmentedControl *seg);
19 19
20 -@interface MoreFunctionsView : UIView 20 +@interface CNLiveMoreFunctionsView : UIView
21 21
22 -@property (nonatomic, copy) MoreFuncBlock moreFuncBlock; 22 +@property (nonatomic, copy) MoreFunctionsBlock moreBlock;
23 @property (nonatomic, strong) UISwitch *bypassRecord; 23 @property (nonatomic, strong) UISwitch *bypassRecord;
24 @property (nonatomic, strong) UIButton *floatingWindowBtn; 24 @property (nonatomic, strong) UIButton *floatingWindowBtn;
25 25
Example/CNLivePlayer/Streamer/MoreFunctionsView.m renamed to Example/CNLivePlayer/Streamer/View/CNLiveMoreFunctionsView.m
1 // 1 //
2 -// MoreFunctionsView.m 2 +// CNLiveMoreFunctionsView.m
3 // CNLivePlayerSDKDemo 3 // CNLivePlayerSDKDemo
4 // 4 //
5 // Created by iOS on 2017/9/19. 5 // Created by iOS on 2017/9/19.
6 // Copyright © 2017年 雷浩杰. All rights reserved. 6 // Copyright © 2017年 雷浩杰. All rights reserved.
7 // 7 //
8 8
9 -#import "MoreFunctionsView.h" 9 +#import "CNLiveMoreFunctionsView.h"
10 10
11 -@interface MoreFunctionsView () 11 +@interface CNLiveMoreFunctionsView ()
12 12
13 @property (nonatomic, strong) UISegmentedControl *screenshotSeg; 13 @property (nonatomic, strong) UISegmentedControl *screenshotSeg;
14 @property (nonatomic, strong) UISegmentedControl *liveSceneSeg; 14 @property (nonatomic, strong) UISegmentedControl *liveSceneSeg;
@@ -17,10 +17,9 @@ @@ -17,10 +17,9 @@
17 17
18 @end 18 @end
19 19
20 -@implementation MoreFunctionsView 20 +@implementation CNLiveMoreFunctionsView
21 21
22 -- (instancetype)initWithFrame:(CGRect)frame  
23 -{ 22 +- (instancetype)initWithFrame:(CGRect)frame {
24 self = [super initWithFrame:frame]; 23 self = [super initWithFrame:frame];
25 if (self) { 24 if (self) {
26 25
@@ -35,18 +34,15 @@ @@ -35,18 +34,15 @@
35 return self; 34 return self;
36 } 35 }
37 36
38 -#pragma mark -  
39 #pragma mark - action 37 #pragma mark - action
40 - (void)onSegCtrl:(UISegmentedControl *)seg { 38 - (void)onSegCtrl:(UISegmentedControl *)seg {
41 - if (self.moreFuncBlock) {  
42 - self.moreFuncBlock(seg.tag, seg.selectedSegmentIndex, seg); 39 + if (self.moreBlock) {
  40 + self.moreBlock(seg.tag, seg.selectedSegmentIndex, seg);
43 } 41 }
44 } 42 }
45 43
46 -#pragma mark -  
47 #pragma mark - getter 44 #pragma mark - getter
48 -- (UISegmentedControl *)screenshotSeg  
49 -{ 45 +- (UISegmentedControl *)screenshotSeg {
50 if (!_screenshotSeg) { 46 if (!_screenshotSeg) {
51 NSArray *items = @[ @"截图为文件", 47 NSArray *items = @[ @"截图为文件",
52 @"截图为UIImage"]; 48 @"截图为UIImage"];
@@ -56,7 +52,7 @@ @@ -56,7 +52,7 @@
56 _screenshotSeg.tintColor= [UIColor blackColor]; 52 _screenshotSeg.tintColor= [UIColor blackColor];
57 _screenshotSeg.layer.cornerRadius = 5; 53 _screenshotSeg.layer.cornerRadius = 5;
58 _screenshotSeg.selectedSegmentIndex = -1; 54 _screenshotSeg.selectedSegmentIndex = -1;
59 - _screenshotSeg.tag = MoreFuncTypeScreenshot; 55 + _screenshotSeg.tag = CNLiveMoreFunctionsScreenshot;
60 [_screenshotSeg addTarget:self action:@selector(onSegCtrl:) forControlEvents:UIControlEventValueChanged]; 56 [_screenshotSeg addTarget:self action:@selector(onSegCtrl:) forControlEvents:UIControlEventValueChanged];
61 57
62 UILabel *titleLab = [[UILabel alloc] initWithFrame:CGRectMake(-85, 0, 80, 30)]; 58 UILabel *titleLab = [[UILabel alloc] initWithFrame:CGRectMake(-85, 0, 80, 30)];
@@ -70,8 +66,7 @@ @@ -70,8 +66,7 @@
70 return _screenshotSeg; 66 return _screenshotSeg;
71 } 67 }
72 68
73 -- (UISegmentedControl *)liveSceneSeg  
74 -{ 69 +- (UISegmentedControl *)liveSceneSeg {
75 if (!_liveSceneSeg) { 70 if (!_liveSceneSeg) {
76 NSArray *items = @[ @"默认", 71 NSArray *items = @[ @"默认",
77 @"秀场", 72 @"秀场",
@@ -84,7 +79,7 @@ @@ -84,7 +79,7 @@
84 _liveSceneSeg.selectedSegmentIndex = 0; 79 _liveSceneSeg.selectedSegmentIndex = 0;
85 _liveSceneSeg.layer.cornerRadius = 5; 80 _liveSceneSeg.layer.cornerRadius = 5;
86 _liveSceneSeg.selectedSegmentIndex = 1; 81 _liveSceneSeg.selectedSegmentIndex = 1;
87 - _liveSceneSeg.tag = MoreFuncTypeLiveScene; 82 + _liveSceneSeg.tag = CNLiveMoreFunctionsLiveScene;
88 [_liveSceneSeg addTarget:self action:@selector(onSegCtrl:) forControlEvents:UIControlEventValueChanged]; 83 [_liveSceneSeg addTarget:self action:@selector(onSegCtrl:) forControlEvents:UIControlEventValueChanged];
89 84
90 UILabel *titleLab = [[UILabel alloc] initWithFrame:CGRectMake(-85, 0, 80, 30)]; 85 UILabel *titleLab = [[UILabel alloc] initWithFrame:CGRectMake(-85, 0, 80, 30)];
@@ -98,8 +93,7 @@ @@ -98,8 +93,7 @@
98 return _liveSceneSeg; 93 return _liveSceneSeg;
99 } 94 }
100 95
101 -- (UISegmentedControl *)recordSceneSeg  
102 -{ 96 +- (UISegmentedControl *)recordSceneSeg {
103 if (!_recordSceneSeg) { 97 if (!_recordSceneSeg) {
104 NSArray *items = @[ @"恒定码率", 98 NSArray *items = @[ @"恒定码率",
105 @"恒定质量", 99 @"恒定质量",
@@ -111,7 +105,7 @@ @@ -111,7 +105,7 @@
111 _recordSceneSeg.selectedSegmentIndex = 0; 105 _recordSceneSeg.selectedSegmentIndex = 0;
112 _recordSceneSeg.layer.cornerRadius = 5; 106 _recordSceneSeg.layer.cornerRadius = 5;
113 _recordSceneSeg.selectedSegmentIndex = 1; 107 _recordSceneSeg.selectedSegmentIndex = 1;
114 - _recordSceneSeg.tag = MoreFuncTypeRecordScene; 108 + _recordSceneSeg.tag = CNLiveMoreFunctionsRecordScene;
115 [_recordSceneSeg addTarget:self action:@selector(onSegCtrl:) forControlEvents:UIControlEventValueChanged]; 109 [_recordSceneSeg addTarget:self action:@selector(onSegCtrl:) forControlEvents:UIControlEventValueChanged];
116 110
117 UILabel *titleLab = [[UILabel alloc] initWithFrame:CGRectMake(-85, 0, 80, 30)]; 111 UILabel *titleLab = [[UILabel alloc] initWithFrame:CGRectMake(-85, 0, 80, 30)];
@@ -123,10 +117,10 @@ @@ -123,10 +117,10 @@
123 [_recordSceneSeg addSubview:titleLab]; 117 [_recordSceneSeg addSubview:titleLab];
124 } 118 }
125 return _recordSceneSeg; 119 return _recordSceneSeg;
  120 +
126 } 121 }
127 122
128 -- (UISegmentedControl *)logoSeg  
129 -{ 123 +- (UISegmentedControl *)logoSeg {
130 if (!_logoSeg) { 124 if (!_logoSeg) {
131 NSArray *items = @[ @"清除logo", 125 NSArray *items = @[ @"清除logo",
132 @"图片logo", 126 @"图片logo",
@@ -139,7 +133,7 @@ @@ -139,7 +133,7 @@
139 _logoSeg.selectedSegmentIndex = 0; 133 _logoSeg.selectedSegmentIndex = 0;
140 _logoSeg.layer.cornerRadius = 5; 134 _logoSeg.layer.cornerRadius = 5;
141 _logoSeg.selectedSegmentIndex = 1; 135 _logoSeg.selectedSegmentIndex = 1;
142 - _logoSeg.tag = MoreFuncTypeLogo; 136 + _logoSeg.tag = CNLiveMoreFunctionsLogo;
143 [_logoSeg addTarget:self action:@selector(onSegCtrl:) forControlEvents:UIControlEventValueChanged]; 137 [_logoSeg addTarget:self action:@selector(onSegCtrl:) forControlEvents:UIControlEventValueChanged];
144 138
145 UILabel *titleLab = [[UILabel alloc] initWithFrame:CGRectMake(-85, 0, 80, 30)]; 139 UILabel *titleLab = [[UILabel alloc] initWithFrame:CGRectMake(-85, 0, 80, 30)];
@@ -153,8 +147,7 @@ @@ -153,8 +147,7 @@
153 return _logoSeg; 147 return _logoSeg;
154 } 148 }
155 149
156 -- (UISwitch *)bypassRecord  
157 -{ 150 +- (UISwitch *)bypassRecord {
158 if (!_bypassRecord) { 151 if (!_bypassRecord) {
159 _bypassRecord = [[UISwitch alloc] initWithFrame:CGRectMake(95, 160, 100, 30)]; 152 _bypassRecord = [[UISwitch alloc] initWithFrame:CGRectMake(95, 160, 100, 30)];
160 153
@@ -169,8 +162,7 @@ @@ -169,8 +162,7 @@
169 return _bypassRecord; 162 return _bypassRecord;
170 } 163 }
171 164
172 -- (UIButton *)floatingWindowBtn  
173 -{ 165 +- (UIButton *)floatingWindowBtn {
174 if (!_floatingWindowBtn) { 166 if (!_floatingWindowBtn) {
175 _floatingWindowBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 167 _floatingWindowBtn = [UIButton buttonWithType:UIButtonTypeCustom];
176 _floatingWindowBtn.frame = CGRectMake(220, 160, 80, 30); 168 _floatingWindowBtn.frame = CGRectMake(220, 160, 80, 30);
@@ -186,12 +178,4 @@ @@ -186,12 +178,4 @@
186 return _floatingWindowBtn; 178 return _floatingWindowBtn;
187 } 179 }
188 180
189 -/*  
190 -// Only override drawRect: if you perform custom drawing.  
191 -// An empty implementation adversely affects performance during animation.  
192 -- (void)drawRect:(CGRect)rect {  
193 - // Drawing code  
194 -}  
195 -*/  
196 -  
197 @end 181 @end
Example/CNLivePlayer/Streamer/AudioCfgView.h renamed to Example/CNLivePlayer/Streamer/View/CNLiveVoiceSettingView.h
1 // 1 //
2 -// AudioCfgView.h 2 +// CNLiveVoiceSettingView.h
3 // CNLivePlayerSDKDemo 3 // CNLivePlayerSDKDemo
4 // 4 //
5 // Created by iOS on 17/4/26. 5 // Created by iOS on 17/4/26.
@@ -14,7 +14,7 @@ typedef void(^BPlayCapturedAudioBlock)(BOOL isOn); //是否开启耳返 @@ -14,7 +14,7 @@ typedef void(^BPlayCapturedAudioBlock)(BOOL isOn); //是否开启耳返
14 typedef void(^MicVolumeBlock)(float micVolume); //麦克风音量 14 typedef void(^MicVolumeBlock)(float micVolume); //麦克风音量
15 typedef void(^BPlayVolumeBlock)(float bPlayVolume); //耳返音量 15 typedef void(^BPlayVolumeBlock)(float bPlayVolume); //耳返音量
16 16
17 -@interface AudioCfgView : UIView 17 +@interface CNLiveVoiceSettingView : UIView
18 18
19 @property (nonatomic, strong) UISwitch *bPlaySwitch; 19 @property (nonatomic, strong) UISwitch *bPlaySwitch;
20 20
@@ -24,4 +24,5 @@ typedef void(^BPlayVolumeBlock)(float bPlayVolume); //耳返音量 @@ -24,4 +24,5 @@ typedef void(^BPlayVolumeBlock)(float bPlayVolume); //耳返音量
24 @property (nonatomic, copy) MicVolumeBlock micVolumeBlock; 24 @property (nonatomic, copy) MicVolumeBlock micVolumeBlock;
25 @property (nonatomic, copy) BPlayVolumeBlock bPlayVolumeBlock; 25 @property (nonatomic, copy) BPlayVolumeBlock bPlayVolumeBlock;
26 26
  27 +
27 @end 28 @end
Example/CNLivePlayer/Streamer/AudioCfgView.m renamed to Example/CNLivePlayer/Streamer/View/CNLiveVoiceSettingView.m
1 // 1 //
2 -// AudioCfgView.m 2 +// CNLiveVoiceSettingView.m
3 // CNLivePlayerSDKDemo 3 // CNLivePlayerSDKDemo
4 // 4 //
5 // Created by iOS on 17/4/26. 5 // Created by iOS on 17/4/26.
6 // Copyright © 2017年 雷浩杰. All rights reserved. 6 // Copyright © 2017年 雷浩杰. All rights reserved.
7 // 7 //
8 8
9 -#import "AudioCfgView.h" 9 +#import "CNLiveVoiceSettingView.h"
10 10
11 -@interface AudioCfgView ()  
12 -  
13 -@property (nonatomic, strong) UISegmentedControl *audioEffectType;  
14 -@property (nonatomic, strong) UISegmentedControl *reverbType; 11 +@interface CNLiveVoiceSettingView ()
  12 +@property (nonatomic, strong) UISegmentedControl *audioEffectType;
  13 +@property (nonatomic, strong) UISegmentedControl *reverbType;
15 @property (nonatomic, strong) UISlider *micVolumeSlider; 14 @property (nonatomic, strong) UISlider *micVolumeSlider;
16 @property (nonatomic, strong) UISlider *bPlayVolumeSlider; 15 @property (nonatomic, strong) UISlider *bPlayVolumeSlider;
17 16
18 @end 17 @end
19 18
20 -@implementation AudioCfgView 19 +@implementation CNLiveVoiceSettingView
21 20
22 -- (instancetype)initWithFrame:(CGRect)frame  
23 -{ 21 +- (instancetype)initWithFrame:(CGRect)frame {
24 self = [super initWithFrame:frame]; 22 self = [super initWithFrame:frame];
25 if (self) { 23 if (self) {
26 self.backgroundColor = [UIColor colorWithWhite:0 alpha:0.1]; 24 self.backgroundColor = [UIColor colorWithWhite:0 alpha:0.1];
@@ -33,7 +31,6 @@ @@ -33,7 +31,6 @@
33 return self; 31 return self;
34 } 32 }
35 33
36 -#pragma mark -  
37 #pragma mark - action 34 #pragma mark - action
38 - (void)audioEffect:(UISegmentedControl *)sender { 35 - (void)audioEffect:(UISegmentedControl *)sender {
39 self.audioEffectBlock ? self.audioEffectBlock((int)sender.selectedSegmentIndex) : nil; 36 self.audioEffectBlock ? self.audioEffectBlock((int)sender.selectedSegmentIndex) : nil;
@@ -43,7 +40,7 @@ @@ -43,7 +40,7 @@
43 self.reverbTypeBlock ? self.reverbTypeBlock((int)sender.selectedSegmentIndex) : nil; 40 self.reverbTypeBlock ? self.reverbTypeBlock((int)sender.selectedSegmentIndex) : nil;
44 } 41 }
45 42
46 --(void)switchAction:(id)sender { 43 +- (void)switchAction:(id)sender {
47 UISwitch *swi = (UISwitch *)sender; 44 UISwitch *swi = (UISwitch *)sender;
48 self.bPlayCapturedAudio ? self.bPlayCapturedAudio(swi.on) : nil; 45 self.bPlayCapturedAudio ? self.bPlayCapturedAudio(swi.on) : nil;
49 } 46 }
@@ -56,10 +53,8 @@ @@ -56,10 +53,8 @@
56 self.bPlayVolumeBlock ? self.bPlayVolumeBlock(slider.value) : nil; 53 self.bPlayVolumeBlock ? self.bPlayVolumeBlock(slider.value) : nil;
57 } 54 }
58 55
59 -#pragma mark -  
60 #pragma mark - getter 56 #pragma mark - getter
61 -- (UISegmentedControl *)audioEffectType  
62 -{ 57 +- (UISegmentedControl *)audioEffectType {
63 if (!_audioEffectType) { 58 if (!_audioEffectType) {
64 NSArray *items = @[ @"关闭", 59 NSArray *items = @[ @"关闭",
65 @"大叔", 60 @"大叔",
@@ -81,8 +76,7 @@ @@ -81,8 +76,7 @@
81 return _audioEffectType; 76 return _audioEffectType;
82 } 77 }
83 78
84 -- (UISegmentedControl *)reverbType  
85 -{ 79 +- (UISegmentedControl *)reverbType {
86 if (!_reverbType) { 80 if (!_reverbType) {
87 NSArray *items = @[ @"关闭", 81 NSArray *items = @[ @"关闭",
88 @"录音棚", 82 @"录音棚",
@@ -104,8 +98,7 @@ @@ -104,8 +98,7 @@
104 return _reverbType; 98 return _reverbType;
105 } 99 }
106 100
107 -- (UISwitch *)bPlaySwitch  
108 -{ 101 +- (UISwitch *)bPlaySwitch {
109 if (!_bPlaySwitch) { 102 if (!_bPlaySwitch) {
110 _bPlaySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(60, 10, 100, 30)]; 103 _bPlaySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(60, 10, 100, 30)];
111 [_bPlaySwitch addTarget:self action:@selector(switchAction:) forControlEvents:UIControlEventValueChanged]; 104 [_bPlaySwitch addTarget:self action:@selector(switchAction:) forControlEvents:UIControlEventValueChanged];
@@ -117,8 +110,7 @@ @@ -117,8 +110,7 @@
117 return _bPlaySwitch; 110 return _bPlaySwitch;
118 } 111 }
119 112
120 -- (UISlider *)micVolumeSlider  
121 -{ 113 +- (UISlider *)micVolumeSlider {
122 if (!_micVolumeSlider) { 114 if (!_micVolumeSlider) {
123 _micVolumeSlider = [[UISlider alloc] initWithFrame:CGRectMake(100, 135, self.bounds.size.width-110, 24)]; 115 _micVolumeSlider = [[UISlider alloc] initWithFrame:CGRectMake(100, 135, self.bounds.size.width-110, 24)];
124 [_micVolumeSlider setMinimumTrackTintColor:[UIColor redColor]]; 116 [_micVolumeSlider setMinimumTrackTintColor:[UIColor redColor]];
@@ -136,8 +128,7 @@ @@ -136,8 +128,7 @@
136 return _micVolumeSlider; 128 return _micVolumeSlider;
137 } 129 }
138 130
139 -- (UISlider *)bPlayVolumeSlider  
140 -{ 131 +- (UISlider *)bPlayVolumeSlider {
141 if (!_bPlayVolumeSlider) { 132 if (!_bPlayVolumeSlider) {
142 _bPlayVolumeSlider = [[UISlider alloc] initWithFrame:CGRectMake(100, 170, self.bounds.size.width-110, 24)]; 133 _bPlayVolumeSlider = [[UISlider alloc] initWithFrame:CGRectMake(100, 170, self.bounds.size.width-110, 24)];
143 _bPlayVolumeSlider.value = 1.0; 134 _bPlayVolumeSlider.value = 1.0;
@@ -154,12 +145,5 @@ @@ -154,12 +145,5 @@
154 return _bPlayVolumeSlider; 145 return _bPlayVolumeSlider;
155 } 146 }
156 147
157 -/*  
158 -// Only override drawRect: if you perform custom drawing.  
159 -// An empty implementation adversely affects performance during animation.  
160 -- (void)drawRect:(CGRect)rect {  
161 - // Drawing code  
162 -}  
163 -*/  
164 148
165 @end 149 @end