悄摸直播(二)—— 播流器实现(拉取rtmp服务器中的数据流,播放直播画面)

悄摸直播 —— JavaCV实现本机摄像头画面远程直播

播流器

一、功能说明

从rtmp服务器中获取视频流数据 + 展示直播画面

二、代码实现

/**
     * 播流器
     * @param inputPath  rtmp服务器地址
     * @throws Exception
     * @throws org.bytedeco.javacv.FrameRecorder.Exception 
     */
    public static void pullStream(String inputPath) throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {
        //创建+设置采集器
        FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(inputPath);
        grabber.setOption("rtsp_transport", "tcp"); 
        grabber.setImageWidth(960);
        grabber.setImageHeight(540);
        
        //开启采集器
        grabber.start();
        
        //直播播放窗口
        CanvasFrame canvasFrame = new CanvasFrame("悄摸直播——来自"+inputPath);
        canvasFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        canvasFrame.setAlwaysOnTop(true);
        OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
        
        //播流
        while (true){
            Frame frame = grabber.grabImage();  //拉流
            opencv_core.Mat mat = converter.convertToMat(frame);
            canvasFrame.showImage(frame);   //播放
        }
    }

三、测试播流器

public static void main(String[] args) throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {
        //rtmp服务器地址
        String inputPath = "rtmp://192.168.1.48/live/stream";
        pullStream(inputPath);
    }

如果出现“悄摸直播——来自XXX”的swing窗口,并能正常播放直播画面,则播流器成功。

你可能感兴趣的:(悄摸直播(二)—— 播流器实现(拉取rtmp服务器中的数据流,播放直播画面))