…) val mediaSource = ConcatenatingMediaSource(firstSource, secondSource) // play firstSource, then secondSource player.prepare(mediaSource) player.playWhenReady = true
... @Override public int read(byte[] buffer, int offset, int readLength) throws IOException { int bytesRead = rtmpClient.read(buffer, offset, readLength); ... return bytesRead; } ... }
offset, int size) throws IOException { return nativeRead(data, offset, size, rtmpPointer); } private native int nativeRead(byte[] data, int offset, int size, long rtmpPointer) throws IOException … } private native int nativeRead(byte[] data, int offset, int size, long rtmpPointer) public class RtmpClient
= encoder.getInputBuffer(index) // or val surface = encoder.createInputSurface() // get encoded data val outputBuffers = encoder.getOutputBuffer(index) ɾcapture data ɾencode data ɾpublish data
= encoder.getInputBuffer(index) // or val surface = encoder.createInputSurface() // get encoded data val outputBuffers = encoder.getOutputBuffer(index) ɾcapture data ɾencode data ɾpublish data // MediaCodec.java val encoder = MediaCodec(…) encoder.start()
encoder = MediaCodec(…) encoder.start() val inputBuffers = encoder.getInputBuffer(index) // or val surface = encoder.createInputSurface() // get encoded data val outputBuffers = encoder.getOutputBuffer(index) val inputBuffers = encoder.getInputBuffer(index) // or val surface = encoder.createInputSurface()
encoder = MediaCodec(…) encoder.start() val inputBuffers = encoder.getInputBuffer(index) // or val surface = encoder.createInputSurface() // get encoded data val outputBuffers = encoder.getOutputBuffer(index) // get encoded data val outputBuffers = encoder.getOutputBuffer(index)
offset, int length, int timestamp ) // Socket.java val socket = Socket(“192.xx.xx.xxx", 1935) val outputStream = DataOutputStream(…) outputStream.write(byteArray) ɾcapture data ɾencode data ɾpublish data