class BubbleWrap::Media::Player
Attributes
media_player[R]
Public Instance Methods
play(content_url, options = {}, &block)
click to toggle source
@param [String, NSURL] content_url is either a local or remote string
for the location of the media you're playing. NOTE: if you're playing a remote file, your server needs to support range requests for that URL.
@param [Hash] options to open the MPMoviePlayerController with the form {
### These are properties of MPMoviePlayerController allows_air_play: true/false; default false, control_style: [MPMovieControlStyle]; default MPMovieControlStyleDefault, end_playback_time: [Integer] end time (in seconds) for media; default is -1, initial_playback_time: [Integer] start time (in seconds) for media; default is -1, movie_source_type: [MPMovieSourceType] a "hint" so the player knows how to load the data type; either MPMovieSourceTypeFile or MPMovieSourceTypeStreaming; default is MPMovieSourceTypeUnknown which may delay playback, repeat_mode: [MPMovieRepeatMode] how the player repeats at the end of playback; defautl is MPMovieRepeatModeNone scaling_mode: [MPMovieScalingMode] scaling mode for movies; default is MPMovieScalingModeAspectFit should_autoplay: true/false; default true, use_application_audio_session: true/false; default true. ### These are properties of just the ::Player delay_play: true/false, default false. If false then you have to manually call @media_player.play in your code modal: true/false; default false, controller: [UIViewController] used to present the player modally; default uses root view controller of window
}
@block for when setup is done; use this block to present
@media_player.view if options[:modal] == false
EX
From a local URL: file = File.join(App.resources_path, 'test.mp3') BW::Media::Player.play(NSURL.fileURLWithPath(file)) do |media_player| media_player.view.frame = some_view.bounds self.view.addSubview media_player.view end From a remote URL: BW::Media::Player.play("http://www.hrupin.com/wp-content/uploads/mp3/testsong_20_sec.mp3") do |media_player| media_player.view.frame = some_view.bounds self.view.addSubview media_player.view end
# File motion/media/player.rb, line 66 def play(content_url, options = {}, &block) options = { delay_play: false }.merge(options) display_modal = !!options[:modal] klass = display_modal ? MPMoviePlayerViewController : MPMoviePlayerController content_url = content_url.is_a?(NSURL) ? content_url : NSURL.URLWithString(content_url) @media_player = klass.alloc.init self.media_player.prepareToPlay if not display_modal set_player_options(options) self.media_player.setContentURL(content_url) NSNotificationCenter.defaultCenter.observe MPMoviePlayerPlaybackDidFinishNotification do |notification| h = notification.userInfo error = h["error"] if error p "BW::Media::Player error: #{error.userInfo.inspect}" p "Code: #{error.code}, Domain: #{error.domain}" end end if display_modal @presenting_controller = options[:controller] @presenting_controller ||= App.window.rootViewController if Device.ios_version < "7.0" @presenting_controller.presentMoviePlayerViewControllerAnimated(@media_player) else @presenting_controller.presentViewController(@media_player, animated:true, completion:nil) end else if block.nil? raise Error::NilPlayerCallback, "no block callback given in #play; you need\ to supply one if options[:modal] == false" end block.call(@media_player) end if not display_modal and not options[:delay_play] @media_player.play end end
play_modal(content_url, options = {})
click to toggle source
Plays media in the system-default modal controller Takes same parameters as play
NOTE: If you don't supply a :controller option, the rootViewController will be used.
# File motion/media/player.rb, line 17 def play_modal(content_url, options = {}) play(content_url, options.merge(modal: true)) end
stop()
click to toggle source
Stops playback for a Media::Player
# File motion/media/player.rb, line 114 def stop if @media_player.is_a? MPMoviePlayerViewController if Device.ios_version < "7.0" @presenting_controller.dismissMoviePlayerViewControllerAnimated else @presenting_controller.dismissViewControllerAnimated(true, completion:nil) end @presenting_controller = nil else @media_player.stop end @media_player = nil end
Private Instance Methods
set_player_options(options)
click to toggle source
RubyMotion has a problem calling some objective-c methods at runtime, so we can't do any cool `camelize` tricks.
# File motion/media/player.rb, line 138 def set_player_options(options) self.media_player.allowsAirPlay = options[:allows_air_play] if options.has_key? :allows_air_play self.media_player.controlStyle = options[:control_style] if options.has_key? :control_style self.media_player.endPlaybackTime = options[:end_playback_time] if options.has_key? :end_playback_time self.media_player.initialPlaybackTime = options[:initial_playback_time] if options.has_key? :initial_playback_time self.media_player.movieSourceType = options[:movie_source_type] if options.has_key? :movie_source_type self.media_player.repeatMode = options[:repeat_mode] if options.has_key? :repeat_mode self.media_player.scalingMode = options[:scaling_mode] if options.has_key? :scaling_mode self.media_player.shouldAutoplay = options[:should_autoplay] if options.has_key? :should_autoplay self.media_player.useApplicationAudioSession = options[:use_application_audio_session] if options.has_key? :use_application_audio_session end