diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamPlayerEngine.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamPlayerEngine.kt index 7b3a602a..ec039c0d 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamPlayerEngine.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamPlayerEngine.kt @@ -22,6 +22,7 @@ import kotlin.concurrent.withLock class StreamPlayerEngine(private val group: Long, private val source: Long, private val epoch: Long, private val localPreview: StreamPreview? = null, private val displayDegrees: Int = 0) { companion object { private val viewerLock = ReentrantLock() } + private class UnsupportedCodec(message: String) : IllegalStateException(message) private data class Frame(val pts: Long, val key: Boolean, val width: Int, val height: Int, val rotation: Int, val top: Int?, val revision: Long, val codec: StreamVideoCodec, val config: ByteArray, val data: ByteArray) @@ -230,7 +231,7 @@ class StreamPlayerEngine(private val group: Long, private val source: Long, priv check(frame.key) val format = frame.codec.decoderFormat(frame.width, frame.height, frame.rotation, frame.config) val name = android.media.MediaCodecList(android.media.MediaCodecList.REGULAR_CODECS).findDecoderForFormat(format) - ?: error("Unsupported decoder ${frame.codec.label} ${frame.width}x${frame.height}") + ?: throw UnsupportedCodec("Unsupported decoder ${frame.codec.label} ${frame.width}x${frame.height}") decoder = MediaCodec.createByCodecName(name) LogManager.addLog("INFO", "video", "viewer codec id=$id type=${frame.codec.label} decoder=$name config=${frame.config.size}") decoder!!.configure(format, surface, null, 0); decoder!!.start() @@ -282,7 +283,10 @@ class StreamPlayerEngine(private val group: Long, private val source: Long, priv Thread.sleep(5) } } catch (e: Exception) { - if (running) { mutableStatus.value = R.string.stream_failed; LogManager.addLog("ERROR", "stream", "viewer failed id=$id: ${e.message}") } + if (running) { + mutableStatus.value = if (e is UnsupportedCodec) R.string.stream_decoder_unsupported else R.string.stream_failed + LogManager.addLog("ERROR", "stream", "viewer failed id=$id: ${e.message}") + } } finally { NativeLib.streamStop(id) try { decoder?.stop(); decoder?.release() } diff --git a/tools/chatgui-android/app/src/main/res/values-ru/strings.xml b/tools/chatgui-android/app/src/main/res/values-ru/strings.xml index c0a9d21c..d1323ec3 100644 --- a/tools/chatgui-android/app/src/main/res/values-ru/strings.xml +++ b/tools/chatgui-android/app/src/main/res/values-ru/strings.xml @@ -1,6 +1,7 @@ Кодек: %1$s + Устройство не может воспроизвести выбранный видеокодек. Битрейт видео: Авто %1$.2f Мбит/с Очередь видео: %1$.1f КиБ · Неподтверждено: %2$.1f КиБ @@ -457,7 +458,7 @@ "Автопередача выключена" "В обоих режимах передаётся до 0,6 с звука перед срабатыванием. Уровень измеряется до компрессора рации. Для включения нужны 40 мс на пороге включения или выше. Передача заканчивается после заданной паузы ниже порога отключения. Измеритель работает и без автопередачи, пока открыта эта вкладка." "Удерживайте для настройки режима и порогов" - Не удалось переключить захват. Восстановлены прежняя камера, режим и ориентация. + Не удалось применить параметры видео. Восстановлены предыдущие настройки. Переключение камеры, режима или ориентации… Нет совместимой камеры или видеокодировщика Поворот: %1$d° diff --git a/tools/chatgui-android/app/src/main/res/values/strings.xml b/tools/chatgui-android/app/src/main/res/values/strings.xml index b07a560d..dce9de39 100644 --- a/tools/chatgui-android/app/src/main/res/values/strings.xml +++ b/tools/chatgui-android/app/src/main/res/values/strings.xml @@ -1,6 +1,7 @@ Codec: %1$s + This device cannot play the selected video codec. Video bitrate: Auto %1$.2f Mbps Video queue: %1$.1f KiB · Unacknowledged: %2$.1f KiB @@ -456,7 +457,7 @@ "Automatic transmission disabled" "Both modes include 0.6 s of prebuffer. Level is measured before the radio compressor. Start requires 40 ms at or above the start threshold. Transmission ends after the configured silence below the stop threshold. The meter also works with automatic transmission disabled while this tab is visible." "Hold to adjust activation mode and thresholds" - Could not switch capture. The previous camera, mode and orientation have been restored. + Could not apply video settings. The previous settings have been restored. Switching camera, video mode or orientation… No compatible camera or video encoder found Rotation: %1$d°