qq_21183971 2021-09-30 16:09 采纳率: 0%
浏览 205

javacv本地视频转为图像帧加水印后,如何直接转为流输出到前台,而不是生成本地文件或者推流。

我的需求是,java向前台输出视频流时,动态添加水印。
示例代码如下:

   // 设置源视频、加字幕后的视频文件路径
    FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault("C:/Users/Administrator/Desktop/123.mp4");
    grabber.start();

    //如下位置,我想把C:/Users/Administrator/Desktop/test.mp4改为HttpServletResponse的OutputStream,
    //直接输出到浏览器,可是这样写报错。
    FFmpegFrameRecorder recorder = new FFmpegFrameRecorder("C:/Users/Administrator/Desktop/test.mp4",
             grabber.getImageWidth(), grabber.getImageHeight(), 2);  //grabber.getAudioChannels()
    recorder.setFormat("mp4");
    recorder.setFrameRate(grabber.getFrameRate());
    recorder.setVideoCodec(grabber.getVideoCodec());
    recorder.setVideoBitrate(grabber.getVideoBitrate());
    avutil.av_log_set_level(AV_LOG_ERROR);   //设置打印日志级别
    // 音频相关配置,取原音频配置
    recorder.setSampleRate(grabber.getSampleRate());
    recorder.setAudioCodec(avcodec.AV_CODEC_ID_MP3);
    recorder.start();
    Java2DFrameConverter converter = new Java2DFrameConverter();
    Frame frame;
    int i = 0;
    while ((frame = grabber.grab()) != null) {
        // 从视频帧中获取图片
        if (frame.image != null) {
            BufferedImage bufferedImage = converter.getBufferedImage(frame);
            // 对图片进行文本合入
            bufferedImage = addSubtitle(bufferedImage, "水印");
            // 视频帧赋值,写入输出流
            frame.image = converter.getFrame(bufferedImage).image;
            recorder.record(frame);
        }
        // 音频帧写入输出流
        if(frame.samples != null) {
            recorder.record(frame);
        }
    }

在上面的代码中,构建FFmpegFrameRecorder对象时,我不想传入本地文件路径,而是想传入一个输出流。直接输出到浏览器,但是这样会报错。
看源码的构造函数,是有接收输出流的实现的,但是这样使用不行,应该如何使用呢?
如果这样无法实现,那么是否可以采用,将Frame对象重新转为输出流呢?这样又如何实现呢?

  • 写回答

2条回答 默认 最新

  • 闯入秋 2021-09-30 16:14
    关注

    应该直接可以websocket发送过去吧

    评论

报告相同问题?

问题事件

  • 修改了问题 9月30日
  • 修改了问题 9月30日
  • 创建了问题 9月30日

悬赏问题

  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式