/** * Copyright (c) 2006 - 2012 Smaxe Ltd (www.smaxe.com). * All rights reserved. */ import com.smaxe.logger.ILogger; import com.smaxe.logger.support.Loggers; import com.smaxe.uv.media.core.VideoFrame; import com.smaxe.uv.media.java.audio.JavaAudioPlayback; import com.smaxe.uv.media.java.swing.JVideoScreen; import com.smaxe.uv.media.player.IMediaPlayerModel; import com.smaxe.uv.media.player.JMediaPlayer; import com.smaxe.uv.media.sdk.IMediaPlayerModelSdk; import com.smaxe.uv.media.sdk.IMediaSdk; import com.smaxe.uv.media.sdk.MediaSdkFactory; import com.smaxe.uv.media.sdk.codec.AacJaadAudioCodecSdk; import com.smaxe.uv.media.sdk.codec.Mp3JavazoomAudioCodecSdk; import com.smaxe.uv.media.sdk.codec.SpeexAudioCodecSdk; import java.awt.BorderLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SwingUtilities; /** * <code>ExMediaSdkMediaPlayer</code> - {@link IMediaSdk} example to play media file, rtmp or rtsp resource. * * @author Andrei Sochirca * @see <a href="http://www.smaxe.com/product.jsf?id=juv-media-sdk" target="_blank">JUV Media SDK</a> */ public final class ExMediaSdkMediaPlayer extends Object { /** * Entry point. * * @param args * @throws Exception */ public static void main(final String[] args) throws Exception { // NOTE: // Evaluation version has some limitations: // - video decoder watermarks frames (and blacks it sometimes) final String file = "d:/ratatouille.mp4"; IMediaSdk mediaSdk = MediaSdkFactory.getMediaSdk(); playMedia(mediaSdk, createMediaPlayerModel(mediaSdk, file)); } /** * Creates {@link IMediaPlayerModel} instance for the <code>url</code>. * * @param sdk * @param url * @return media player model * @throws IOException if an I/O exception occurred */ private static IMediaPlayerModel createMediaPlayerModel(final IMediaSdk sdk, final String url) throws IOException { IMediaPlayerModelSdk mediaPlayerModelSdk = sdk.createMediaPlayerModelSdk(); mediaPlayerModelSdk.setMediaCodecSdk(MediaSdkFactory.createCompositeMediaCodecSdk(new AacJaadAudioCodecSdk(), new Mp3JavazoomAudioCodecSdk(), new SpeexAudioCodecSdk())); if (url.startsWith("rtmp")) { int ndx = url.indexOf("/mp4:"); if (ndx < 0) ndx = url.lastIndexOf('/'); final String stream = url.substring(ndx + 1); final String path = url.substring(0, ndx); final ExMediaSdkMediaPlayerPlayRtmpStream.RtmpMediaStreamReader reader = new ExMediaSdkMediaPlayerPlayRtmpStream.RtmpMediaStreamReader(path, stream); reader.setLogger(Loggers.createSoLogger(ILogger.DEBUG, reader.id())); return mediaPlayerModelSdk.create(reader); } else if (url.startsWith("rtsp")) { final ExMediaSdkMediaPlayerPlayRtspStream.RtspMediaStreamReader reader = new ExMediaSdkMediaPlayerPlayRtspStream.RtspMediaStreamReader(url, 12444); reader.setLogger(Loggers.createSoLogger(ILogger.DEBUG, reader.id())); return mediaPlayerModelSdk.create(reader); } else { return mediaPlayerModelSdk.create(url); } } /** * Plays the media. * * @param mediaSdk * @param model media player model * @throws Exception if an exception occurred */ public static void playMedia(final IMediaSdk mediaSdk, final IMediaPlayerModel model) throws Exception { final JVideoScreen videoScreen = new JVideoScreen(); final JMediaPlayer mediaPlayer = JMediaPlayer.create(model); mediaPlayer.setAudioPlayback(new JavaAudioPlayback()); mediaPlayer.setListener(new JMediaPlayer.ListenerAdapter() { @Override public void onVideoFrame(final VideoFrame frame, final int[] frameCropOffset) { SwingUtilities.invokeLater(new Runnable() { public void run() { videoScreen.setFrameCropOffset(frameCropOffset == null ? null : new Insets(frameCropOffset[0], frameCropOffset[1], frameCropOffset[2], frameCropOffset[3])); videoScreen.setFrame(frame); } }); } }); JButton start = new JButton(new AbstractAction("Play") { private final static long serialVersionUID = -3538347901572402162L; public void actionPerformed(final ActionEvent e) { mediaPlayer.startPlayback(); } }); final JFrame frame = new JFrame(); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { mediaPlayer.stopPlayback(); System.exit(0); } }); frame.getContentPane().setLayout(new BorderLayout()); frame.getContentPane().add(videoScreen, BorderLayout.CENTER); frame.getContentPane().add(start, BorderLayout.SOUTH); frame.pack(); frame.setVisible(true); } /** * Constructor. */ private ExMediaSdkMediaPlayer() { } }