解决方案 »

  1.   

    是播放器但是服务器端视频是加密的
    无法直接播放
    我需要在播放器识别视频文件头信息前 将下载文件头修改 即解密
    我用的vlc的java binding不知该如何处理这个问题
      

  2.   

    补充:
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;
    import java.awt.image.BufferedImage;
    import java.awt.image.DataBufferInt;
    import java.awt.image.Raster;
    import java.util.Date;import javax.swing.JFrame;
    import javax.swing.JPanel;import com.sun.jna.Memory;import uk.co.caprica.vlcj.binding.internal.libvlc_media_t;
    import uk.co.caprica.vlcj.player.MediaPlayer;
    import uk.co.caprica.vlcj.player.MediaPlayerEventListener;
    import uk.co.caprica.vlcj.player.MediaPlayerFactory;
    import uk.co.caprica.vlcj.player.direct.BufferFormat;
    import uk.co.caprica.vlcj.player.direct.BufferFormatCallback;
    import uk.co.caprica.vlcj.player.direct.DirectMediaPlayer;
    import uk.co.caprica.vlcj.player.direct.RenderCallback;
    import uk.co.caprica.vlcj.player.direct.format.RV32BufferFormat;
    public class Test extends JFrame implements RenderCallback,BufferFormatCallback{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private DirectMediaPlayer mp;
    private MediaPlayerFactory factory;
    private BufferedImage frame;
    JPanel pane;
    private boolean flag=true;

    public static void main(String[] argc){
    Test t = new Test();
    t.setBounds(100, 100, 800, 600);
    t.setDefaultCloseOperation(EXIT_ON_CLOSE);
    t.setVisible(true);
    }

    Test(){
    this.addWindowListener(new WindowListener(){ @Override
    public void windowOpened(WindowEvent e) {
    // TODO Auto-generated method stub

    } @Override
    public void windowClosing(WindowEvent e) {
    // TODO Auto-generated method stub
    mp.release();
    factory.release();
    } @Override
    public void windowClosed(WindowEvent e) {
    // TODO Auto-generated method stub

    } @Override
    public void windowIconified(WindowEvent e) {
    // TODO Auto-generated method stub

    } @Override
    public void windowDeiconified(WindowEvent e) {
    // TODO Auto-generated method stub

    } @Override
    public void windowActivated(WindowEvent e) {
    // TODO Auto-generated method stub

    } @Override
    public void windowDeactivated(WindowEvent e) {
    // TODO Auto-generated method stub

    }

    });
    factory = new MediaPlayerFactory("");
    mp = factory.newDirectMediaPlayer(this, this);
    mp.setVolume(100);
    mp.playMedia("http://192.168.26.200:80/kuuF/687474703A2F2F6D372E6E65746B7575E636F6D2F6C786A2F74616962616E6C616E676D616E6D616E77752F30312E6D7034.mp4");
    pane = new JPanel(){ /**
     * 
     */
    private static final long serialVersionUID = 1L; @Override
    public void paint(Graphics g) {
    // TODO Auto-generated method stub
    super.paint(g);
    g.drawImage(frame, 0, 0, pane);
    g.setColor(Color.red);
    if(frame != null){
    g.drawString(new Date().toLocaleString(), 0, 10);
    }
    }
    };
    add(pane);
    }

    @Override
    public void display(DirectMediaPlayer mediaPlayer, Memory[] nativeBuffers,
    BufferFormat bufferFormat) {
    // TODO Auto-generated method stub
    nativeBuffers[0].getByteBuffer(0L, nativeBuffers[0].size()).asIntBuffer().get(((DataBufferInt)frame.getRaster().getDataBuffer()).getData(), 0, bufferFormat.getHeight() * bufferFormat.getWidth());
    pane.updateUI();
    }
    @Override
    public BufferFormat getBufferFormat(int sourceWidth, int sourceHeight) {
    // TODO Auto-generated method stub
    frame = new BufferedImage(sourceWidth, sourceHeight, BufferedImage.TYPE_INT_RGB);
    return new BufferFormat("RV32", sourceWidth, sourceHeight,new int[]{sourceWidth*4},new int[]{sourceHeight});
    }

    }
    以上是vlcj实现播放器功能的代码 现在我的目标视频不是正常的视频 而是加密过的 
    而加密方式已知了
    但是让这种视频在线播放怎么实现没有什么思路