Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TIMOB-19040] iOS: Replace MPMoviePlayerController in Ti.Media.VideoPlayer with AVPlayerViewController #8194

Closed
wants to merge 22 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
282ebef
Merge branch 'master' of https://github.com/appcelerator/titanium_mobile
hansemannn Jul 8, 2015
8673080
Merge branch 'master' of https://github.com/appcelerator/titanium_mobile
hansemannn Jul 10, 2015
746f1c7
[TIMOB-19040] MPMoviePlayer deprecation 1
hansemannn Jul 13, 2015
d8e8a32
[TIMOB-19040] MPMoviePlayer deprecation 1
hansemannn Jul 30, 2015
6f35822
Merge branch 'master' of https://github.com/appcelerator/titanium_mob…
hansemannn Jul 30, 2015
923cb51
[TIMOB-19040] MPMoviePlayer deprecation 2
hansemannn Aug 17, 2015
c48fd4e
Merge master
hansemannn Aug 22, 2015
d0bec83
Merge branch 'master' of https://github.com/appcelerator/titanium_mob…
hansemannn Aug 22, 2015
49e9210
[TIMOB-19040] MPMoviePlayer deprecation 3
hansemannn Aug 24, 2015
ae29a97
Restore KitchenSink app.js
hansemannn Sep 3, 2015
d5e62d6
[TIMOB-19040] MPMoviePlayer deprecation 4
hansemannn Sep 3, 2015
70d2990
[TIMOB-19040] MPMoviePlayer deprecation 4
hansemannn Sep 3, 2015
5ad6fa9
Update events / observer
hansemannn Sep 21, 2015
f5589c4
Support iOS9 PiP, resizing, play, pause & stop
hansemannn Sep 23, 2015
e5651d9
Remove deprecated methods, support autoplay
hansemannn Sep 23, 2015
f2a7575
Improve iOS8 backward compatibility
hansemannn Sep 24, 2015
e2d934e
Add another sample video to KitchenSink
hansemannn Sep 24, 2015
1ca221b
Re-support thumbnail generation
hansemannn Sep 24, 2015
b2ccd83
Re-support initialPlaybackTime, fullscreen mode
hansemannn Sep 25, 2015
9dc5fec
[TIMOB-19040] Add more functionality, adjust style
hansemannn Aug 7, 2016
bff3571
Merge branch 'master' of github.com:appcelerator/titanium_mobile into…
hansemannn Aug 8, 2016
5ad1550
Merge branch 'master' of github.com:appcelerator/titanium_mobile into…
hansemannn Dec 12, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Binary file added demos/KitchenSink/Resources/another.mp4
Binary file not shown.
16 changes: 12 additions & 4 deletions iphone/Classes/MediaModule.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,9 @@
@property(nonatomic,readonly) NSNumber* VIDEO_CONTROL_DEFAULT;
@property(nonatomic,readonly) NSNumber* VIDEO_CONTROL_HIDDEN;

@property(nonatomic,readonly) NSNumber* VIDEO_SCALING_NONE;
@property(nonatomic,readonly) NSNumber* VIDEO_SCALING_ASPECT_FIT;
@property(nonatomic,readonly) NSNumber* VIDEO_SCALING_ASPECT_FILL;
@property(nonatomic,readonly) NSNumber* VIDEO_SCALING_MODE_FILL;
@property(nonatomic,readonly) NSString* VIDEO_SCALING_MODE_RESIZE;
@property(nonatomic,readonly) NSString* VIDEO_SCALING_MODE_RESIZE_ASPECT;
@property(nonatomic,readonly) NSString* VIDEO_SCALING_MODE_RESIZE_ASPECT_FILL;

@property(nonatomic,readonly) NSNumber* QUALITY_HIGH;
@property(nonatomic,readonly) NSNumber* QUALITY_MEDIUM;
Expand Down Expand Up @@ -189,9 +188,18 @@


// NOTE: these are introduced in 3.2
/* REMOVED since iOS9
@property(nonatomic,readonly) NSNumber* VIDEO_CONTROL_NONE; // No controls
@property(nonatomic,readonly) NSNumber* VIDEO_CONTROL_EMBEDDED; // Controls for an embedded view
@property(nonatomic,readonly) NSNumber* VIDEO_CONTROL_FULLSCREEN; // Controls for fullscreen playback
*/

// New constants
@property(nonatomic,readonly) NSString* VIDEO_SCALE_MODE_KEY;
@property(nonatomic,readonly) NSString* VIDEO_SCALE_MODE_FIT;
@property(nonatomic,readonly) NSString* VIDEO_SCALE_MODE_RESIZE;
@property(nonatomic,readonly) NSString* VIDEO_SCALE_MODE_RESIZE_ASPECT;
@property(nonatomic,readonly) NSString* VIDEO_SCALE_MODE_RESIZE_ASPECT_FILL;

@property(nonatomic,readonly) NSNumber* VIDEO_MEDIA_TYPE_NONE;
@property(nonatomic,readonly) NSNumber* VIDEO_MEDIA_TYPE_VIDEO;
Expand Down
54 changes: 27 additions & 27 deletions iphone/Classes/MediaModule.m
Original file line number Diff line number Diff line change
Expand Up @@ -319,32 +319,17 @@ -(NSString*)MEDIA_TYPE_LIVEPHOTO
MAKE_SYSTEM_PROP(VIDEO_MEDIA_TYPE_VIDEO,MPMovieMediaTypeMaskVideo);
MAKE_SYSTEM_PROP(VIDEO_MEDIA_TYPE_AUDIO,MPMovieMediaTypeMaskAudio);

//Constants for VideoPlayer complete event
MAKE_SYSTEM_PROP(VIDEO_FINISH_REASON_PLAYBACK_ENDED,MPMovieFinishReasonPlaybackEnded);
MAKE_SYSTEM_PROP(VIDEO_FINISH_REASON_PLAYBACK_ERROR,MPMovieFinishReasonPlaybackError);
MAKE_SYSTEM_PROP(VIDEO_FINISH_REASON_USER_EXITED,MPMovieFinishReasonUserExited);

//Constants for VideoPlayer mediaControlStyle
MAKE_SYSTEM_PROP(VIDEO_CONTROL_DEFAULT, MPMovieControlStyleDefault);
MAKE_SYSTEM_PROP(VIDEO_CONTROL_NONE,MPMovieControlStyleNone);
MAKE_SYSTEM_PROP(VIDEO_CONTROL_EMBEDDED,MPMovieControlStyleEmbedded);
MAKE_SYSTEM_PROP(VIDEO_CONTROL_FULLSCREEN,MPMovieControlStyleFullscreen);

-(NSNumber*)VIDEO_CONTROL_HIDDEN
{
return [self VIDEO_CONTROL_NONE];
}
MAKE_SYSTEM_STR(VIDEO_SCALE_MODE_KEY,AVVideoScalingModeKey);
MAKE_SYSTEM_STR(VIDEO_SCALE_MODE_FIT,AVVideoScalingModeFit);
MAKE_SYSTEM_STR(VIDEO_SCALE_MODE_RESIZE,AVVideoScalingModeResize);
MAKE_SYSTEM_STR(VIDEO_SCALE_MODE_RESIZE_ASPECT,AVVideoScalingModeResizeAspect);
MAKE_SYSTEM_STR(VIDEO_SCALE_MODE_RESIZE_ASPECT_FILL,AVVideoScalingModeResizeAspectFill);

//Constants for VideoPlayer scalingMode
MAKE_SYSTEM_PROP(VIDEO_SCALING_NONE,MPMovieScalingModeNone);
MAKE_SYSTEM_PROP(VIDEO_SCALING_ASPECT_FIT,MPMovieScalingModeAspectFit);
MAKE_SYSTEM_PROP(VIDEO_SCALING_ASPECT_FILL,MPMovieScalingModeAspectFill);
MAKE_SYSTEM_PROP(VIDEO_SCALING_MODE_FILL,MPMovieScalingModeFill);

//Constants for VideoPlayer sourceType
MAKE_SYSTEM_PROP(VIDEO_SOURCE_TYPE_UNKNOWN,MPMovieSourceTypeUnknown);
MAKE_SYSTEM_PROP(VIDEO_SOURCE_TYPE_FILE,MPMovieSourceTypeFile);
MAKE_SYSTEM_PROP(VIDEO_SOURCE_TYPE_STREAMING,MPMovieSourceTypeStreaming);
MAKE_SYSTEM_STR(VIDEO_SCALING_MODE_RESIZE,AVLayerVideoGravityResize);
MAKE_SYSTEM_STR(VIDEO_SCALING_RESIZE_ASPECT,AVLayerVideoGravityResizeAspect);
MAKE_SYSTEM_STR(VIDEO_SCALING_RESIZE_ASPECT_FILL,AVLayerVideoGravityResizeAspectFill);

//Constants for VideoPlayer playbackState
MAKE_SYSTEM_PROP(VIDEO_PLAYBACK_STATE_STOPPED,MPMoviePlaybackStateStopped);
Expand All @@ -363,10 +348,6 @@ -(NSNumber*)VIDEO_CONTROL_HIDDEN
//Constants for VideoPlayer repeateMode
MAKE_SYSTEM_PROP(VIDEO_REPEAT_MODE_NONE,MPMovieRepeatModeNone);
MAKE_SYSTEM_PROP(VIDEO_REPEAT_MODE_ONE,MPMovieRepeatModeOne);

//Other Constants
MAKE_SYSTEM_PROP(VIDEO_TIME_OPTION_NEAREST_KEYFRAME,MPMovieTimeOptionNearestKeyFrame);
MAKE_SYSTEM_PROP(VIDEO_TIME_OPTION_EXACT,MPMovieTimeOptionExact);
#endif

#ifdef USE_TI_MEDIAMUSICPLAYER
Expand Down Expand Up @@ -439,6 +420,25 @@ -(void)setAudioSessionMode:(NSNumber*)mode

}

-(NSNumber*)audioSessionMode
{
DebugLog(@"[WARN] Deprecated; use 'audioSessionCategory'");
NSString* category = [self audioSessionCategory];
if ([category isEqualToString:[self AUDIO_SESSION_CATEGORY_AMBIENT]]) {
return [self AUDIO_SESSION_MODE_AMBIENT];
} else if ([category isEqualToString:[self AUDIO_SESSION_CATEGORY_SOLO_AMBIENT]]) {
return [self AUDIO_SESSION_MODE_SOLO_AMBIENT];
} else if ([category isEqualToString:[self AUDIO_SESSION_CATEGORY_PLAYBACK]]) {
return [self AUDIO_SESSION_MODE_PLAYBACK];
} else if ([category isEqualToString:[self AUDIO_SESSION_CATEGORY_RECORD]]) {
return [self AUDIO_SESSION_MODE_RECORD];
} else if ([category isEqualToString:[self AUDIO_SESSION_CATEGORY_PLAY_AND_RECORD]]) {
return [self AUDIO_SESSION_MODE_PLAY_AND_RECORD];
} else {
return NUMINT(-1);
}
}

#if defined(USE_TI_MEDIAAUDIOPLAYER) || defined(USE_TI_MEDIAMUSICPLAYER) || defined(USE_TI_MEDIASOUND) || defined (USE_TI_MEDIAVIDEOPLAYER) || defined(USE_TI_MEDIAAUDIORECORDER)
-(void)setAudioSessionCategory:(NSString*)mode
{
Expand Down
8 changes: 5 additions & 3 deletions iphone/Classes/TiMediaVideoPlayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,19 @@

#import "TiUIView.h"
#import <MediaPlayer/MediaPlayer.h>
#import <AVKit/AVKit.h>
#import <AVFoundation/AVFoundation.h>

@interface TiMediaVideoPlayer : TiUIView {
@private
MPMoviePlayerController *controller;
AVPlayerViewController *controller;
UIActivityIndicatorView *spinner;

BOOL loaded;
}

-(id)initWithPlayer:(MPMoviePlayerController*)controller proxy:(TiProxy*)proxy loaded:(BOOL)loaded_;
-(void)setMovie:(MPMoviePlayerController*)controller;
-(id)initWithPlayer:(AVPlayerViewController*)controller proxy:(TiProxy*)proxy loaded:(BOOL)loaded_;
-(void)setMovie:(AVPlayerViewController*)controller;
-(void)movieLoaded;

@end
Expand Down
4 changes: 2 additions & 2 deletions iphone/Classes/TiMediaVideoPlayer.m
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ -(void)initializeTiLayoutView
}
#endif

-(id)initWithPlayer:(MPMoviePlayerController*)controller_ proxy:(TiProxy*)proxy_ loaded:(BOOL)loaded_
-(id)initWithPlayer:(AVPlayerViewController*)controller_ proxy:(TiProxy*)proxy_ loaded:(BOOL)loaded_
{
if (self = [super init])
{
Expand Down Expand Up @@ -59,7 +59,7 @@ -(void)movieLoaded
loaded = YES;
}

-(void)setMovie:(MPMoviePlayerController*)controller_
-(void)setMovie:(AVPlayerViewController*)controller_
{
if (controller_ == controller) {
// don't add the movie more than once if the same
Expand Down
8 changes: 7 additions & 1 deletion iphone/Classes/TiMediaVideoPlayerProxy.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,16 @@
#ifdef USE_TI_MEDIAVIDEOPLAYER

#import <MediaPlayer/MediaPlayer.h>
#import <AVFoundation/AVFoundation.h>
#import <AVKit/AVKit.h>
#import "TiViewProxy.h"
#import "TiColor.h"
#import "TiFile.h"

@interface TiMediaVideoPlayerProxy : TiViewProxy {
@protected
MPMoviePlayerController *movie;
AVPlayerViewController *movie;
AVPlayerItem *item;
NSRecursiveLock* playerLock;
BOOL playing;
@private
Expand All @@ -24,6 +27,7 @@
TiFile *tempFile;
KrollCallback *thumbnailCallback;
NSUInteger callbackRequestCount;
BOOL seekToZeroBeforePlay;

NSMutableDictionary* loadProperties; // Used to set properties when the player is created
BOOL sizeSet;
Expand All @@ -45,6 +49,8 @@
@property(nonatomic,readwrite,assign) TiColor* backgroundColor;
@property(nonatomic,readonly) NSNumber* playing;
@property(nonatomic,copy) NSNumber *volume;
@property(nonatomic,readwrite,assign) id pictureInPictureEnabled;


-(void)add:(id)proxy;
-(void)remove:(id)proxy;
Expand Down