Bom dia Galera,
Tenho uma aplicação na qual eu pego o sinal de uma placa de TV e exibo na tela para o usuário.
Consigo pegar o sinal, consegui redimensionar (depois de muito custo) o vídeo, mas não sei como eu faço para poder definir um canal para o jmf exibir o video. Já procurei em toda a internet, estudei toda a especificação JMF e não descobri como fazer isso?
Alguém pode me ajudar com isso? VOu ficar muitos grato e já me custou muitas noites de sono!!!
Segue o código abaixo, por favor desconsiderem os códigos comentados (testes) rs
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.ContainerAdapter;
import javax.media.Control;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Time;
import javax.media.bean.playerbean.MediaPlayer;
import javax.media.control.PortControl;
import javax.swing.JFrame;
import javax.swing.JWindow;
import com.sun.media.BasicJMD;
import com.sun.media.PlaybackEngine;
public class VideoPanel2 extends JFrame implements ControllerListener
{
MediaPlayer mediaPlayer = new MediaPlayer();
public VideoPanel2(MediaPlayer mediaPlayer2, MediaLocator locator)
{
Manager.setHint( Manager.LIGHTWEIGHT_RENDERER, true );
Dimension dimFull = Toolkit.getDefaultToolkit().getScreenSize();
int altura = (dimFull.width *20) / 100;
System.out.println(altura);
Dimension dimVPanel = new Dimension(dimFull.width, dimFull.height - altura );
System.out.println(dimFull);
setLayout(new BorderLayout());
setPreferredSize(dimFull);
setSize(dimFull);
setMinimumSize(dimFull);
// setResizable(false);
mediaPlayer.setMediaLocator(locator);
mediaPlayer.setControlPanelVisible(false);
mediaPlayer.setBounds(0,0, dimVPanel.width, dimVPanel.height);
mediaPlayer.setPlaybackLoop(false);
mediaPlayer.addControllerListener(this);
mediaPlayer.setFixedAspectRatio(false);
// getPlayer().getControl("PortControl");
Control[] controls = mediaPlayer.getPlayer().getControls();
for (Control control : controls) {
if( control.getControlComponent() !=null ){
// add( control.getControlComponent() , BorderLayout.SOUTH);
}
System.out.println(control);
}
mediaPlayer.setVolumeLevel("5");
add(mediaPlayer); //TEM DE SER CERTER, NORTH nao redimensiona
// mediaPlayer.realize();
// mediaPlayer.getGainControl().setLevel(1.0F);
MessagesPanel messagesPanel = new MessagesPanel();
messagesPanel.setSize(dimFull.width, altura);
// add(messagesPanel, BorderLayout.SOUTH);
addComponentListener(new ComponentAdapter()
{
public void componentShown(ComponentEvent event)
{
try
{
mediaPlayer.start();
PortControl portControl =
(PortControl) mediaPlayer.getPlayer().getControl("javax.media.control.PortControl");
portControl.setPorts(PortControl.TV_TUNER);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
);
addContainerListener(new ContainerAdapter()
{
public void componentRemoved(java.awt.event.ContainerEvent event)
{
try
{
mediaPlayer.stop();
mediaPlayer.deallocate();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
);
pack();
setVisible(true);
// setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void controllerUpdate(ControllerEvent e)
{
if (e instanceof EndOfMediaEvent)
{
mediaPlayer.setMediaTime(new Time(1));
return;
}
}
public void paint (Graphics g)
{
super.paint (g);
}
}