Запись видео с вебкамеры с помощью xuggle - PullRequest
0 голосов
/ 07 мая 2019

Мое java-приложение использует xuggle для записи видео с веб-камеры. Когда я использую расширение ".ts", видео может воспроизводиться правильно. Но я бы хотел записать видео в расширении ".mp4". Когда я меняю расширение, проигрыватель, воспроизводящий записанное видео, говорит, что файл поврежден

Ты знаешь, что может случиться? Заранее спасибо

public StreamServerAgent(Webcam webcam, Dimension dimension, String pathOutputVideo) {

  String filename = pathOutputVideo + File.separator + "output-" + new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()) + ".mp4";
  IMediaWriter writer = ToolFactory.makeWriter(filename);
  Dimension size = WebcamResolution.QVGA.getSize();
  writer.addVideoStream(0, 0, ICodec.ID.CODEC_ID_H264, size.width, size.height);

  this.webcam = webcam;
  this.dimension = dimension;

  this.serverBootstrap = new ServerBootstrap();
  this.serverBootstrap.setFactory(new NioServerSocketChannelFactory(
  Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));
  this.streamServerListener = new StreamServerListenerIMPL();
  this.serverBootstrap.setPipelineFactory(new StreamServerChannelPipelineFactory(this.streamServerListener, dimension));
  this.timeWorker = new ScheduledThreadPoolExecutor(1);
  this.encodeWorker = Executors.newSingleThreadExecutor();
  this.h264StreamEncoder = new H264StreamEncoder(dimension, false, writer);
  this.secondEncoder = new H264StreamEncoder(dimension, false, writer);

   AudioFormat format = new AudioFormat(
                AudioFormat.Encoding.PCM_SIGNED,
                44100.0F, 16, 2, 4, 44100, false);

   this.line = null;

   // format is an AudioFormat object
   DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
   if (!AudioSystem.isLineSupported(info)) {
       System.out.println("Error, line not supported");
   }
   // Obtain and open the line.
   try {
       this.line = (TargetDataLine) AudioSystem.getLine(info);
       this.line.open(format);
   } catch (LineUnavailableException ex) {
       ex.printStackTrace();
   }

   this.line.start();
}
...