RTSP-Server icon indicating copy to clipboard operation
RTSP-Server copied to clipboard

Double RTSP Stream

Open MustafaKollu1975 opened this issue 2 years ago • 1 comments

Hi Pedro,

I am confused. Where do you put video frame for feed video media codec? I can't get the structure. I am using Camera2API Can you help me?

MustafaKollu1975 avatar Feb 15 '23 05:02 MustafaKollu1975

I want to change structure. Because I need double stream. One stream is high resolution and other stream is low resolution. I don't want to use two Video Encoder. It needs too much CPU. So, I will change structure a little simpler. Like

private final ImageReader.OnImageAvailableListener mOnGetPreviewListener = reader -> {

	Object[] objects = measureFPS.initFPSNew(imageReaderLogFile,"Measure fps in ImageReader --> ", frameTime, frameCount, TAG);

	frameTime=(long)objects[0];
	frameCount=(int)objects[1];

	Image image = reader.acquireLatestImage();

	if (image == null){
		Log.i(TAG, "image is null: ");
	}

	else{
		final Image.Plane[] planes = image.getPlanes();
		Image.Plane yPlane = planes[0];
		Image.Plane uPlane = planes[1];
		Image.Plane vPlane = planes[2];
		byte[] mBuffer
				= yuvToBuffer(yPlane.getBuffer(),
				uPlane.getBuffer(),
				vPlane.getBuffer(),
				yPlane.getPixelStride(),
				yPlane.getRowStride(),
				uPlane.getPixelStride(),
				uPlane.getRowStride(),
				vPlane.getPixelStride(),
				vPlane.getRowStride(),
				image.getWidth(),
				image.getHeight());
		
		image.close();

		if(mStreaming){

			if (initInputBuffers){
				Log.i(TAG, "imagereader: init successful");
				inputBuffers = mMediaCodec.getInputBuffers();
				initInputBuffers =false;
			}

			long now = System.nanoTime() / 1000;

			int bufferIndex = mMediaCodec.dequeueInputBuffer(RtspServerActivity.globalBitrate);

			if (bufferIndex >= 0) {
				inputBuffers[bufferIndex].clear();
				int min = Math.min(inputBuffers[bufferIndex].capacity(), mBuffer.length);
				inputBuffers[bufferIndex].put(mBuffer, 0, min);
				mMediaCodec.queueInputBuffer(bufferIndex, 0, inputBuffers[bufferIndex].position(), now, 0);

			} else {
				mMediaCodec.queueInputBuffer(bufferIndex, 0, 0, 0, 0);
				Log.e(TAG, "No buffer available from MediaCodec!");
			}

			if (initPacketizer){
				Log.i(TAG, "imagereader: packetizer started");
				mPacketizer.setInputStream(new MediaCodecInputStream(mMediaCodec, videoFrames));
				mPacketizer.start();
				initPacketizer = false;

			}
		}
	}
};

MustafaKollu1975 avatar Feb 15 '23 05:02 MustafaKollu1975