From ea7a7bbcf752f5ae9aa5deef64cdd13be1ed0936 Mon Sep 17 00:00:00 2001 From: Brent Vatne Date: Mon, 30 Mar 2015 22:07:55 -0700 Subject: [PATCH] Initial commit --- .gitignore | 3 + RCTVideo.h | 5 + RCTVideo.m | 60 +++++++ RCTVideo.xcodeproj/project.pbxproj | 256 +++++++++++++++++++++++++++++ RCTVideoManager.h | 5 + RCTVideoManager.m | 26 +++ README.md | 4 + Video.android.js | 11 ++ Video.ios.js | 62 +++++++ VideoResizeMode.js | 11 ++ VideoStylePropTypes.js | 12 ++ package.json | 16 ++ 12 files changed, 471 insertions(+) create mode 100644 .gitignore create mode 100644 RCTVideo.h create mode 100644 RCTVideo.m create mode 100644 RCTVideo.xcodeproj/project.pbxproj create mode 100644 RCTVideoManager.h create mode 100644 RCTVideoManager.m create mode 100644 README.md create mode 100644 Video.android.js create mode 100644 Video.ios.js create mode 100644 VideoResizeMode.js create mode 100644 VideoStylePropTypes.js create mode 100644 package.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..73b4b410 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/**/* +RCTVideo.xcodeproj/xcuserdata/**/* +RCTVideo.xcodeproj/project.xcworkspace/**/* diff --git a/RCTVideo.h b/RCTVideo.h new file mode 100644 index 00000000..f0ba7ec3 --- /dev/null +++ b/RCTVideo.h @@ -0,0 +1,5 @@ +#import + +@interface RCTVideo : UIView + +@end diff --git a/RCTVideo.m b/RCTVideo.m new file mode 100644 index 00000000..0e23da0f --- /dev/null +++ b/RCTVideo.m @@ -0,0 +1,60 @@ +#import "RCTVideo.h" +#import "RCTLog.h" + +@import MediaPlayer; + +@implementation RCTVideo +{ + MPMoviePlayerController *_player; +} + +- (id)init +{ + if ((self = [super init])) { + _player = [[MPMoviePlayerController alloc] init]; + [self addSubview: _player.view]; + } + return self; +} + +- (void)setSrc:(NSString *)source +{ + NSURL *videoURL = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:source ofType:@"mp4"]]; + [_player setContentURL:videoURL]; + [_player setControlStyle:MPMovieControlStyleNone]; + [_player setScalingMode:MPMovieScalingModeNone]; + [_player setRepeatMode:MPMovieRepeatModeOne]; + [_player prepareToPlay]; + [_player play]; +} + +- (void)setResizeMode:(NSInteger)mode +{ + [_player setScalingMode:mode]; +} + +- (NSArray *)reactSubviews +{ + NSArray *subviews = @[_player.view]; + return subviews; +} + +- (void)insertReactSubview:(UIView *)view atIndex:(NSInteger)atIndex +{ + RCTLogError(@"video cannot have any subviews"); + return; +} + +- (void)removeReactSubview:(UIView *)subview +{ + RCTLogError(@"video cannot have any subviews"); + return; +} + +- (void)layoutSubviews +{ + [super layoutSubviews]; + _player.view.frame = self.bounds; +} + +@end diff --git a/RCTVideo.xcodeproj/project.pbxproj b/RCTVideo.xcodeproj/project.pbxproj new file mode 100644 index 00000000..b7f806b2 --- /dev/null +++ b/RCTVideo.xcodeproj/project.pbxproj @@ -0,0 +1,256 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + BBD49E3F1AC8DEF000610F8E /* RCTVideo.m in Sources */ = {isa = PBXBuildFile; fileRef = BBD49E3A1AC8DEF000610F8E /* RCTVideo.m */; }; + BBD49E401AC8DEF000610F8E /* RCTVideoManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BBD49E3C1AC8DEF000610F8E /* RCTVideoManager.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 58B511D91A9E6C8500147676 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 134814201AA4EA6300B7C361 /* libRCTVideo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRCTVideo.a; sourceTree = BUILT_PRODUCTS_DIR; }; + BBD49E391AC8DEF000610F8E /* RCTVideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTVideo.h; sourceTree = ""; }; + BBD49E3A1AC8DEF000610F8E /* RCTVideo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTVideo.m; sourceTree = ""; }; + BBD49E3B1AC8DEF000610F8E /* RCTVideoManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTVideoManager.h; sourceTree = ""; }; + BBD49E3C1AC8DEF000610F8E /* RCTVideoManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTVideoManager.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 58B511D81A9E6C8500147676 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 134814211AA4EA7D00B7C361 /* Products */ = { + isa = PBXGroup; + children = ( + 134814201AA4EA6300B7C361 /* libRCTVideo.a */, + ); + name = Products; + sourceTree = ""; + }; + 58B511D21A9E6C8500147676 = { + isa = PBXGroup; + children = ( + BBD49E391AC8DEF000610F8E /* RCTVideo.h */, + BBD49E3A1AC8DEF000610F8E /* RCTVideo.m */, + BBD49E3B1AC8DEF000610F8E /* RCTVideoManager.h */, + BBD49E3C1AC8DEF000610F8E /* RCTVideoManager.m */, + 134814211AA4EA7D00B7C361 /* Products */, + ); + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 58B511DA1A9E6C8500147676 /* RCTVideo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "RCTVideo" */; + buildPhases = ( + 58B511D71A9E6C8500147676 /* Sources */, + 58B511D81A9E6C8500147676 /* Frameworks */, + 58B511D91A9E6C8500147676 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = RCTVideo; + productName = RCTDataManager; + productReference = 134814201AA4EA6300B7C361 /* libRCTVideo.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 58B511D31A9E6C8500147676 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + ORGANIZATIONNAME = Facebook; + TargetAttributes = { + 58B511DA1A9E6C8500147676 = { + CreatedOnToolsVersion = 6.1.1; + }; + }; + }; + buildConfigurationList = 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "RCTVideo" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 58B511D21A9E6C8500147676; + productRefGroup = 58B511D21A9E6C8500147676; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 58B511DA1A9E6C8500147676 /* RCTVideo */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 58B511D71A9E6C8500147676 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BBD49E3F1AC8DEF000610F8E /* RCTVideo.m in Sources */, + BBD49E401AC8DEF000610F8E /* RCTVideoManager.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 58B511ED1A9E6C8500147676 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 58B511EE1A9E6C8500147676 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 58B511F01A9E6C8500147676 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/node_modules/react-native/React/**", + ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = RCTVideo; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 58B511F11A9E6C8500147676 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/node_modules/react-native/React/**", + ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = RCTVideo; + SKIP_INSTALL = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "RCTVideo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 58B511ED1A9E6C8500147676 /* Debug */, + 58B511EE1A9E6C8500147676 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "RCTVideo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 58B511F01A9E6C8500147676 /* Debug */, + 58B511F11A9E6C8500147676 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 58B511D31A9E6C8500147676 /* Project object */; +} diff --git a/RCTVideoManager.h b/RCTVideoManager.h new file mode 100644 index 00000000..dde4aef3 --- /dev/null +++ b/RCTVideoManager.h @@ -0,0 +1,5 @@ +#import "RCTViewManager.h" + +@interface RCTVideoManager : RCTViewManager + +@end diff --git a/RCTVideoManager.m b/RCTVideoManager.m new file mode 100644 index 00000000..86f7d849 --- /dev/null +++ b/RCTVideoManager.m @@ -0,0 +1,26 @@ +#import "RCTVideoManager.h" +#import "RCTVideo.h" +#import "RCTBridge.h" +@import MediaPlayer; + +@implementation RCTVideoManager + +@synthesize bridge = _bridge; + +- (UIView *)view +{ + return [[RCTVideo alloc] init]; +} + +RCT_EXPORT_VIEW_PROPERTY(src, NSString); +RCT_EXPORT_VIEW_PROPERTY(resizeMode, NSInteger); + +- (NSDictionary *)constantsToExport +{ + return @{@"ScaleNone": @(MPMovieScalingModeNone), + @"ScaleToFill": @(MPMovieScalingModeFill), + @"ScaleAspectFit": @(MPMovieScalingModeAspectFit), + @"ScaleAspectFill": @(MPMovieScalingModeAspectFill)}; +} + +@end diff --git a/README.md b/README.md new file mode 100644 index 00000000..46e7bedf --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +## react-native-video + +A