/** * encode a buffer and add in RTP input * * @param data */ private void encode(byte[] data) { // Set timestamp timeStamp = SystemClock.uptimeMillis() - videoStartTime; // Encode frame byte[] encoded; if (frameBuffer.dataSrcWidth != 0 && frameBuffer.dataSrcHeight != 0) { encoded = NativeH264Encoder.ResizeAndEncodeFrame( data, timeStamp, mirroring, frameBuffer.dataSrcWidth, frameBuffer.dataSrcHeight); } else { encoded = NativeH264Encoder.EncodeFrame(data, timeStamp, mirroring, frameBuffer.dataScaleFactor); } int encodeResult = NativeH264Encoder.getLastEncodeStatus(); if ((encodeResult == 0) && (encoded.length > 0)) { // Send SPS/PPS if IDR or first frame if (!nalInit || isIdrFrame(encoded)) { rtpInput.addFrame(sps, timeStamp); rtpInput.addFrame(pps, timeStamp); nalInit = true; } VideoOrientation videoOrientation = null; if (orientationHeaderId > 0) { videoOrientation = new VideoOrientation( orientationHeaderId, CameraOptions.convert(cameraId), mOrientation); } rtpInput.addFrame(encoded, timeStamp, videoOrientation); } }