У меня возникла проблема с потоком rtmp поверхности андроида в клиентское приложение. Мое решение имеет очень большую задержку, потому что моя поверхность не создает кадры 60 раз в секунду, она может производить ее в любое время (например, через 30 секунд). Поэтому я хочу немедленно показать каждый новый созданный кадр клиенту.Потоковое видео на поверхности андроида
Android нажимает каждый кадр, он выглядит отлично. Клиентское приложение (jwplayer или vlc) получает его, но оно чего-то ждет. Он становится показом видео только после получения нескольких кадров. Но мне нужно видеть каждый входящий кадр на стороне клиента, когда он только что был получен.
Как это работает сейчас: У меня есть объект Surface, полученный от MediaCodec класс. MediaCodec установлен для кодирования видео h264.
MediaCodec mEncoder;
.....
MediaFormat format = MediaFormat.createVideoFormat("video/avc", width, height);
format.setInteger(MediaFormat.KEY_COLOR_FORMAT, colorFormat);
format.setInteger(MediaFormat.KEY_BIT_RATE, videoBitrate);
format.setInteger(MediaFormat.KEY_FRAME_RATE, videoFramePerSecond);
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, iframeInterval);
try {
mEncoder = MediaCodec.createEncoderByType("video/avc");
} catch (IOException e) {
e.printStackTrace();
}
mEncoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mSurface = mEncoder.createInputSurface();
if (mSurfaceCallback!=null)
mSurfaceCallback.onSurfaceCreated(mSurface);
mEncoder.start();
Иногда андроид рисует на поверхности. Я не могу контролировать скорость этих рисунков. Также я не могу ничего рисовать на этой поверхности. Когда что-то меняется на поверхности, MediaCodec создает новый байтовый баффер с фреймом h264. Я отправляю этот кадр по rtmp.
На стороне клиента У меня есть HTML-страницу с jwplayer
<pre id="myElement"></pre>
<script>
var playerInstance = jwplayer("myElement");
playerInstance.setup({
file:"rtmp://127.0.0.1:1935/live/stream",
height: 800,
width: 480,
autostart: true,
controls: false,
rtmp: {
bufferlength: 0.1
}
});
</script>
Я попытался изменить iframeInterval, кадров в секунду кодирования, BufferLength .. Ничто не является действительно полезным.
Есть ли какая-либо возможность сразу показать встроенные рамки?