bytedeco/javacv

SeekableByteArrayOutputStream cannot be played

Open

#2,280 opened on Sep 8, 2024

View on GitHub
 (0 comments) (0 reactions) (0 assignees)Java (1,583 forks)batch import
help wantedquestion

Repository metrics

Stars
 (6,985 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

version: 1.5.10

public static void main(String[] args) throws IOException {
        String filePath="C:\\Users\\ferrym\\Desktop\\scrm\\surmount\\video-watermark\\lron-man.mp4";
        File file=new File(filePath);
        // 启用 FFmpeg 日志输出
        FFmpegLogCallback.set();
        //抓取视频资源
        FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(file);



        //
        Frame frame = null;
        FFmpegFrameRecorder recorder = null;
        String fileName = null;
        SeekableByteArrayOutputStream outputStream  = new SeekableByteArrayOutputStream();
        try{
            frameGrabber.start();
            Random random=new Random();
            fileName = file.getAbsolutePath() + random.nextInt(100)+".mp4";
            System.out.println("文件名-->>"+fileName);
            recorder = new FFmpegFrameRecorder(outputStream, frameGrabber.getImageWidth(), frameGrabber.getImageHeight(), frameGrabber.getAudioChannels());
            recorder.setFormat("mp4");
            recorder.setSampleRate(frameGrabber.getSampleRate());
            recorder.setFrameRate(frameGrabber.getFrameRate());
            recorder.setTimestamp(frameGrabber.getTimestamp());
            recorder.setVideoBitrate(frameGrabber.getVideoBitrate());
            recorder.setVideoCodec(frameGrabber.getVideoCodec());
            recorder.start();
            int index=0;
            while (true){
                frame=frameGrabber.grabFrame();
                if(frame==null){
                    System.out.println("视频处理完成");
                    break;
                }
                //判断音频
                System.out.println("音频=="+(frame.samples ==null)+"视频=="+ (frame.image==null));
                //判断图片帧
                if(frame.image !=null){
                    IplImage iplImage = Java2DFrameUtils.toIplImage(frame);
                    BufferedImage buffImg= Java2DFrameUtils.toBufferedImage(iplImage);
                    Graphics2D graphics = buffImg.createGraphics();
                    graphics.setColor(Color.WHITE);
                    graphics.setFont(new Font("微软雅黑", Font.BOLD, 20));
                    graphics.drawString("------------scrm技术团队--------------",(iplImage.width()/2)-100,iplImage.height()/2);
                    graphics.dispose();
                    Frame newFrame = Java2DFrameUtils.toFrame(buffImg);
                    recorder.record(newFrame);
                }
                //设置音频
                if(frame.samples !=null){
                    recorder.recordSamples(frame.sampleRate,frame.audioChannels,frame.samples);
                }
                System.out.println("帧值="+index);
                index ++;
            }


          File test =  new File(fileName);
            FileUtil.writeBytes(outputStream.toByteArray(),test);
//            writeBytesToFile(outputStream.toByteArray(),test);

            recorder.close();
            frameGrabber.close();
//            tempFile.delete();
//            FileUtil.delete(fileName);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

Contributor guide