Browse Source

添加专辑类播放资源枚举

尹永奇 2 years ago
parent
commit
543dbe60e1
27 changed files with 1331 additions and 396 deletions
  1. 31 9
      Example/MKRRadioManager.xcodeproj/project.pbxproj
  2. 28 3
      Example/MKRRadioManager/MKRViewController.m
  3. 2 2
      Example/Podfile.lock
  4. 2 2
      Example/Pods/Manifest.lock
  5. 380 378
      Example/Pods/Pods.xcodeproj/project.pbxproj
  6. 14 0
      Example/Pods/Target Support Files/MKRRadioManager/MKRRadioManager.debug.xcconfig
  7. 14 0
      Example/Pods/Target Support Files/MKRRadioManager/MKRRadioManager.release.xcconfig
  8. 4 1
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example.debug.xcconfig
  9. 4 1
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example.release.xcconfig
  10. 3 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests.debug.xcconfig
  11. 3 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests.release.xcconfig
  12. 12 0
      Example/Pods/Target Support Files/YYCategory/YYCategory.debug.xcconfig
  13. 12 0
      Example/Pods/Target Support Files/YYCategory/YYCategory.release.xcconfig
  14. 79 0
      libs/IJKMediaFramework.framework/Headers/IJKAVMoviePlayerController.h
  15. 64 0
      libs/IJKMediaFramework.framework/Headers/IJKFFMonitor.h
  16. 144 0
      libs/IJKMediaFramework.framework/Headers/IJKFFMoviePlayerController.h
  17. 75 0
      libs/IJKMediaFramework.framework/Headers/IJKFFOptions.h
  18. 39 0
      libs/IJKMediaFramework.framework/Headers/IJKKVOController.h
  19. 32 0
      libs/IJKMediaFramework.framework/Headers/IJKMPMoviePlayerController.h
  20. 60 0
      libs/IJKMediaFramework.framework/Headers/IJKMediaFramework.h
  21. 33 0
      libs/IJKMediaFramework.framework/Headers/IJKMediaModule.h
  22. 221 0
      libs/IJKMediaFramework.framework/Headers/IJKMediaPlayback.h
  23. 32 0
      libs/IJKMediaFramework.framework/Headers/IJKMediaPlayer.h
  24. 37 0
      libs/IJKMediaFramework.framework/Headers/IJKNotificationManager.h
  25. BIN
      libs/IJKMediaFramework.framework/IJKMediaFramework
  26. BIN
      libs/IJKMediaFramework.framework/Info.plist
  27. 6 0
      libs/IJKMediaFramework.framework/Modules/module.modulemap

+ 31 - 9
Example/MKRRadioManager.xcodeproj/project.pbxproj

@@ -9,8 +9,6 @@
 /* Begin PBXBuildFile section */
 		4E7AB8630DC51FE278D61B8A /* libPods-MKRRadioManager_Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AE2937E497D08BF5EB2A50DA /* libPods-MKRRadioManager_Tests.a */; };
 		6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; };
-		6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58F195388D20070C39A /* CoreGraphics.framework */; };
-		6003F592195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; };
 		6003F598195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F596195388D20070C39A /* InfoPlist.strings */; };
 		6003F59A195388D20070C39A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F599195388D20070C39A /* main.m */; };
 		6003F59E195388D20070C39A /* MKRAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F59D195388D20070C39A /* MKRAppDelegate.m */; };
@@ -24,6 +22,8 @@
 		71719F9F1E33DC2100824A3D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */; };
 		873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */; };
 		BA7A1D5E245816A300E48A70 /* MKRTestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = BA7A1D5D245816A300E48A70 /* MKRTestObject.m */; };
+		BA8257C82A5BAACC00925F9E /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BA8257C72A5BAACC00925F9E /* AVFoundation.framework */; };
+		BA8257DB2A5BAB9100925F9E /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = BA8257CF2A5BAAF700925F9E /* libz.tbd */; };
 		BAD6DE83226708F70095069D /* MKRPlayControlViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BAD6DE82226708F70095069D /* MKRPlayControlViewController.m */; };
 		EA19B331230A354400BFA3D2 /* MKRRadioManager in Resources */ = {isa = PBXBuildFile; fileRef = EA19B330230A354400BFA3D2 /* MKRRadioManager */; };
 		F0C80BB9A91EABEC95F33C37 /* libPods-MKRRadioManager_Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A891D43341CE97393A3100E5 /* libPods-MKRRadioManager_Example.a */; };
@@ -84,6 +84,17 @@
 		AE2937E497D08BF5EB2A50DA /* libPods-MKRRadioManager_Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MKRRadioManager_Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		BA7A1D5C245816A300E48A70 /* MKRTestObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MKRTestObject.h; sourceTree = "<group>"; };
 		BA7A1D5D245816A300E48A70 /* MKRTestObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MKRTestObject.m; sourceTree = "<group>"; };
+		BA8257C52A5BAAC600925F9E /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
+		BA8257C72A5BAACC00925F9E /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
+		BA8257C92A5BAADA00925F9E /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; };
+		BA8257CB2A5BAAE100925F9E /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = System/Library/Frameworks/CoreVideo.framework; sourceTree = SDKROOT; };
+		BA8257CD2A5BAAEA00925F9E /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; };
+		BA8257CF2A5BAAF700925F9E /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
+		BA8257D12A5BAB0400925F9E /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; };
+		BA8257D32A5BAB0C00925F9E /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
+		BA8257D52A5BAB1100925F9E /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
+		BA8257D72A5BAB1800925F9E /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
+		BA8257D92A5BAB2C00925F9E /* VideoToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VideoToolbox.framework; path = System/Library/Frameworks/VideoToolbox.framework; sourceTree = SDKROOT; };
 		BAD6DE81226708F70095069D /* MKRPlayControlViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MKRPlayControlViewController.h; sourceTree = "<group>"; };
 		BAD6DE82226708F70095069D /* MKRPlayControlViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MKRPlayControlViewController.m; sourceTree = "<group>"; };
 		EA19B330230A354400BFA3D2 /* MKRRadioManager */ = {isa = PBXFileReference; lastKnownFileType = folder; name = MKRRadioManager; path = ../../MKRRadioManager/Classes/MKRRadioManager; sourceTree = "<group>"; };
@@ -95,8 +106,8 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */,
-				6003F592195388D20070C39A /* UIKit.framework in Frameworks */,
+				BA8257DB2A5BAB9100925F9E /* libz.tbd in Frameworks */,
+				BA8257C82A5BAACC00925F9E /* AVFoundation.framework in Frameworks */,
 				6003F58E195388D20070C39A /* Foundation.framework in Frameworks */,
 				F0C80BB9A91EABEC95F33C37 /* libPods-MKRRadioManager_Example.a in Frameworks */,
 			);
@@ -140,6 +151,17 @@
 		6003F58C195388D20070C39A /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				BA8257D92A5BAB2C00925F9E /* VideoToolbox.framework */,
+				BA8257D72A5BAB1800925F9E /* QuartzCore.framework */,
+				BA8257D52A5BAB1100925F9E /* OpenGLES.framework */,
+				BA8257D32A5BAB0C00925F9E /* MobileCoreServices.framework */,
+				BA8257D12A5BAB0400925F9E /* MediaPlayer.framework */,
+				BA8257CF2A5BAAF700925F9E /* libz.tbd */,
+				BA8257CD2A5BAAEA00925F9E /* libbz2.tbd */,
+				BA8257CB2A5BAAE100925F9E /* CoreVideo.framework */,
+				BA8257C92A5BAADA00925F9E /* CoreMedia.framework */,
+				BA8257C72A5BAACC00925F9E /* AVFoundation.framework */,
+				BA8257C52A5BAAC600925F9E /* AudioToolbox.framework */,
 				6003F58D195388D20070C39A /* Foundation.framework */,
 				6003F58F195388D20070C39A /* CoreGraphics.framework */,
 				6003F591195388D20070C39A /* UIKit.framework */,
@@ -274,7 +296,7 @@
 				ORGANIZATIONNAME = yyqxiaoyin;
 				TargetAttributes = {
 					6003F589195388D20070C39A = {
-						DevelopmentTeam = WSH9723Y7V;
+						DevelopmentTeam = FC2LQ8WA5C;
 						ProvisioningStyle = Automatic;
 					};
 					6003F5AD195388D20070C39A = {
@@ -544,8 +566,8 @@
 				CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				CODE_SIGN_STYLE = Automatic;
-				DEVELOPMENT_TEAM = WSH9723Y7V;
-				ENABLE_BITCODE = YES;
+				DEVELOPMENT_TEAM = FC2LQ8WA5C;
+				ENABLE_BITCODE = NO;
 				EXCLUDED_ARCHS = "";
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "MKRRadioManager/MKRRadioManager-Prefix.pch";
@@ -573,8 +595,8 @@
 				CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				CODE_SIGN_STYLE = Automatic;
-				DEVELOPMENT_TEAM = WSH9723Y7V;
-				ENABLE_BITCODE = YES;
+				DEVELOPMENT_TEAM = FC2LQ8WA5C;
+				ENABLE_BITCODE = NO;
 				EXCLUDED_ARCHS = "";
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "MKRRadioManager/MKRRadioManager-Prefix.pch";

+ 28 - 3
Example/MKRRadioManager/MKRViewController.m

@@ -12,6 +12,7 @@
 #import <YYCategory/NSString+Utilities.h>
 #import <NSHashTable+MKRRadioManagerAdd.h>
 #import "MKRTestObject.h"
+#import <IJKMediaFramework/IJKMediaFramework.h>
 
 @interface MKRViewController ()
 
@@ -25,14 +26,38 @@
 
 @property (nonatomic, strong) NSMutableArray *array;
 
+@property (nonatomic, strong) id<IJKMediaPlayback>ijkPlayer;
+
 @end
 
 @implementation MKRViewController
 
 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
-    dispatch_async(dispatch_get_global_queue(0, 0), ^{
-        [self.hashTable makeObjectsPerformSelectorWithObjectsOnMainThread:@selector(testMethod:),@"hello"];
-    });
+    
+#ifdef DEBUG
+    [IJKFFMoviePlayerController setLogReport:YES];
+    [IJKFFMoviePlayerController setLogLevel:k_IJK_LOG_DEBUG];
+#else
+    [IJKFFMoviePlayerController setLogReport:NO];
+    [IJKFFMoviePlayerController setLogLevel:k_IJK_LOG_INFO];
+#endif
+    [IJKFFMoviePlayerController checkIfFFmpegVersionMatch:YES];
+    if (self.ijkPlayer){
+        [self.ijkPlayer shutdown];
+        [self.ijkPlayer.view removeFromSuperview];
+        self.ijkPlayer = nil;
+    }
+    IJKFFOptions *options = [IJKFFOptions optionsByDefault];
+    
+    self.ijkPlayer = [[IJKFFMoviePlayerController alloc] initWithContentURLString:@"http://speed.radio1964.cn/hls/niaradiolofi.m3u8" withOptions:options];
+//    self.player = [[IJKAVMoviePlayerController alloc] initWithContentURLString:@"http://speed.radio1964.cn/hls/niaradiolofi.m3u8"];
+    self.ijkPlayer.shouldAutoplay = YES;
+    [self.ijkPlayer prepareToPlay];
+    [self.ijkPlayer play];
+    
+//    dispatch_async(dispatch_get_global_queue(0, 0), ^{
+//        [self.hashTable makeObjectsPerformSelectorWithObjectsOnMainThread:@selector(testMethod:),@"hello"];
+//    });
 }
 
 - (IBAction)refresh:(UIBarButtonItem *)sender {

+ 2 - 2
Example/Podfile.lock

@@ -7,7 +7,7 @@ DEPENDENCIES:
   - YYCategory
 
 SPEC REPOS:
-  https://github.com/cocoapods/specs.git:
+  https://github.com/CocoaPods/Specs.git:
     - YYCategory
 
 EXTERNAL SOURCES:
@@ -20,4 +20,4 @@ SPEC CHECKSUMS:
 
 PODFILE CHECKSUM: f65396e8a7f07654404054ab9d38dc4b7b6f8818
 
-COCOAPODS: 1.7.5
+COCOAPODS: 1.11.3

+ 2 - 2
Example/Pods/Manifest.lock

@@ -7,7 +7,7 @@ DEPENDENCIES:
   - YYCategory
 
 SPEC REPOS:
-  https://github.com/cocoapods/specs.git:
+  https://github.com/CocoaPods/Specs.git:
     - YYCategory
 
 EXTERNAL SOURCES:
@@ -20,4 +20,4 @@ SPEC CHECKSUMS:
 
 PODFILE CHECKSUM: f65396e8a7f07654404054ab9d38dc4b7b6f8818
 
-COCOAPODS: 1.7.5
+COCOAPODS: 1.11.3

File diff suppressed because it is too large
+ 380 - 378
Example/Pods/Pods.xcodeproj/project.pbxproj


+ 14 - 0
Example/Pods/Target Support Files/MKRRadioManager/MKRRadioManager.debug.xcconfig

@@ -0,0 +1,14 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MKRRadioManager
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../libs"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MKRRadioManager" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MKRRadioManager"
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/../..
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
+VALID_ARCHS = armv7 arm64 x86_64

+ 14 - 0
Example/Pods/Target Support Files/MKRRadioManager/MKRRadioManager.release.xcconfig

@@ -0,0 +1,14 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MKRRadioManager
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../libs"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MKRRadioManager" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MKRRadioManager"
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/../..
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
+VALID_ARCHS = armv7 arm64 x86_64

+ 4 - 1
Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example.debug.xcconfig

@@ -1,11 +1,14 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../libs"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MKRRadioManager" "${PODS_ROOT}/Headers/Public/YYCategory"
 LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MKRRadioManager" "${PODS_CONFIGURATION_BUILD_DIR}/YYCategory"
 OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MKRRadioManager" -isystem "${PODS_ROOT}/Headers/Public/YYCategory" -iframework "${PODS_ROOT}/../../libs"
-OTHER_LDFLAGS = $(inherited) -ObjC -l"MKRRadioManager" -l"YYCategory" -framework "libAS-Control" -framework "libUPNP" -framework "openssl"
+OTHER_LDFLAGS = $(inherited) -ObjC -l"MKRRadioManager" -l"YYCategory" -framework "IJKMediaFramework" -framework "libAS-Control" -framework "libUPNP" -framework "openssl"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
 PODS_ROOT = ${SRCROOT}/Pods
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 4 - 1
Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example.release.xcconfig

@@ -1,11 +1,14 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../libs"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MKRRadioManager" "${PODS_ROOT}/Headers/Public/YYCategory"
 LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MKRRadioManager" "${PODS_CONFIGURATION_BUILD_DIR}/YYCategory"
 OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MKRRadioManager" -isystem "${PODS_ROOT}/Headers/Public/YYCategory" -iframework "${PODS_ROOT}/../../libs"
-OTHER_LDFLAGS = $(inherited) -ObjC -l"MKRRadioManager" -l"YYCategory" -framework "libAS-Control" -framework "libUPNP" -framework "openssl"
+OTHER_LDFLAGS = $(inherited) -ObjC -l"MKRRadioManager" -l"YYCategory" -framework "IJKMediaFramework" -framework "libAS-Control" -framework "libUPNP" -framework "openssl"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
 PODS_ROOT = ${SRCROOT}/Pods
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 3 - 0
Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests.debug.xcconfig

@@ -1,3 +1,4 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../libs"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
@@ -6,3 +7,5 @@ PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
 PODS_ROOT = ${SRCROOT}/Pods
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 3 - 0
Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests.release.xcconfig

@@ -1,3 +1,4 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../libs"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
@@ -6,3 +7,5 @@ PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
 PODS_ROOT = ${SRCROOT}/Pods
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 12 - 0
Example/Pods/Target Support Files/YYCategory/YYCategory.debug.xcconfig

@@ -0,0 +1,12 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/YYCategory
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/YYCategory" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/YYCategory"
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/YYCategory
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 12 - 0
Example/Pods/Target Support Files/YYCategory/YYCategory.release.xcconfig

@@ -0,0 +1,12 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/YYCategory
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/YYCategory" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/YYCategory"
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/YYCategory
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 79 - 0
libs/IJKMediaFramework.framework/Headers/IJKAVMoviePlayerController.h

@@ -0,0 +1,79 @@
+/*
+ * IJKAVMoviePlayerController.h
+ *
+ * Copyright (c) 2014 Bilibili
+ * Copyright (c) 2014 Zhang Rui <bbcallen@gmail.com>
+ *
+ * This file is part of ijkPlayer.
+ *
+ * ijkPlayer is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * ijkPlayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with ijkPlayer; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/*
+ File: AVPlayerDemoPlaybackViewController.h
+ Abstract: UIViewController managing a playback view, thumbnail view, and associated playback UI.
+ Version: 1.3
+
+ Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
+ Inc. ("Apple") in consideration of your agreement to the following
+ terms, and your use, installation, modification or redistribution of
+ this Apple software constitutes acceptance of these terms.  If you do
+ not agree with these terms, please do not use, install, modify or
+ redistribute this Apple software.
+
+ In consideration of your agreement to abide by the following terms, and
+ subject to these terms, Apple grants you a personal, non-exclusive
+ license, under Apple's copyrights in this original Apple software (the
+ "Apple Software"), to use, reproduce, modify and redistribute the Apple
+ Software, with or without modifications, in source and/or binary forms;
+ provided that if you redistribute the Apple Software in its entirety and
+ without modifications, you must retain this notice and the following
+ text and disclaimers in all such redistributions of the Apple Software.
+ Neither the name, trademarks, service marks or logos of Apple Inc. may
+ be used to endorse or promote products derived from the Apple Software
+ without specific prior written permission from Apple.  Except as
+ expressly stated in this notice, no other rights or licenses, express or
+ implied, are granted by Apple herein, including but not limited to any
+ patent rights that may be infringed by your derivative works or by other
+ works in which the Apple Software may be incorporated.
+
+ The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
+ MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
+ THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
+ OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+ IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
+ MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
+ AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
+ STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ Copyright (C) 2014 Apple Inc. All Rights Reserved.
+
+ */
+
+#import "IJKMediaPlayback.h"
+
+@interface IJKAVMoviePlayerController : NSObject <IJKMediaPlayback>
+
+- (id)initWithContentURL:(NSURL *)aUrl;
+- (id)initWithContentURLString:(NSString *)aUrl;
++ (id)getInstance:(NSString *)aUrl;
+
+@end

+ 64 - 0
libs/IJKMediaFramework.framework/Headers/IJKFFMonitor.h

@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2016 Bilibili
+ * Copyright (c) 2016 Zhang Rui <bbcallen@gmail.com>
+ *
+ * This file is part of ijkPlayer.
+ *
+ * ijkPlayer is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * ijkPlayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with ijkPlayer; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#import <Foundation/Foundation.h>
+
+@interface IJKFFMonitor : NSObject
+
+- (instancetype)init;
+
+@property(nonatomic) NSDictionary *mediaMeta;
+@property(nonatomic) NSDictionary *videoMeta;
+@property(nonatomic) NSDictionary *audioMeta;
+
+@property(nonatomic, readonly) int64_t   duration;   // milliseconds
+@property(nonatomic, readonly) int64_t   bitrate;    // bit / sec
+@property(nonatomic, readonly) float     fps;        // frame / sec
+@property(nonatomic, readonly) int       width;      // width
+@property(nonatomic, readonly) int       height;     // height
+@property(nonatomic, readonly) NSString *vcodec;     // video codec
+@property(nonatomic, readonly) NSString *acodec;     // audio codec
+@property(nonatomic, readonly) int       sampleRate;
+@property(nonatomic, readonly) int64_t   channelLayout;
+
+@property(nonatomic) NSString *vdecoder;
+
+@property(nonatomic) int       tcpError;
+@property(nonatomic) NSString *remoteIp;
+
+@property(nonatomic) int       httpError;
+@property(nonatomic) NSString *httpUrl;
+@property(nonatomic) NSString *httpHost;
+@property(nonatomic) int       httpCode;
+@property(nonatomic) int64_t   httpOpenTick;
+@property(nonatomic) int64_t   httpSeekTick;
+@property(nonatomic) int       httpOpenCount;
+@property(nonatomic) int       httpSeekCount;
+@property(nonatomic) int64_t   lastHttpOpenDuration;
+@property(nonatomic) int64_t   lastHttpSeekDuration;
+
+@property(nonatomic) int64_t   prepareStartTick;
+@property(nonatomic) int64_t   prepareDuration;
+@property(nonatomic) int64_t   firstVideoFrameLatency;
+@property(nonatomic) int64_t   lastPrerollStartTick;
+@property(nonatomic) int64_t   lastPrerollDuration;
+
+@end

+ 144 - 0
libs/IJKMediaFramework.framework/Headers/IJKFFMoviePlayerController.h

@@ -0,0 +1,144 @@
+/*
+ * IJKFFMoviePlayerController.h
+ *
+ * Copyright (c) 2013 Bilibili
+ * Copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
+ *
+ * This file is part of ijkPlayer.
+ *
+ * ijkPlayer is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * ijkPlayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with ijkPlayer; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#import "IJKMediaPlayback.h"
+#import "IJKFFMonitor.h"
+#import "IJKFFOptions.h"
+
+// media meta
+#define k_IJKM_KEY_FORMAT         @"format"
+#define k_IJKM_KEY_DURATION_US    @"duration_us"
+#define k_IJKM_KEY_START_US       @"start_us"
+#define k_IJKM_KEY_BITRATE        @"bitrate"
+
+// stream meta
+#define k_IJKM_KEY_TYPE           @"type"
+#define k_IJKM_VAL_TYPE__VIDEO    @"video"
+#define k_IJKM_VAL_TYPE__AUDIO    @"audio"
+#define k_IJKM_VAL_TYPE__UNKNOWN  @"unknown"
+
+#define k_IJKM_KEY_CODEC_NAME      @"codec_name"
+#define k_IJKM_KEY_CODEC_PROFILE   @"codec_profile"
+#define k_IJKM_KEY_CODEC_LONG_NAME @"codec_long_name"
+
+// stream: video
+#define k_IJKM_KEY_WIDTH          @"width"
+#define k_IJKM_KEY_HEIGHT         @"height"
+#define k_IJKM_KEY_FPS_NUM        @"fps_num"
+#define k_IJKM_KEY_FPS_DEN        @"fps_den"
+#define k_IJKM_KEY_TBR_NUM        @"tbr_num"
+#define k_IJKM_KEY_TBR_DEN        @"tbr_den"
+#define k_IJKM_KEY_SAR_NUM        @"sar_num"
+#define k_IJKM_KEY_SAR_DEN        @"sar_den"
+// stream: audio
+#define k_IJKM_KEY_SAMPLE_RATE    @"sample_rate"
+#define k_IJKM_KEY_CHANNEL_LAYOUT @"channel_layout"
+
+#define kk_IJKM_KEY_STREAMS       @"streams"
+
+typedef enum IJKLogLevel {
+    k_IJK_LOG_UNKNOWN = 0,
+    k_IJK_LOG_DEFAULT = 1,
+
+    k_IJK_LOG_VERBOSE = 2,
+    k_IJK_LOG_DEBUG   = 3,
+    k_IJK_LOG_INFO    = 4,
+    k_IJK_LOG_WARN    = 5,
+    k_IJK_LOG_ERROR   = 6,
+    k_IJK_LOG_FATAL   = 7,
+    k_IJK_LOG_SILENT  = 8,
+} IJKLogLevel;
+
+@interface IJKFFMoviePlayerController : NSObject <IJKMediaPlayback>
+
+- (id)initWithContentURL:(NSURL *)aUrl
+             withOptions:(IJKFFOptions *)options;
+
+- (id)initWithContentURLString:(NSString *)aUrlString
+                   withOptions:(IJKFFOptions *)options;
+
+- (void)prepareToPlay;
+- (void)play;
+- (void)pause;
+- (void)stop;
+- (BOOL)isPlaying;
+- (int64_t)trafficStatistic;
+- (float)dropFrameRate;
+
+- (void)setPauseInBackground:(BOOL)pause;
+- (BOOL)isVideoToolboxOpen;
+
++ (void)setLogReport:(BOOL)preferLogReport;
++ (void)setLogLevel:(IJKLogLevel)logLevel;
++ (BOOL)checkIfFFmpegVersionMatch:(BOOL)showAlert;
++ (BOOL)checkIfPlayerVersionMatch:(BOOL)showAlert
+                            version:(NSString *)version;
+
+@property(nonatomic, readonly) CGFloat fpsInMeta;
+@property(nonatomic, readonly) CGFloat fpsAtOutput;
+@property(nonatomic) BOOL shouldShowHudView;
+
+- (void)setOptionValue:(NSString *)value
+                forKey:(NSString *)key
+            ofCategory:(IJKFFOptionCategory)category;
+
+- (void)setOptionIntValue:(int64_t)value
+                   forKey:(NSString *)key
+               ofCategory:(IJKFFOptionCategory)category;
+
+
+
+- (void)setFormatOptionValue:       (NSString *)value forKey:(NSString *)key;
+- (void)setCodecOptionValue:        (NSString *)value forKey:(NSString *)key;
+- (void)setSwsOptionValue:          (NSString *)value forKey:(NSString *)key;
+- (void)setPlayerOptionValue:       (NSString *)value forKey:(NSString *)key;
+
+- (void)setFormatOptionIntValue:    (int64_t)value forKey:(NSString *)key;
+- (void)setCodecOptionIntValue:     (int64_t)value forKey:(NSString *)key;
+- (void)setSwsOptionIntValue:       (int64_t)value forKey:(NSString *)key;
+- (void)setPlayerOptionIntValue:    (int64_t)value forKey:(NSString *)key;
+
+@property (nonatomic, retain) id<IJKMediaUrlOpenDelegate> segmentOpenDelegate;
+@property (nonatomic, retain) id<IJKMediaUrlOpenDelegate> tcpOpenDelegate;
+@property (nonatomic, retain) id<IJKMediaUrlOpenDelegate> httpOpenDelegate;
+@property (nonatomic, retain) id<IJKMediaUrlOpenDelegate> liveOpenDelegate;
+
+@property (nonatomic, retain) id<IJKMediaNativeInvokeDelegate> nativeInvokeDelegate;
+
+- (void)didShutdown;
+
+#pragma mark KVO properties
+@property (nonatomic, readonly) IJKFFMonitor *monitor;
+
+@end
+
+#define IJK_FF_IO_TYPE_READ (1)
+void IJKFFIOStatDebugCallback(const char *url, int type, int bytes);
+void IJKFFIOStatRegister(void (*cb)(const char *url, int type, int bytes));
+
+void IJKFFIOStatCompleteDebugCallback(const char *url,
+                                      int64_t read_bytes, int64_t total_size,
+                                      int64_t elpased_time, int64_t total_duration);
+void IJKFFIOStatCompleteRegister(void (*cb)(const char *url,
+                                            int64_t read_bytes, int64_t total_size,
+                                            int64_t elpased_time, int64_t total_duration));

+ 75 - 0
libs/IJKMediaFramework.framework/Headers/IJKFFOptions.h

@@ -0,0 +1,75 @@
+/*
+ * IJKFFOptions.h
+ *
+ * Copyright (c) 2013-2015 Bilibili
+ * Copyright (c) 2013-2015 Zhang Rui <bbcallen@gmail.com>
+ *
+ * This file is part of ijkPlayer.
+ *
+ * ijkPlayer is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * ijkPlayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with ijkPlayer; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#import <Foundation/Foundation.h>
+
+typedef enum IJKFFOptionCategory {
+    kIJKFFOptionCategoryFormat = 1,
+    kIJKFFOptionCategoryCodec  = 2,
+    kIJKFFOptionCategorySws    = 3,
+    kIJKFFOptionCategoryPlayer = 4,
+    kIJKFFOptionCategorySwr    = 5,
+} IJKFFOptionCategory;
+
+// for codec option 'skip_loop_filter' and 'skip_frame'
+typedef enum IJKAVDiscard {
+    /* We leave some space between them for extensions (drop some
+     * keyframes for intra-only or drop just some bidir frames). */
+    IJK_AVDISCARD_NONE    =-16, ///< discard nothing
+    IJK_AVDISCARD_DEFAULT =  0, ///< discard useless packets like 0 size packets in avi
+    IJK_AVDISCARD_NONREF  =  8, ///< discard all non reference
+    IJK_AVDISCARD_BIDIR   = 16, ///< discard all bidirectional frames
+    IJK_AVDISCARD_NONKEY  = 32, ///< discard all frames except keyframes
+    IJK_AVDISCARD_ALL     = 48, ///< discard all
+} IJKAVDiscard;
+
+struct IjkMediaPlayer;
+
+@interface IJKFFOptions : NSObject
+
++(IJKFFOptions *)optionsByDefault;
+
+-(void)applyTo:(struct IjkMediaPlayer *)mediaPlayer;
+
+- (void)setOptionValue:(NSString *)value
+                forKey:(NSString *)key
+            ofCategory:(IJKFFOptionCategory)category;
+
+- (void)setOptionIntValue:(int64_t)value
+                   forKey:(NSString *)key
+               ofCategory:(IJKFFOptionCategory)category;
+
+
+-(void)setFormatOptionValue:       (NSString *)value forKey:(NSString *)key;
+-(void)setCodecOptionValue:        (NSString *)value forKey:(NSString *)key;
+-(void)setSwsOptionValue:          (NSString *)value forKey:(NSString *)key;
+-(void)setPlayerOptionValue:       (NSString *)value forKey:(NSString *)key;
+
+-(void)setFormatOptionIntValue:    (int64_t)value forKey:(NSString *)key;
+-(void)setCodecOptionIntValue:     (int64_t)value forKey:(NSString *)key;
+-(void)setSwsOptionIntValue:       (int64_t)value forKey:(NSString *)key;
+-(void)setPlayerOptionIntValue:    (int64_t)value forKey:(NSString *)key;
+
+@property(nonatomic) BOOL showHudView;
+
+@end

+ 39 - 0
libs/IJKMediaFramework.framework/Headers/IJKKVOController.h

@@ -0,0 +1,39 @@
+/*
+ * IJKKVOController.h
+ *
+ * Copyright (c) 2014 Bilibili
+ * Copyright (c) 2014 Zhang Rui <bbcallen@gmail.com>
+ *
+ * This file is part of ijkPlayer.
+ *
+ * ijkPlayer is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * ijkPlayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with ijkPlayer; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#import <Foundation/Foundation.h>
+
+@interface IJKKVOController : NSObject
+
+- (id)initWithTarget:(NSObject *)target;
+
+- (void)safelyAddObserver:(NSObject *)observer
+               forKeyPath:(NSString *)keyPath
+                  options:(NSKeyValueObservingOptions)options
+                  context:(void *)context;
+- (void)safelyRemoveObserver:(NSObject *)observer
+                  forKeyPath:(NSString *)keyPath;
+
+- (void)safelyRemoveAllObservers;
+
+@end

+ 32 - 0
libs/IJKMediaFramework.framework/Headers/IJKMPMoviePlayerController.h

@@ -0,0 +1,32 @@
+/*
+ * IJKMPMoviePlayerController.h
+ *
+ * Copyright (c) 2013 Bilibili
+ * Copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
+ *
+ * This file is part of ijkPlayer.
+ *
+ * ijkPlayer is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * ijkPlayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with ijkPlayer; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#import "IJKMediaPlayback.h"
+#import <MediaPlayer/MediaPlayer.h>
+
+@interface IJKMPMoviePlayerController : MPMoviePlayerController <IJKMediaPlayback>
+
+- (id)initWithContentURL:(NSURL *)aUrl;
+- (id)initWithContentURLString:(NSString *)aUrl;
+
+@end

+ 60 - 0
libs/IJKMediaFramework.framework/Headers/IJKMediaFramework.h

@@ -0,0 +1,60 @@
+/*
+ * IJKMediaFramework.h
+ *
+ * Copyright (c) 2013 Bilibili
+ * Copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
+ *
+ * This file is part of ijkPlayer.
+ *
+ * ijkPlayer is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * ijkPlayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with ijkPlayer; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#import <UIKit/UIKit.h>
+
+//! Project version number for IJKMediaFramework.
+FOUNDATION_EXPORT double IJKMediaFrameworkVersionNumber;
+
+//! Project version string for IJKMediaFramework.
+FOUNDATION_EXPORT const unsigned char IJKMediaFrameworkVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import <IJKMediaFrameworkWithSSL/PublicHeader.h>
+#import <IJKMediaFramework/IJKMediaPlayback.h>
+#import <IJKMediaFramework/IJKMPMoviePlayerController.h>
+#import <IJKMediaFramework/IJKFFOptions.h>
+#import <IJKMediaFramework/IJKFFMoviePlayerController.h>
+#import <IJKMediaFramework/IJKAVMoviePlayerController.h>
+#import <IJKMediaFramework/IJKMediaModule.h>
+#import <IJKMediaFramework/IJKMediaPlayer.h>
+#import <IJKMediaFramework/IJKNotificationManager.h>
+#import <IJKMediaFramework/IJKKVOController.h>
+
+// backward compatible for old names
+#define IJKMediaPlaybackIsPreparedToPlayDidChangeNotification IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification
+#define IJKMoviePlayerLoadStateDidChangeNotification IJKMPMoviePlayerLoadStateDidChangeNotification
+#define IJKMoviePlayerPlaybackDidFinishNotification IJKMPMoviePlayerPlaybackDidFinishNotification
+#define IJKMoviePlayerPlaybackDidFinishReasonUserInfoKey IJKMPMoviePlayerPlaybackDidFinishReasonUserInfoKey
+#define IJKMoviePlayerPlaybackStateDidChangeNotification IJKMPMoviePlayerPlaybackStateDidChangeNotification
+#define IJKMoviePlayerIsAirPlayVideoActiveDidChangeNotification IJKMPMoviePlayerIsAirPlayVideoActiveDidChangeNotification
+#define IJKMoviePlayerVideoDecoderOpenNotification IJKMPMoviePlayerVideoDecoderOpenNotification
+#define IJKMoviePlayerFirstVideoFrameRenderedNotification IJKMPMoviePlayerFirstVideoFrameRenderedNotification
+#define IJKMoviePlayerFirstAudioFrameRenderedNotification IJKMPMoviePlayerFirstAudioFrameRenderedNotification
+#define IJKMoviePlayerFirstAudioFrameDecodedNotification IJKMPMoviePlayerFirstAudioFrameDecodedNotification
+#define IJKMoviePlayerFirstVideoFrameDecodedNotification IJKMPMoviePlayerFirstVideoFrameDecodedNotification
+#define IJKMoviePlayerOpenInputNotification IJKMPMoviePlayerOpenInputNotification
+#define IJKMoviePlayerFindStreamInfoNotification IJKMPMoviePlayerFindStreamInfoNotification
+#define IJKMoviePlayerComponentOpenNotification IJKMPMoviePlayerComponentOpenNotification
+
+#define IJKMPMoviePlayerAccurateSeekCompleteNotification IJKMPMoviePlayerAccurateSeekCompleteNotification
+

+ 33 - 0
libs/IJKMediaFramework.framework/Headers/IJKMediaModule.h

@@ -0,0 +1,33 @@
+/*
+ * IJKMediaModule.h
+ *
+ * Copyright (c) 2013 Bilibili
+ * Copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
+ *
+ * This file is part of ijkPlayer.
+ *
+ * ijkPlayer is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * ijkPlayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with ijkPlayer; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#import <Foundation/Foundation.h>
+
+@interface IJKMediaModule : NSObject
+
++ (IJKMediaModule *)sharedModule;
+
+@property(atomic, getter=isAppIdleTimerDisabled)            BOOL appIdleTimerDisabled;
+@property(atomic, getter=isMediaModuleIdleTimerDisabled)    BOOL mediaModuleIdleTimerDisabled;
+
+@end

+ 221 - 0
libs/IJKMediaFramework.framework/Headers/IJKMediaPlayback.h

@@ -0,0 +1,221 @@
+/*
+ * IJKMediaPlayback.h
+ *
+ * Copyright (c) 2013 Bilibili
+ * Copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
+ *
+ * This file is part of ijkPlayer.
+ *
+ * ijkPlayer is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * ijkPlayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with ijkPlayer; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSInteger, IJKMPMovieScalingMode) {
+    IJKMPMovieScalingModeNone,       // No scaling
+    IJKMPMovieScalingModeAspectFit,  // Uniform scale until one dimension fits
+    IJKMPMovieScalingModeAspectFill, // Uniform scale until the movie fills the visible bounds. One dimension may have clipped contents
+    IJKMPMovieScalingModeFill        // Non-uniform scale. Both render dimensions will exactly match the visible bounds
+};
+
+typedef NS_ENUM(NSInteger, IJKMPMoviePlaybackState) {
+    IJKMPMoviePlaybackStateStopped,
+    IJKMPMoviePlaybackStatePlaying,
+    IJKMPMoviePlaybackStatePaused,
+    IJKMPMoviePlaybackStateInterrupted,
+    IJKMPMoviePlaybackStateSeekingForward,
+    IJKMPMoviePlaybackStateSeekingBackward
+};
+
+typedef NS_OPTIONS(NSUInteger, IJKMPMovieLoadState) {
+    IJKMPMovieLoadStateUnknown        = 0,
+    IJKMPMovieLoadStatePlayable       = 1 << 0,
+    IJKMPMovieLoadStatePlaythroughOK  = 1 << 1, // Playback will be automatically started in this state when shouldAutoplay is YES
+    IJKMPMovieLoadStateStalled        = 1 << 2, // Playback will be automatically paused in this state, if started
+};
+
+typedef NS_ENUM(NSInteger, IJKMPMovieFinishReason) {
+    IJKMPMovieFinishReasonPlaybackEnded,
+    IJKMPMovieFinishReasonPlaybackError,
+    IJKMPMovieFinishReasonUserExited
+};
+
+// -----------------------------------------------------------------------------
+// Thumbnails
+
+typedef NS_ENUM(NSInteger, IJKMPMovieTimeOption) {
+    IJKMPMovieTimeOptionNearestKeyFrame,
+    IJKMPMovieTimeOptionExact
+};
+
+@protocol IJKMediaPlayback;
+
+#pragma mark IJKMediaPlayback
+
+@protocol IJKMediaPlayback <NSObject>
+
+- (void)prepareToPlay;
+- (void)play;
+- (void)pause;
+- (void)stop;
+- (BOOL)isPlaying;
+- (void)shutdown;
+- (void)setPauseInBackground:(BOOL)pause;
+
+@property(nonatomic, readonly)  UIView *view;
+@property(nonatomic)            NSTimeInterval currentPlaybackTime;
+@property(nonatomic, readonly)  NSTimeInterval duration;
+@property(nonatomic, readonly)  NSTimeInterval playableDuration;
+@property(nonatomic, readonly)  NSInteger bufferingProgress;
+
+@property(nonatomic, readonly)  BOOL isPreparedToPlay;
+@property(nonatomic, readonly)  IJKMPMoviePlaybackState playbackState;
+@property(nonatomic, readonly)  IJKMPMovieLoadState loadState;
+
+@property(nonatomic, readonly) int64_t numberOfBytesTransferred;
+
+@property(nonatomic, readonly) CGSize naturalSize;
+@property(nonatomic) IJKMPMovieScalingMode scalingMode;
+@property(nonatomic) BOOL shouldAutoplay;
+
+@property (nonatomic) BOOL allowsMediaAirPlay;
+@property (nonatomic) BOOL isDanmakuMediaAirPlay;
+@property (nonatomic, readonly) BOOL airPlayMediaActive;
+
+@property (nonatomic) float playbackRate;
+@property (nonatomic) float playbackVolume;
+
+- (UIImage *)thumbnailImageAtCurrentTime;
+
+#pragma mark Notifications
+
+#ifdef __cplusplus
+#define IJK_EXTERN extern "C" __attribute__((visibility ("default")))
+#else
+#define IJK_EXTERN extern __attribute__((visibility ("default")))
+#endif
+
+// -----------------------------------------------------------------------------
+//  MPMediaPlayback.h
+
+// Posted when the prepared state changes of an object conforming to the MPMediaPlayback protocol changes.
+// This supersedes MPMoviePlayerContentPreloadDidFinishNotification.
+IJK_EXTERN NSString *const IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification;
+
+// -----------------------------------------------------------------------------
+//  MPMoviePlayerController.h
+//  Movie Player Notifications
+
+// Posted when the scaling mode changes.
+IJK_EXTERN NSString* const IJKMPMoviePlayerScalingModeDidChangeNotification;
+
+// Posted when movie playback ends or a user exits playback.
+IJK_EXTERN NSString* const IJKMPMoviePlayerPlaybackDidFinishNotification;
+IJK_EXTERN NSString* const IJKMPMoviePlayerPlaybackDidFinishReasonUserInfoKey; // NSNumber (IJKMPMovieFinishReason)
+
+// Posted when the playback state changes, either programatically or by the user.
+IJK_EXTERN NSString* const IJKMPMoviePlayerPlaybackStateDidChangeNotification;
+
+// Posted when the network load state changes.
+IJK_EXTERN NSString* const IJKMPMoviePlayerLoadStateDidChangeNotification;
+
+// Posted when the movie player begins or ends playing video via AirPlay.
+IJK_EXTERN NSString* const IJKMPMoviePlayerIsAirPlayVideoActiveDidChangeNotification;
+
+// -----------------------------------------------------------------------------
+// Movie Property Notifications
+
+// Calling -prepareToPlay on the movie player will begin determining movie properties asynchronously.
+// These notifications are posted when the associated movie property becomes available.
+IJK_EXTERN NSString* const IJKMPMovieNaturalSizeAvailableNotification;
+
+// -----------------------------------------------------------------------------
+//  Extend Notifications
+
+IJK_EXTERN NSString *const IJKMPMoviePlayerVideoDecoderOpenNotification;
+IJK_EXTERN NSString *const IJKMPMoviePlayerFirstVideoFrameRenderedNotification;
+IJK_EXTERN NSString *const IJKMPMoviePlayerFirstAudioFrameRenderedNotification;
+IJK_EXTERN NSString *const IJKMPMoviePlayerFirstAudioFrameDecodedNotification;
+IJK_EXTERN NSString *const IJKMPMoviePlayerFirstVideoFrameDecodedNotification;
+IJK_EXTERN NSString *const IJKMPMoviePlayerOpenInputNotification;
+IJK_EXTERN NSString *const IJKMPMoviePlayerFindStreamInfoNotification;
+IJK_EXTERN NSString *const IJKMPMoviePlayerComponentOpenNotification;
+
+IJK_EXTERN NSString *const IJKMPMoviePlayerDidSeekCompleteNotification;
+IJK_EXTERN NSString *const IJKMPMoviePlayerDidSeekCompleteTargetKey;
+IJK_EXTERN NSString *const IJKMPMoviePlayerDidSeekCompleteErrorKey;
+IJK_EXTERN NSString *const IJKMPMoviePlayerDidAccurateSeekCompleteCurPos;
+IJK_EXTERN NSString *const IJKMPMoviePlayerAccurateSeekCompleteNotification;
+
+@end
+
+#pragma mark IJKMediaUrlOpenDelegate
+
+// Must equal to the defination in ijkavformat/ijkavformat.h
+typedef NS_ENUM(NSInteger, IJKMediaEvent) {
+
+    // Notify Events
+    IJKMediaEvent_WillHttpOpen         = 1,       // attr: url
+    IJKMediaEvent_DidHttpOpen          = 2,       // attr: url, error, http_code
+    IJKMediaEvent_WillHttpSeek         = 3,       // attr: url, offset
+    IJKMediaEvent_DidHttpSeek          = 4,       // attr: url, offset, error, http_code
+    // Control Message
+    IJKMediaCtrl_WillTcpOpen           = 0x20001, // IJKMediaUrlOpenData: no args
+    IJKMediaCtrl_DidTcpOpen            = 0x20002, // IJKMediaUrlOpenData: error, family, ip, port, fd
+    IJKMediaCtrl_WillHttpOpen          = 0x20003, // IJKMediaUrlOpenData: url, segmentIndex, retryCounter
+    IJKMediaCtrl_WillLiveOpen          = 0x20005, // IJKMediaUrlOpenData: url, retryCounter
+    IJKMediaCtrl_WillConcatSegmentOpen = 0x20007, // IJKMediaUrlOpenData: url, segmentIndex, retryCounter
+};
+
+#define IJKMediaEventAttrKey_url            @"url"
+#define IJKMediaEventAttrKey_host           @"host"
+#define IJKMediaEventAttrKey_error          @"error"
+#define IJKMediaEventAttrKey_time_of_event  @"time_of_event"
+#define IJKMediaEventAttrKey_http_code      @"http_code"
+#define IJKMediaEventAttrKey_offset         @"offset"
+
+// event of IJKMediaUrlOpenEvent_xxx
+@interface IJKMediaUrlOpenData: NSObject
+
+- (id)initWithUrl:(NSString *)url
+            event:(IJKMediaEvent)event
+     segmentIndex:(int)segmentIndex
+     retryCounter:(int)retryCounter;
+
+@property(nonatomic, readonly) IJKMediaEvent event;
+@property(nonatomic, readonly) int segmentIndex;
+@property(nonatomic, readonly) int retryCounter;
+
+@property(nonatomic, retain) NSString *url;
+@property(nonatomic, assign) int fd;
+@property(nonatomic, strong) NSString *msg;
+@property(nonatomic) int error; // set a negative value to indicate an error has occured.
+@property(nonatomic, getter=isHandled)    BOOL handled;     // auto set to YES if url changed
+@property(nonatomic, getter=isUrlChanged) BOOL urlChanged;  // auto set to YES by url changed
+
+@end
+
+@protocol IJKMediaUrlOpenDelegate <NSObject>
+
+- (void)willOpenUrl:(IJKMediaUrlOpenData*) urlOpenData;
+
+@end
+
+@protocol IJKMediaNativeInvokeDelegate <NSObject>
+
+- (int)invoke:(IJKMediaEvent)event attributes:(NSDictionary *)attributes;
+
+@end

+ 32 - 0
libs/IJKMediaFramework.framework/Headers/IJKMediaPlayer.h

@@ -0,0 +1,32 @@
+/*
+ * IJKMediaPlayer.h
+ *
+ * Copyright (c) 2013 Bilibili
+ * Copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
+ *
+ * This file is part of ijkPlayer.
+ *
+ * ijkPlayer is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * ijkPlayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with ijkPlayer; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#import "IJKMediaPlayback.h"
+#import "IJKMPMoviePlayerController.h"
+
+#import "IJKFFOptions.h"
+#import "IJKFFMoviePlayerController.h"
+
+#import "IJKAVMoviePlayerController.h"
+
+#import "IJKMediaModule.h"

+ 37 - 0
libs/IJKMediaFramework.framework/Headers/IJKNotificationManager.h

@@ -0,0 +1,37 @@
+/*
+ * IJKNotificationManager.h
+ *
+ * Copyright (c) 2016 Bilibili
+ * Copyright (c) 2016 Zhang Rui <bbcallen@gmail.com>
+ *
+ * This file is part of ijkPlayer.
+ *
+ * ijkPlayer is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * ijkPlayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with ijkPlayer; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#import <Foundation/Foundation.h>
+
+@interface IJKNotificationManager : NSObject
+
+- (nullable instancetype)init;
+
+- (void)addObserver:(nonnull id)observer
+           selector:(nonnull SEL)aSelector
+               name:(nullable NSString *)aName
+             object:(nullable id)anObject;
+
+- (void)removeAllObservers:(nonnull id)observer;
+
+@end

BIN
libs/IJKMediaFramework.framework/IJKMediaFramework


BIN
libs/IJKMediaFramework.framework/Info.plist


+ 6 - 0
libs/IJKMediaFramework.framework/Modules/module.modulemap

@@ -0,0 +1,6 @@
+framework module IJKMediaFramework {
+  umbrella header "IJKMediaFramework.h"
+
+  export *
+  module * { export * }
+}