Программа для трансляции RTMP на Android.
Использует Camera и AudioRecord для получения исходных аудио- и видеоданных, которые затем кодируются в реальном времени с помощью x264 и faac, а затем передаются на сервер потокового вещания с помощью librtmp. Это проект для личного использования, в java-слое достаточно оставить только PublishNativeJni.java, остальное можно произвольно перепаковать. Реализация кодирования с помощью MediaCodec: https://github.com/EarthXiang/HardWareLiveСоздание транслятора:
// Разрешение: 480x320 fps: 25 битрейт: 480k частота дискретизации: 44.1k по умолчанию задействован задний камера
// Если устройство не поддерживает эти параметры, они будут автоматически корректироваться, чтобы соответствовать поддерживаемым параметрам устройства.
LivePusher livePusher = new LivePusher(480, 320, 480000, 25, 44100, CameraInfo.CAMERA_FACING_BACK);
livePusher.setLiveStateChangeListener(this);
livePusher.prepare(mSurfaceHolder);
Запуск трансляции:
livePusher.startPusher("rtmp://ip:port/hub/stream");
Остановка трансляции:
livePusher.stopPusher();
Освобождение ресурсов:
livePusher.release();
Установка слушателя состояния:
public interface LiveStateChangeListener {
// Сообщение об ошибке (вызывается не из главного потока)
public void onErrorPusher(int code);
// Запуск трансляции (вызывается не из главного потока)
public void onStartPusher();
// Остановка трансляции (вызывается не из главного потока)
public void onStopPusher();
}
Получение сообщений об ошибках:
switch (code) {
case -100:
Toast.makeText(MainActivity.this, "Не удалось начать предварительное просмотр видео", 0).show();
livePusher.stopPusher();
break;
case -101:
Toast.makeText(MainActivity.this, "Не удалось начать запись аудио", 0).show();
livePusher.stopPusher();
break;
case -102:
Toast.makeText(MainActivity.this, "Не удалось настроить аудиокодировщик", 0).show();
livePusher.stopPusher();
break;
case -103:
Toast.makeText(MainActivity.this, "Не удалось настроить видеокодировщик", 0).show();
livePusher.stopPusher();
break;
case -104:
Toast.makeText(MainActivity.this, "Не удалось настроить транспортный поток", 0).show();
livePusher.stopPusher();
break;
}
``````markdown
this, "Проблемы с сервером потокового вещания или с сетью", 0).show();
livePusher.stopPusher();
break;
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )