I recently spent some time writing a simple program to play a movie file full screen on a Linux machine. I wrote the program in JRuby using the vlcj framework, which wraps the VLC media player library libVLC.
There are a number of vlcj fullscreen examples around, including an example that comes with the vlcj source code. I had not done much JRuby/Java interop work, so it still took some work for me to get this working in JRuby. To save someone else from the same problems, I thought I would share my work here.
The following script expects the vlcj jars to be in the same directory, and expects libvlc to be installed in a standard location on the machine. The first argument to the script is
expected to be the path to a movie file (e.g. movie_trailer.mp4), which will be played full screen with no window decoration.
require File.expand_path(File.dirname(__FILE__)) + '/vlcj-2.1.0.jar' java_import Java::UkCoCapricaVlcjBinding::LibVlc java_import Java::UkCoCapricaVlcjPlayer::MediaPlayerFactory java_import Java::UkCoCapricaVlcjPlayerEmbeddedX::XFullScreenStrategy java_import Java::UkCoCapricaVlcjRuntime::RuntimeUtil java_import java.awt.Canvas java_import java.awt.Color java_import java.awt.BorderLayout java_import javax.swing.SwingUtilities java_import javax.swing.JFrame java_import com.sun.jna.Native class MediaPlayer def initialize library_name = RuntimeUtil.get_lib_vlc_library_name # If libvlc is not in a default search path add the path # NativeLibrary.add_search_path library_name, '/path/to/libvlc' Native.loadLibrary(library_name, LibVlc.java_class) end def play(mrl) SwingUtilities.invokeLater do play_movie mrl end end private def play_movie(mrl) media_player = build_media_player media_player.play_media mrl end def build_media_player libvlc_args = [ '--no-plugins-cache', '--no-video-title-show', '--no-snapshot-preview', '--quiet', '--quiet-synchro', '--intf', 'dummy' ] # Set up the Swing UI frame = JFrame.new('Media Player') frame.background = Color::BLACK canvas = Canvas.new canvas.background = Color::BLACK frame.add(canvas, BorderLayout::CENTER) frame.undecorated = true frame.visible = true # Set up vlcj media_player_factory = MediaPlayerFactory.new(libvlc_args) media_player = media_player_factory.new_embedded_media_player(XFullScreenStrategy.new(frame)) media_player.video_surface = media_player_factory.new_video_surface(canvas) media_player.full_screen = true media_player end end MediaPlayer.new.play ARGV
This is the simplest player possible, but there are tons of options for making something more sophisticated. And thanks to JRuby and vlcj writing a media player can be done from the comfort of a Ruby program.
Reference: JRuby and vlcj – A Simple Full-Screen Media Player from our JCG partner Patric Bacon at the Atomic Spin blog.Related Whitepaper:
Author David Gassner explores Java SE (Standard Edition), the language used to build mobile apps for Android devices, enterprise server applications, and more!
The course demonstrates how to install both Java and the Eclipse IDE and dives into the particulars of programming. The course also explains the fundamentals of Java, from creating simple variables, assigning values, and declaring methods to working with strings, arrays, and subclasses; reading and writing to text files; and implementing object oriented programming concepts. Exercise files are included with the course.