Package org.apache.openmeetings.db.entity.record

Examples of org.apache.openmeetings.db.entity.record.FlvRecordingMetaData


      log.debug(String.format("### %s:: Ser file [%s] exists ? %s; size: %s, lastModified: %s ", prefix, metaSer.getPath(), metaSer.exists(), metaSer.length(), metaSer.lastModified()));
    }
  }
 
  protected FlvRecordingMetaData waitForTheStream(long metaId) throws InterruptedException {
    FlvRecordingMetaData metaData = metaDataDao.get(metaId);
    if (metaData.getStreamStatus() != Status.STOPPED) {
      log.debug("### meta Stream not yet written to disk " + metaId);
      boolean doWait = true;
      long counter = 0;
      long maxTimestamp = 0;
      while(doWait) {
        log.trace("### Stream not yet written Thread Sleep - " + metaId);
       
        metaData = metaDataDao.get(metaId);
       
        if (metaData.getStreamStatus() == Status.STOPPED) {
          printMetaInfo(metaData, "Stream now written");
          log.debug("### Thread continue ... " );
          doWait = false;
          break;
        } else {
          File metaFlv = getMetaFlv(metaData);
          if (metaFlv.exists() && maxTimestamp < metaFlv.lastModified()) {
            maxTimestamp = metaFlv.lastModified();
          }
          File metaSer = getMetaFlvSer(metaData);
          if (metaSer.exists() && maxTimestamp < metaSer.lastModified()) {
            maxTimestamp = metaSer.lastModified();
          }
          if (maxTimestamp + TIME_TO_WAIT_FOR_FRAME < System.currentTimeMillis()) {
            if (metaSer.exists()) {
              log.debug("### long time without any update, trying to repair ... ");
              try {
                if (FLVWriter.repair(metaSer.getCanonicalPath(), null, null) && !metaSer.exists()) {
                  metaData.setStreamStatus(Status.STOPPED);
                  metaDataDao.update(metaData);
                }
              } catch (IOException e) {
                log.error("### Error while file repairing ... ", e);
              }
            } else {
              log.debug("### long time without any update, closing ... ");
              metaData.setStreamStatus(Status.STOPPED);
              metaDataDao.update(metaData);
            }
          }
        }
        if (++counter % 1000 == 0) {
View Full Code Here


      List<ConverterProcessResult> returnLog = new ArrayList<ConverterProcessResult>();
      List<String> listOfFullWaveFiles = new LinkedList<String>();
      File streamFolder = getStreamFolder(flvRecording);
     
      FlvRecordingMetaData screenMetaData = metaDataDao.getScreenMetaDataByRecording(flvRecording.getFlvRecordingId());

      if (screenMetaData == null) {
        throw new Exception("screenMetaData is Null FlvRecordingId " + flvRecording.getFlvRecordingId());
      }

      if (screenMetaData.getStreamStatus() == Status.NONE) {
        throw new Exception("Stream has not been started, error in recording");
      }

      screenMetaData = waitForTheStream(screenMetaData.getFlvRecordingMetaDataId());

      stripAudioFirstPass(flvRecording, returnLog, listOfFullWaveFiles, streamFolder);

      // Merge Wave to Full Length
      String streamFolderGeneralName = getStreamsHibernateDir().getCanonicalPath() + File.separator; // FIXME

      String hashFileFullName = screenMetaData.getStreamName() + "_FINAL_WAVE.wav";
      String outputFullWav = new File(streamFolder, hashFileFullName).getCanonicalPath();

      if (listOfFullWaveFiles.size() == 1) {
        outputFullWav = listOfFullWaveFiles.get(0);
      } else if (listOfFullWaveFiles.size() > 0) {
        String[] argv_full_sox = mergeAudioToWaves(listOfFullWaveFiles, outputFullWav);

        returnLog.add(ProcessHelper.executeScript("mergeAudioToWaves", argv_full_sox));
      } else {
        // create default Audio to merge it. strip to content length
        String outputWav = streamFolderGeneralName + "one_second.wav";

        // Calculate delta at beginning
        Long deltaTimeMilliSeconds = flvRecording.getRecordEnd().getTime() - flvRecording.getRecordStart().getTime();
        Float deltaPadding = (Float.parseFloat(deltaTimeMilliSeconds.toString()) / 1000) - 1;

        String[] argv_full_sox = new String[] { getPathToSoX(), outputWav, outputFullWav, "pad", "0", deltaPadding.toString() };

        returnLog.add(ProcessHelper.executeScript("generateSampleAudio", argv_full_sox));
      }
      screenMetaData.setFullWavAudioData(hashFileFullName);
      metaDataDao.update(screenMetaData);

      // Merge Audio with Video / Calculate resulting FLV

      String inputScreenFullFlv = new File(streamFolder, screenMetaData.getStreamName() + ".flv")
          .getCanonicalPath();

      String hashFileFullNameFlv = "flvRecording_" + flvRecording.getFlvRecordingId() + ".flv";
      String outputFullFlv = streamFolderGeneralName + hashFileFullNameFlv;

      // ffmpeg -vcodec flv -qscale 9.5 -r 25 -ar 22050 -ab 32k -s 320x240
      // -i 65318fb5c54b1bc1b1bca077b493a914_28_12_2009_23_38_17_FINAL_WAVE.wav
      // -i 65318fb5c54b1bc1b1bca077b493a914_28_12_2009_23_38_17.flv
      // final1.flv

      int flvWidth = flvRecording.getWidth();
      int flvHeight = flvRecording.getHeight();

      log.debug("flvWidth -1- " + flvWidth);
      log.debug("flvHeight -1- " + flvHeight);

      flvWidth = Double.valueOf((Math.floor(flvWidth / 16)) * 16).intValue();
      flvHeight = Double.valueOf((Math.floor(flvHeight / 16)) * 16).intValue();

      log.debug("flvWidth -2- " + flvWidth);
      log.debug("flvHeight -2- " + flvHeight);

      flvRecording.setFlvWidth(flvWidth);
      flvRecording.setFlvHeight(flvHeight);

      String[] argv_fullFLV = new String[] { getPathToFFMPEG(), "-y",//
          "-itsoffset", formatMillis(diff(screenMetaData.getRecordStart(), screenMetaData.getFlvRecording().getRecordStart())),
          "-i", inputScreenFullFlv, "-i", outputFullWav, "-ar", "22050", //
          "-acodec", "libmp3lame", //
          "-ab", "32k", //
          "-s", flvWidth + "x" + flvHeight, //
          "-vcodec", "flashsv", //
View Full Code Here

            stream.removeStreamListener(iStreamListener);
          }
        }
      }

      FlvRecordingMetaData metaData = metaDataDao.get(metaId);
      BaseConverter.printMetaInfo(metaData, "Stopping the stream");
      // Manually call finish on the stream so that there is no endless loop waiting in the FlvRecorderConverter waiting for the stream to finish
      // this would normally happen in the Listener
      Status s = metaData.getStreamStatus();
      if (Status.NONE == s) {
        log.debug("Stream was not started, no need to stop :: stream with id " + metaId);
      } else {
        metaData.setStreamStatus(listenerAdapter == null && s == Status.STARTED ? Status.STOPPED : Status.STOPPING);
        log.debug("Stopping the stream :: New status == " + metaData.getStreamStatus());
      }
      metaDataDao.update(metaData);
      if (listenerAdapter == null) {
        log.debug("Stream Not Found :: " + metaId);
        log.debug("Available Streams :: " + streamListeners.size());
View Full Code Here

    returnLog.add(ProcessHelper.executeScript(job, argv));
    return argv;
  }
 
  protected FlvRecordingMetaData waitForTheStream(long metaId) throws InterruptedException {
    FlvRecordingMetaData metaData = metaDataDao.get(metaId);
    if (metaData.getStreamStatus() != Status.STOPPED) {
      log.debug("### meta Stream not yet written to disk " + metaId);
      boolean doWait = true;
      long counter = 0;
      while(doWait) {
        log.trace("### Stream not yet written Thread Sleep - " + metaId);
       
        metaData = metaDataDao.get(metaId);
       
        if (metaData.getStreamStatus() == Status.STOPPED) {
          log.debug("### Stream now written Thread continue - " );
          doWait = false;
        } else if (++counter % 1000 == 0) {
          log.debug(String.format("### Still waiting for the stream with id %s; current status: %s ", metaId, metaData.getStreamStatus()));
          File metaDir = getStreamsSubDir(metaData.getFlvRecording().getRoom_id());
          File metaFlv = new File(metaDir, metaData.getStreamName() + ".flv");
          File metaSer = new File(metaDir, metaData.getStreamName() + ".flv.ser");
          log.debug(String.format("### Still waiting:: Flv file [%s] exists ? %s; size: %s, lastModified: %s ", metaFlv.getPath(), metaFlv.exists(), metaFlv.length(), metaFlv.lastModified()));
          log.debug(String.format("### Still waiting:: Ser file [%s] exists ? %s; size: %s, lastModified: %s ", metaSer.getPath(), metaSer.exists(), metaSer.length(), metaSer.lastModified()));
        }
       
        Thread.sleep(100L);
View Full Code Here

TOP

Related Classes of org.apache.openmeetings.db.entity.record.FlvRecordingMetaData

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.