├── README └── 1.png ├── ijkplayer └── README.md ├── SRPPlayerViewController.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── project.pbxproj ├── SRPPlayerViewController ├── SRPPlayerTVConnectViewController.h ├── SRPPlayerTVConnectViewController.m ├── Info.plist ├── SRPPlayerViewController.h └── SRPPlayerViewController.m ├── .gitignore ├── LICENSE ├── README_TW.md └── README.md /README/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shinrenpan/SRPPlayerViewController/HEAD/README/1.png -------------------------------------------------------------------------------- /ijkplayer/README.md: -------------------------------------------------------------------------------- 1 | 2 | Follow [ijkplayer-builder] to build (ijkplayer k0.7.4) IJKMediaFramework.framework, libssl.a, libcrypto.a, then drag them into this folder. 3 | 4 | 5 | 6 | 7 | [ijkplayer-builder]: https://github.com/shinrenpan/ijkplayer-builder 8 | -------------------------------------------------------------------------------- /SRPPlayerViewController.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SRPPlayerViewController/SRPPlayerTVConnectViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017年 shinren.pan@gmail.com All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | /** 8 | * SRPPlayerViewController TV connected UIViewController. 9 | */ 10 | @interface SRPPlayerTVConnectViewController : UIViewController 11 | 12 | @end 13 | -------------------------------------------------------------------------------- /SRPPlayerViewController/SRPPlayerTVConnectViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017年 shinren.pan@gmail.com All rights reserved. 3 | // 4 | 5 | #import "SRPPlayerTVConnectViewController.h" 6 | 7 | 8 | @implementation SRPPlayerTVConnectViewController 9 | 10 | #pragma mark - rotation 11 | - (BOOL)shouldAutorotate 12 | { 13 | return NO; 14 | } 15 | 16 | - (UIInterfaceOrientationMask)supportedInterfaceOrientations 17 | { 18 | return ~UIInterfaceOrientationMaskAll; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### OSX ### 2 | .DS_Store 3 | 4 | ### Xcode ### 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata 15 | *.xccheckout 16 | *.moved-aside 17 | DerivedData 18 | *.hmap 19 | *.ipa 20 | *.xcuserstate 21 | 22 | ### CocoaPods ### 23 | Pods/ 24 | 25 | ### Carthage ### 26 | Carthage/ 27 | 28 | ### Other framework ### 29 | *.framework 30 | *.a 31 | 32 | ### Vendor folder ### 33 | Vendor/ 34 | 35 | -------------------------------------------------------------------------------- /SRPPlayerViewController/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 2.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 20180104 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015 Shinren Pan 2 | 3 | MIT License 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | "Software"), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | -------------------------------------------------------------------------------- /README_TW.md: -------------------------------------------------------------------------------- 1 | [![LICENSE](https://img.shields.io/badge/License-MIT-green.svg?style=flat-square)](LICENSE) 2 | [![Donate](https://img.shields.io/badge/Donate-PayPal-yellow.svg?style=flat-square)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=LC58N7VZUST5N) 3 | 4 | 5 | 基於 [ijkplayer k0.7.4][1] 的播放器 UIViewController. 6 | 7 | 8 | ## 特色 9 | - 支援外接設備全螢幕. 10 | - Media Format: 參考 [ijkplayer][4]. 11 | - URL Protocol: 參考 [ijkplayer][4]. 12 | 13 | 14 | ## 編譯 15 | - 依照 [ijkplayer-builder][2] 先編譯 (ijkplayer k0.7.4) 出 **IJKMediaFramework.framework, libssl.a, libcrypto.a**, 再拖到 ijkplayer 目錄. 16 | 17 | ![](README/1.png) 18 | 19 | - 執行 build.sh 20 | 21 | 22 | ## 使用 23 | - 將 **IJKMediaFramework.framework, libssl.a, libcrypto.a, SRPPlayerViewController.framework** 拖到你的 Project. 24 | - 在你的 Project 加入 **libz.tbd** 到 `Linked Frameworks and Libraries`. 25 | - 使用 SRPPlayerViewController 或是 subclass 它, 參考 [IPTV] 26 | 27 | ```objC 28 | SRPPlayerViewController *mvc = [[SRPPlayerViewController alloc]init]; 29 | mvc.mediaURL = ... 30 | ``` 31 | 32 | 33 | 34 | 35 | 36 | [1]: https://github.com/Bilibili/ijkplayer/releases/tag/k0.7.4 "k0.7.4" 37 | [2]: https://github.com/shinrenpan/ijkplayer-builder 38 | [3]: README_TW.md 39 | [4]: https://github.com/Bilibili/ijkplayer "ijkplayer" 40 | [IPTV]: https://github.com/shinrenpan/IPTV 41 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![LICENSE](https://img.shields.io/badge/License-MIT-green.svg?style=flat-square)](LICENSE) 2 | [![Donate](https://img.shields.io/badge/Donate-PayPal-yellow.svg?style=flat-square)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=LC58N7VZUST5N) 3 | 4 | 5 | A simply media play UIViewController base on [ijkplayer k0.7.4][1] without control panel. 6 | 7 | [中文說明][3]. 8 | 9 | 10 | ## Feature 11 | - TV connected support. 12 | - Media Format: please see [ijkplayer][4]. 13 | - URL Protocol: please see [ijkplayer][4]. 14 | 15 | 16 | ## Compile 17 | - Follow [ijkplayer-builder][2] to build (ijkplayer k0.7.4) **IJKMediaFramework.framework, libssl.a, libcrypto.a**, then drag them into ijkplayer folder. 18 | 19 | ![](README/1.png) 20 | 21 | - Run build.sh 22 | 23 | 24 | ## Usage 25 | - Drag **IJKMediaFramework.framework, libssl.a, libcrypto.a, SRPPlayerViewController.framework** into your project. 26 | - In your project add **libz.tbd** into `Linked Frameworks and Libraries`. 27 | - Use SRPPlayerViewController or subclass, see [IPTV]. 28 | 29 | ```objc 30 | SRPPlayerViewController *mvc = [[SRPPlayerViewController alloc]init]; 31 | mvc.mediaURL = ... 32 | ``` 33 | 34 | 35 | 36 | 37 | 38 | [1]: https://github.com/Bilibili/ijkplayer/releases/tag/k0.7.4 "k0.7.4" 39 | [2]: https://github.com/shinrenpan/ijkplayer-builder 40 | [3]: README_TW.md 41 | [4]: https://github.com/Bilibili/ijkplayer "ijkplayer" 42 | [IPTV]: https://github.com/shinrenpan/IPTV 43 | -------------------------------------------------------------------------------- /SRPPlayerViewController/SRPPlayerViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017年 shinren.pan@gmail.com All rights reserved. 3 | // 4 | 5 | #import 6 | #import 7 | 8 | NS_ASSUME_NONNULL_BEGIN 9 | 10 | @class SRPPlayerViewController; 11 | 12 | /** 13 | * SRPPlayerViewController protocol 14 | */ 15 | @protocol SRPPlayerViewControllerDelegate 16 | @optional 17 | 18 | 19 | ///----------------------------------------------------------------------------- 20 | /// @name SRPPlayerViewControllerDelegate optional methods 21 | ///----------------------------------------------------------------------------- 22 | 23 | /** 24 | * SRPPlayerViewController playback state change. 25 | * 26 | * @param playerController SRPPlayerViewController object. 27 | * @param state Changed playback state. 28 | */ 29 | - (void)playerController:(SRPPlayerViewController *)playerController 30 | playbackStateChanged:(IJKMPMoviePlaybackState)state; 31 | 32 | /** 33 | * SRPPlayerViewController 34 | * 35 | * @param playerController SRPPlayerViewController object. 36 | * @param state Changed load state. 37 | */ 38 | - (void)playerController:(SRPPlayerViewController *)playerController 39 | loadStateChanged:(IJKMPMovieLoadState)state; 40 | 41 | /** 42 | * SRPPlayerViewController finished. 43 | * 44 | * @param playerController SRPPlayerViewController object. 45 | * @param reason Finish reason. 46 | */ 47 | - (void)playerController:(SRPPlayerViewController *)playerController 48 | finishReason:(IJKMPMovieFinishReason)reason; 49 | 50 | /** 51 | * SRPPlayerViewController TV connected. 52 | */ 53 | - (void)playerControllerTVConnected; 54 | 55 | /** 56 | * SRPPlayerViewController TV disconnected. 57 | */ 58 | - (void)playerControllerTVDisconnected; 59 | 60 | @end 61 | 62 | 63 | /** 64 | * A simply media play UIViewController. 65 | */ 66 | @interface SRPPlayerViewController : UIViewController 67 | 68 | 69 | ///----------------------------------------------------------------------------- 70 | /// @name Properties 71 | ///----------------------------------------------------------------------------- 72 | 73 | /** 74 | * Media URL. 75 | */ 76 | @property (nonatomic, strong) NSURL *mediaURL; 77 | 78 | /** 79 | * Delegation. 80 | */ 81 | @property (nonatomic, weak, nullable) iddelegate; 82 | 83 | /** 84 | * Current time. 85 | */ 86 | @property (nonatomic, assign) NSTimeInterval currentPlaybackTime; 87 | 88 | /** 89 | * Scale mode. 90 | */ 91 | @property (nonatomic, assign) IJKMPMovieScalingMode scalingMode; 92 | 93 | /** 94 | * Duration. 95 | */ 96 | @property (nonatomic, readonly) NSTimeInterval duration; 97 | 98 | /** 99 | * Playble duration. 100 | */ 101 | @property (nonatomic, readonly) NSTimeInterval playableDuration; 102 | 103 | /** 104 | * Buffer progress. 105 | */ 106 | @property (nonatomic, readonly) NSInteger bufferingProgress; 107 | 108 | /** 109 | * TV Connected. 110 | */ 111 | @property (nonatomic, readonly) BOOL isTVConnected; 112 | 113 | /** 114 | * Is playing. 115 | */ 116 | @property (nonatomic, readonly) BOOL isPlaying; 117 | 118 | 119 | ///----------------------------------------------------------------------------- 120 | /// @name Public methods 121 | ///----------------------------------------------------------------------------- 122 | 123 | /** 124 | * Play media. 125 | */ 126 | - (void)play; 127 | 128 | /** 129 | * Pause media. 130 | */ 131 | - (void)pause; 132 | 133 | /** 134 | * Stop media. 135 | */ 136 | - (void)stop; 137 | 138 | @end 139 | 140 | NS_ASSUME_NONNULL_END 141 | -------------------------------------------------------------------------------- /SRPPlayerViewController/SRPPlayerViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017年 shinren.pan@gmail.com All rights reserved. 3 | // 4 | 5 | #import "SRPPlayerViewController.h" 6 | #import "SRPPlayerTVConnectViewController.h" 7 | 8 | 9 | @interface SRPPlayerViewController () 10 | 11 | @property (nonatomic, strong) UIWindow *tvConnectWindow; 12 | @property (nonatomic, strong) idplayer; 13 | 14 | @end 15 | 16 | 17 | @implementation SRPPlayerViewController 18 | 19 | #pragma mark - LifeCycle 20 | - (void)dealloc 21 | { 22 | [self __removeObserver]; 23 | [_player shutdown]; 24 | } 25 | 26 | - (void)viewDidLoad 27 | { 28 | [super viewDidLoad]; 29 | [self __setup]; 30 | } 31 | 32 | #pragma mark - Properties getter 33 | - (NSTimeInterval)currentPlaybackTime 34 | { 35 | return [_player currentPlaybackTime]; 36 | } 37 | 38 | - (IJKMPMovieScalingMode)scalingMode 39 | { 40 | return [_player scalingMode]; 41 | } 42 | 43 | - (NSTimeInterval)duration 44 | { 45 | return [_player duration]; 46 | } 47 | 48 | - (NSTimeInterval)playableDuration 49 | { 50 | return [_player playableDuration]; 51 | } 52 | 53 | - (BOOL)isTVConnected 54 | { 55 | return [UIScreen screens].count > 1; 56 | } 57 | 58 | - (BOOL)isPlaying 59 | { 60 | return [_player isPlaying]; 61 | } 62 | 63 | #pragma mark - Properties setter 64 | - (void)setCurrentPlaybackTime:(NSTimeInterval)currentPlaybackTime 65 | { 66 | [_player setCurrentPlaybackTime:currentPlaybackTime]; 67 | } 68 | 69 | - (void)setScalingMode:(IJKMPMovieScalingMode)scalingMode 70 | { 71 | if(scalingMode < 0) 72 | { 73 | scalingMode = IJKMPMovieScalingModeFill; 74 | } 75 | 76 | if(scalingMode > IJKMPMovieScalingModeFill) 77 | { 78 | scalingMode = IJKMPMovieScalingModeNone; 79 | } 80 | 81 | [_player setScalingMode:scalingMode]; 82 | } 83 | 84 | #pragma mark - Public 85 | - (void)play 86 | { 87 | [_player play]; 88 | } 89 | 90 | - (void)pause 91 | { 92 | [_player pause]; 93 | } 94 | 95 | - (void)stop 96 | { 97 | [_player stop]; 98 | } 99 | 100 | #pragma mark - Private 101 | #pragma mark setup 102 | - (void)__setup 103 | { 104 | if(!_mediaURL) 105 | { 106 | return; 107 | } 108 | 109 | [IJKFFMoviePlayerController setLogReport:NO]; 110 | 111 | _tvConnectWindow = [[UIWindow alloc]init]; 112 | 113 | IJKFFOptions *options = [IJKFFOptions optionsByDefault]; 114 | _player = [[IJKFFMoviePlayerController alloc]initWithContentURL:_mediaURL withOptions:options]; 115 | 116 | UIView *playerView = [_player view]; 117 | playerView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 118 | playerView.frame = self.view.bounds; 119 | playerView.backgroundColor = [UIColor blackColor]; 120 | 121 | [self.view insertSubview:playerView atIndex:0]; 122 | [_player setShouldAutoplay:YES]; 123 | [_player setScalingMode:IJKMPMovieScalingModeAspectFit]; 124 | [self __addObserver]; 125 | } 126 | 127 | #pragma mark Observer handle 128 | - (void)__addObserver 129 | { 130 | NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; 131 | 132 | [center addObserver:self selector:@selector(__playerPlaybackDidFinishNotification:) 133 | name:IJKMPMoviePlayerPlaybackDidFinishNotification object:nil]; 134 | 135 | [center addObserver:self selector:@selector(__playerPlaybackStateDidChangeNotification:) 136 | name:IJKMPMoviePlayerPlaybackStateDidChangeNotification object:nil]; 137 | 138 | [center addObserver:self selector:@selector(__playerLoadStateDidChangeNotification:) 139 | name:IJKMPMoviePlayerLoadStateDidChangeNotification object:nil]; 140 | 141 | [center addObserver:self selector:@selector(__screenDidConnectNotification:) 142 | name:UIScreenDidConnectNotification object:nil]; 143 | 144 | [center addObserver:self selector:@selector(__screenDidDisconnectNotification:) 145 | name:UIScreenDidDisconnectNotification object:nil]; 146 | 147 | [_player prepareToPlay]; 148 | 149 | if(self.isTVConnected) 150 | { 151 | [self __screenDidConnectNotification:nil]; 152 | } 153 | } 154 | 155 | - (void)__removeObserver 156 | { 157 | [[NSNotificationCenter defaultCenter]removeObserver:self]; 158 | } 159 | 160 | #pragma mark player handle 161 | - (void)__playerPlaybackDidFinishNotification:(NSNotification *)sender 162 | { 163 | [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 164 | 165 | if(_delegate && [_delegate respondsToSelector:@selector(playerController:finishReason:)]) 166 | { 167 | NSInteger reason = 168 | [sender.userInfo[IJKMPMoviePlayerPlaybackDidFinishReasonUserInfoKey] integerValue]; 169 | 170 | [_delegate playerController:self finishReason:reason]; 171 | } 172 | } 173 | 174 | - (void)__playerPlaybackStateDidChangeNotification:(NSNotification *)sender 175 | { 176 | [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 177 | 178 | if(_delegate && [_delegate respondsToSelector:@selector(playerController:playbackStateChanged:)]) 179 | { 180 | NSInteger state = [@([_player playbackState]) integerValue]; 181 | 182 | [_delegate playerController:self playbackStateChanged:state]; 183 | } 184 | } 185 | 186 | - (void)__playerLoadStateDidChangeNotification:(NSNotification *)sender 187 | { 188 | [UIApplication sharedApplication].networkActivityIndicatorVisible = 189 | ([_player loadState] == IJKMPMovieLoadStateStalled) ? YES : NO; 190 | 191 | if(_delegate && [_delegate respondsToSelector:@selector(playerController:loadStateChanged:)]) 192 | { 193 | NSInteger state = [@([_player loadState]) integerValue]; 194 | 195 | [_delegate playerController:self loadStateChanged:state]; 196 | } 197 | } 198 | 199 | #pragma mark TV connect handle 200 | - (void)__screenDidConnectNotification:(NSNotification *)sender 201 | { 202 | UIView *playerView = [_player view]; 203 | UIScreen *screen = (sender.object) ? sender.object : [UIScreen screens].lastObject; 204 | screen.overscanCompensation = UIScreenOverscanCompensationNone; 205 | SRPPlayerTVConnectViewController *mvc = [[SRPPlayerTVConnectViewController alloc]init]; 206 | _tvConnectWindow.rootViewController = mvc; 207 | _tvConnectWindow.screen = screen; 208 | _tvConnectWindow.hidden = NO; 209 | mvc.view.frame = screen.bounds; 210 | playerView.frame = screen.bounds; 211 | 212 | [mvc.view addSubview:playerView]; 213 | 214 | if(_delegate && [_delegate respondsToSelector:@selector(playerControllerTVConnected)]) 215 | { 216 | [_delegate playerControllerTVConnected]; 217 | } 218 | } 219 | 220 | - (void)__screenDidDisconnectNotification:(NSNotification *)sender 221 | { 222 | UIView *playerView = [_player view]; 223 | _tvConnectWindow.hidden = YES; 224 | _tvConnectWindow.rootViewController = nil; 225 | playerView.frame = self.view.bounds; 226 | 227 | [self.view insertSubview:playerView atIndex:0]; 228 | 229 | if(_delegate && [_delegate respondsToSelector:@selector(playerControllerTVDisconnected)]) 230 | { 231 | [_delegate playerControllerTVDisconnected]; 232 | } 233 | } 234 | 235 | @end 236 | -------------------------------------------------------------------------------- /SRPPlayerViewController.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 136BD04DC7790EB3F9763FE03D42828D /* SRPPlayerTVConnectViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 082CB648E80176E8C0BF58C114D8F2C8 /* SRPPlayerTVConnectViewController.h */; settings = {ATTRIBUTES = (Private, ); }; }; 11 | 5AB3F5D61FFF325700CE22F6 /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AB3F5D31FFF325500CE22F6 /* libssl.a */; }; 12 | 5AB3F5D71FFF325700CE22F6 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AB3F5D41FFF325600CE22F6 /* libcrypto.a */; }; 13 | 5AB3F5D81FFF325700CE22F6 /* IJKMediaFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AB3F5D51FFF325700CE22F6 /* IJKMediaFramework.framework */; }; 14 | 87F96EB1DB365D64137AC08630EB7E20 /* SRPPlayerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C48D2371C8318131A702A9135BC9E57 /* SRPPlayerViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 15 | 8C40DD1677DD6F5DA4DA96FAF10ECFC5 /* SRPPlayerTVConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A49CD9758901DB0E02150D330A2A75C6 /* SRPPlayerTVConnectViewController.m */; }; 16 | BAEE1BA0D91D5E932B3F5B3BA5063F40 /* SRPPlayerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DFA8AF47448B9261645769FE40AF4B74 /* SRPPlayerViewController.m */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXFileReference section */ 20 | 082CB648E80176E8C0BF58C114D8F2C8 /* SRPPlayerTVConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRPPlayerTVConnectViewController.h; sourceTree = ""; }; 21 | 5AB3F5D31FFF325500CE22F6 /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libssl.a; sourceTree = ""; }; 22 | 5AB3F5D41FFF325600CE22F6 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libcrypto.a; sourceTree = ""; }; 23 | 5AB3F5D51FFF325700CE22F6 /* IJKMediaFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = IJKMediaFramework.framework; sourceTree = ""; }; 24 | 6BDE078F6AEDEB77D711F1F4ECB58987 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 25 | 6F27FA55F9BE1AE5AE52021E86D1649A /* SRPPlayerViewController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SRPPlayerViewController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 26 | 7C48D2371C8318131A702A9135BC9E57 /* SRPPlayerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRPPlayerViewController.h; sourceTree = ""; }; 27 | A49CD9758901DB0E02150D330A2A75C6 /* SRPPlayerTVConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRPPlayerTVConnectViewController.m; sourceTree = ""; }; 28 | DFA8AF47448B9261645769FE40AF4B74 /* SRPPlayerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRPPlayerViewController.m; sourceTree = ""; }; 29 | /* End PBXFileReference section */ 30 | 31 | /* Begin PBXFrameworksBuildPhase section */ 32 | 4481344802717EC175E0DCDE0E2A4475 /* Frameworks */ = { 33 | isa = PBXFrameworksBuildPhase; 34 | buildActionMask = 2147483647; 35 | files = ( 36 | 5AB3F5D81FFF325700CE22F6 /* IJKMediaFramework.framework in Frameworks */, 37 | 5AB3F5D71FFF325700CE22F6 /* libcrypto.a in Frameworks */, 38 | 5AB3F5D61FFF325700CE22F6 /* libssl.a in Frameworks */, 39 | ); 40 | runOnlyForDeploymentPostprocessing = 0; 41 | }; 42 | /* End PBXFrameworksBuildPhase section */ 43 | 44 | /* Begin PBXGroup section */ 45 | 2FEAFCE0F89BC946E27B50B21ECF5210 /* Products */ = { 46 | isa = PBXGroup; 47 | children = ( 48 | 6F27FA55F9BE1AE5AE52021E86D1649A /* SRPPlayerViewController.framework */, 49 | ); 50 | name = Products; 51 | sourceTree = ""; 52 | }; 53 | 5AB3F5D21FFF321600CE22F6 /* ijkplayer */ = { 54 | isa = PBXGroup; 55 | children = ( 56 | 5AB3F5D51FFF325700CE22F6 /* IJKMediaFramework.framework */, 57 | 5AB3F5D41FFF325600CE22F6 /* libcrypto.a */, 58 | 5AB3F5D31FFF325500CE22F6 /* libssl.a */, 59 | ); 60 | path = ijkplayer; 61 | sourceTree = ""; 62 | }; 63 | F7849BB4A2FD89D5A9FD02E28A664C05 /* SRPPlayerViewController */ = { 64 | isa = PBXGroup; 65 | children = ( 66 | 6BDE078F6AEDEB77D711F1F4ECB58987 /* Info.plist */, 67 | 082CB648E80176E8C0BF58C114D8F2C8 /* SRPPlayerTVConnectViewController.h */, 68 | A49CD9758901DB0E02150D330A2A75C6 /* SRPPlayerTVConnectViewController.m */, 69 | 7C48D2371C8318131A702A9135BC9E57 /* SRPPlayerViewController.h */, 70 | DFA8AF47448B9261645769FE40AF4B74 /* SRPPlayerViewController.m */, 71 | ); 72 | path = SRPPlayerViewController; 73 | sourceTree = ""; 74 | }; 75 | FDA804660B35894C597CA63D99105680 = { 76 | isa = PBXGroup; 77 | children = ( 78 | 5AB3F5D21FFF321600CE22F6 /* ijkplayer */, 79 | 2FEAFCE0F89BC946E27B50B21ECF5210 /* Products */, 80 | F7849BB4A2FD89D5A9FD02E28A664C05 /* SRPPlayerViewController */, 81 | ); 82 | sourceTree = ""; 83 | }; 84 | /* End PBXGroup section */ 85 | 86 | /* Begin PBXHeadersBuildPhase section */ 87 | C261C3FDCB27BD7E9FBA6086ED68E563 /* Headers */ = { 88 | isa = PBXHeadersBuildPhase; 89 | buildActionMask = 2147483647; 90 | files = ( 91 | 136BD04DC7790EB3F9763FE03D42828D /* SRPPlayerTVConnectViewController.h in Headers */, 92 | 87F96EB1DB365D64137AC08630EB7E20 /* SRPPlayerViewController.h in Headers */, 93 | ); 94 | runOnlyForDeploymentPostprocessing = 0; 95 | }; 96 | /* End PBXHeadersBuildPhase section */ 97 | 98 | /* Begin PBXNativeTarget section */ 99 | 510DEB2A067F5A0F2C612FE0D67516A5 /* SRPPlayerViewController */ = { 100 | isa = PBXNativeTarget; 101 | buildConfigurationList = 7B51A881C68384C178D63B3F8B46ADC9 /* Build configuration list for PBXNativeTarget "SRPPlayerViewController" */; 102 | buildPhases = ( 103 | 29B0C20EE1CDCB0D50EB50F1BF5C4914 /* Sources */, 104 | 4481344802717EC175E0DCDE0E2A4475 /* Frameworks */, 105 | C261C3FDCB27BD7E9FBA6086ED68E563 /* Headers */, 106 | 26CC44E04C2B7FAC554644FB5400D64C /* Resources */, 107 | ); 108 | buildRules = ( 109 | ); 110 | dependencies = ( 111 | ); 112 | name = SRPPlayerViewController; 113 | productName = SRPPlayerViewController; 114 | productReference = 6F27FA55F9BE1AE5AE52021E86D1649A /* SRPPlayerViewController.framework */; 115 | productType = "com.apple.product-type.framework"; 116 | }; 117 | /* End PBXNativeTarget section */ 118 | 119 | /* Begin PBXProject section */ 120 | 45643D7E6B58ADB97C9BC30C7F17E34B /* Project object */ = { 121 | isa = PBXProject; 122 | attributes = { 123 | LastUpgradeCheck = 0800; 124 | ORGANIZATIONNAME = "Shinren Pan"; 125 | TargetAttributes = { 126 | 510DEB2A067F5A0F2C612FE0D67516A5 = { 127 | CreatedOnToolsVersion = 7.2.1; 128 | }; 129 | }; 130 | }; 131 | buildConfigurationList = E2E3E2D4686BF75A7E9D70EA338DB7FD /* Build configuration list for PBXProject "SRPPlayerViewController" */; 132 | compatibilityVersion = "Xcode 3.2"; 133 | developmentRegion = English; 134 | hasScannedForEncodings = 0; 135 | knownRegions = ( 136 | en, 137 | Base, 138 | ); 139 | mainGroup = FDA804660B35894C597CA63D99105680; 140 | productRefGroup = 2FEAFCE0F89BC946E27B50B21ECF5210 /* Products */; 141 | projectDirPath = ""; 142 | projectRoot = ""; 143 | targets = ( 144 | 510DEB2A067F5A0F2C612FE0D67516A5 /* SRPPlayerViewController */, 145 | ); 146 | }; 147 | /* End PBXProject section */ 148 | 149 | /* Begin PBXResourcesBuildPhase section */ 150 | 26CC44E04C2B7FAC554644FB5400D64C /* Resources */ = { 151 | isa = PBXResourcesBuildPhase; 152 | buildActionMask = 2147483647; 153 | files = ( 154 | ); 155 | runOnlyForDeploymentPostprocessing = 0; 156 | }; 157 | /* End PBXResourcesBuildPhase section */ 158 | 159 | /* Begin PBXSourcesBuildPhase section */ 160 | 29B0C20EE1CDCB0D50EB50F1BF5C4914 /* Sources */ = { 161 | isa = PBXSourcesBuildPhase; 162 | buildActionMask = 2147483647; 163 | files = ( 164 | 8C40DD1677DD6F5DA4DA96FAF10ECFC5 /* SRPPlayerTVConnectViewController.m in Sources */, 165 | BAEE1BA0D91D5E932B3F5B3BA5063F40 /* SRPPlayerViewController.m in Sources */, 166 | ); 167 | runOnlyForDeploymentPostprocessing = 0; 168 | }; 169 | /* End PBXSourcesBuildPhase section */ 170 | 171 | /* Begin XCBuildConfiguration section */ 172 | 26693EDE2D6FEF137AA45A3BBC15A98B /* Release */ = { 173 | isa = XCBuildConfiguration; 174 | buildSettings = { 175 | ALWAYS_SEARCH_USER_PATHS = NO; 176 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 177 | CLANG_CXX_LIBRARY = "libc++"; 178 | CLANG_ENABLE_MODULES = YES; 179 | CLANG_ENABLE_OBJC_ARC = YES; 180 | CLANG_WARN_BOOL_CONVERSION = YES; 181 | CLANG_WARN_CONSTANT_CONVERSION = YES; 182 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 183 | CLANG_WARN_EMPTY_BODY = YES; 184 | CLANG_WARN_ENUM_CONVERSION = YES; 185 | CLANG_WARN_INFINITE_RECURSION = YES; 186 | CLANG_WARN_INT_CONVERSION = YES; 187 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 188 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 189 | CLANG_WARN_UNREACHABLE_CODE = YES; 190 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 191 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 192 | COPY_PHASE_STRIP = NO; 193 | CURRENT_PROJECT_VERSION = 1; 194 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 195 | ENABLE_NS_ASSERTIONS = NO; 196 | ENABLE_STRICT_OBJC_MSGSEND = YES; 197 | GCC_C_LANGUAGE_STANDARD = gnu99; 198 | GCC_NO_COMMON_BLOCKS = YES; 199 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 200 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 201 | GCC_WARN_UNDECLARED_SELECTOR = YES; 202 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 203 | GCC_WARN_UNUSED_FUNCTION = YES; 204 | GCC_WARN_UNUSED_VARIABLE = YES; 205 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 206 | MTL_ENABLE_DEBUG_INFO = NO; 207 | OTHER_CFLAGS = "-fembed-bitcode"; 208 | SDKROOT = iphoneos; 209 | TARGETED_DEVICE_FAMILY = "1,2"; 210 | VALIDATE_PRODUCT = YES; 211 | VERSIONING_SYSTEM = "apple-generic"; 212 | VERSION_INFO_PREFIX = ""; 213 | }; 214 | name = Release; 215 | }; 216 | BD7AE8EF2687BE990E4F06914B41DB6E /* Debug */ = { 217 | isa = XCBuildConfiguration; 218 | buildSettings = { 219 | BITCODE_GENERATION_MODE = marker; 220 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 221 | DEFINES_MODULE = YES; 222 | DYLIB_COMPATIBILITY_VERSION = 1; 223 | DYLIB_CURRENT_VERSION = 1; 224 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 225 | FRAMEWORK_SEARCH_PATHS = ( 226 | "$(inherited)", 227 | "$(PROJECT_DIR)", 228 | "$(PROJECT_DIR)/ijkplayer", 229 | ); 230 | INFOPLIST_FILE = SRPPlayerViewController/Info.plist; 231 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 232 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 233 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 234 | LIBRARY_SEARCH_PATHS = ( 235 | "$(inherited)", 236 | "$(PROJECT_DIR)/ijkplayer", 237 | ); 238 | MACH_O_TYPE = staticlib; 239 | PRODUCT_BUNDLE_IDENTIFIER = com.shinrenpan.SRPPlayerViewController; 240 | PRODUCT_NAME = "$(TARGET_NAME)"; 241 | SKIP_INSTALL = YES; 242 | VALID_ARCHS = "arm64 armv7 armv7s"; 243 | }; 244 | name = Debug; 245 | }; 246 | D7780A99DEAA84ED7F99B57E35DCBC97 /* Debug */ = { 247 | isa = XCBuildConfiguration; 248 | buildSettings = { 249 | ALWAYS_SEARCH_USER_PATHS = NO; 250 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 251 | CLANG_CXX_LIBRARY = "libc++"; 252 | CLANG_ENABLE_MODULES = YES; 253 | CLANG_ENABLE_OBJC_ARC = YES; 254 | CLANG_WARN_BOOL_CONVERSION = YES; 255 | CLANG_WARN_CONSTANT_CONVERSION = YES; 256 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 257 | CLANG_WARN_EMPTY_BODY = YES; 258 | CLANG_WARN_ENUM_CONVERSION = YES; 259 | CLANG_WARN_INFINITE_RECURSION = YES; 260 | CLANG_WARN_INT_CONVERSION = YES; 261 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 262 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 263 | CLANG_WARN_UNREACHABLE_CODE = YES; 264 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 265 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 266 | COPY_PHASE_STRIP = NO; 267 | CURRENT_PROJECT_VERSION = 1; 268 | DEBUG_INFORMATION_FORMAT = dwarf; 269 | ENABLE_STRICT_OBJC_MSGSEND = YES; 270 | ENABLE_TESTABILITY = YES; 271 | GCC_C_LANGUAGE_STANDARD = gnu99; 272 | GCC_DYNAMIC_NO_PIC = NO; 273 | GCC_NO_COMMON_BLOCKS = YES; 274 | GCC_OPTIMIZATION_LEVEL = 0; 275 | GCC_PREPROCESSOR_DEFINITIONS = ( 276 | "DEBUG=1", 277 | "$(inherited)", 278 | ); 279 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 280 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 281 | GCC_WARN_UNDECLARED_SELECTOR = YES; 282 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 283 | GCC_WARN_UNUSED_FUNCTION = YES; 284 | GCC_WARN_UNUSED_VARIABLE = YES; 285 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 286 | MTL_ENABLE_DEBUG_INFO = YES; 287 | ONLY_ACTIVE_ARCH = YES; 288 | OTHER_CFLAGS = "-fembed-bitcode-marker"; 289 | SDKROOT = iphoneos; 290 | TARGETED_DEVICE_FAMILY = "1,2"; 291 | VERSIONING_SYSTEM = "apple-generic"; 292 | VERSION_INFO_PREFIX = ""; 293 | }; 294 | name = Debug; 295 | }; 296 | F3F94FAA361581E5C9EBFEC28B18ACBE /* Release */ = { 297 | isa = XCBuildConfiguration; 298 | buildSettings = { 299 | BITCODE_GENERATION_MODE = bitcode; 300 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 301 | DEFINES_MODULE = YES; 302 | DYLIB_COMPATIBILITY_VERSION = 1; 303 | DYLIB_CURRENT_VERSION = 1; 304 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 305 | FRAMEWORK_SEARCH_PATHS = ( 306 | "$(inherited)", 307 | "$(PROJECT_DIR)", 308 | "$(PROJECT_DIR)/ijkplayer", 309 | ); 310 | INFOPLIST_FILE = SRPPlayerViewController/Info.plist; 311 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 312 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 313 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 314 | LIBRARY_SEARCH_PATHS = ( 315 | "$(inherited)", 316 | "$(PROJECT_DIR)/ijkplayer", 317 | ); 318 | MACH_O_TYPE = staticlib; 319 | PRODUCT_BUNDLE_IDENTIFIER = com.shinrenpan.SRPPlayerViewController; 320 | PRODUCT_NAME = "$(TARGET_NAME)"; 321 | SKIP_INSTALL = YES; 322 | VALID_ARCHS = "arm64 armv7 armv7s"; 323 | }; 324 | name = Release; 325 | }; 326 | /* End XCBuildConfiguration section */ 327 | 328 | /* Begin XCConfigurationList section */ 329 | 7B51A881C68384C178D63B3F8B46ADC9 /* Build configuration list for PBXNativeTarget "SRPPlayerViewController" */ = { 330 | isa = XCConfigurationList; 331 | buildConfigurations = ( 332 | BD7AE8EF2687BE990E4F06914B41DB6E /* Debug */, 333 | F3F94FAA361581E5C9EBFEC28B18ACBE /* Release */, 334 | ); 335 | defaultConfigurationIsVisible = 0; 336 | defaultConfigurationName = Release; 337 | }; 338 | E2E3E2D4686BF75A7E9D70EA338DB7FD /* Build configuration list for PBXProject "SRPPlayerViewController" */ = { 339 | isa = XCConfigurationList; 340 | buildConfigurations = ( 341 | D7780A99DEAA84ED7F99B57E35DCBC97 /* Debug */, 342 | 26693EDE2D6FEF137AA45A3BBC15A98B /* Release */, 343 | ); 344 | defaultConfigurationIsVisible = 0; 345 | defaultConfigurationName = Release; 346 | }; 347 | /* End XCConfigurationList section */ 348 | }; 349 | rootObject = 45643D7E6B58ADB97C9BC30C7F17E34B /* Project object */; 350 | } 351 | --------------------------------------------------------------------------------