Подтвердить что ты не робот

Как получить CamcorderProfile.videoBitRate для Android-устройства?

Мое приложение использует HLS для потоковой передачи видео с сервера, но когда я запрашиваю поток HLS с сервера, мне нужно передать ему максимальный битрейт видео, который может обрабатывать устройство. В руководствах API Android говорится, что "доступные видеообъявления для записи на устройствах могут использоваться в качестве прокси-сервера для возможностей воспроизведения мультимедиа", но когда я пытаюсь получить видеоBitRate для камера обратного просмотра, она всегда возвращается как 12 Мбит/с, независимо от устройства (Galaxy Nexus, Galaxy Tab Plus 7), Galaxy Tab 8.9), несмотря на то, что у них есть 3 разных графических процессора (PowerVR SGX540, Mali-400 MP, Tegra 250 T20). Здесь мой код, я делаю что-то неправильно?

CamcorderProfile camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
targetVideoBitRate = camcorderProfile.videoBitRate;

Если я попробую это на вкладке Galaxy Tab:

boolean hasProfile = CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_HIGH);

он возвращает True, несмотря на то, что QUALITY_HIGH для записи 1080p и спецификации говорят, что он может записывать только на 720p.

4b9b3361

Ответ 1

Похоже, я нашел ответ на свой вопрос.

Я не читал документацию достаточно близко, QUALITY_HIGH не эквивалентен 1080p, это просто способ указать профиль самого высокого качества. поддержка устройств. Поэтому, по определению, CamcorderProfile.hasProfile( CamcorderProfile.QUALITY_HIGH ) всегда истинно. Я должен был написать что-то вроде этого:

public enum mVideoQuality { 
    FullHD, HD, SD
}
mVideoQuality mMaxVideoQuality;
int mTargetVideoBitRate;

private void initVideoQuality {
    if ( CamcorderProfile.hasProfile( CamcorderProfile.QUALITY_1080P ) ) {
        mMaxVideoQuality = mVideoQuality.FullHD;
    } else if ( CamcorderProfile.hasProfile( CamcorderProfile.QUALITY_720P ) ) {
        mMaxVideoQuality = mVideoQuality.HD;
    } else {
        mMaxVideoQuality = mVideoQuality.SD;
    }
    CamcorderProfile cProfile = CamcorderProfile.get( CamcorderProfile.QUALITY_HIGH );
    mTargetVideoBitRate = cProfile.videoBitRate;
}

Большинство моих устройств по-прежнему сообщают о поддержке кодирования 1080p, что я скептически отношусь к этому, однако я запустил этот код на Sony Experia Tipo (мое тестовое устройство низкого уровня), и он сообщил о максимальном качестве кодирования 480p с videoBitRate от 720 Кбит/с.

Как я уже сказал, я не уверен, что каждому устройству можно доверять, но я видел ряд битрейтов видео от 720 Кбит/с до 17 Мбит/с и качества профиля от 480p до 1080p. Надеемся, что другие люди найдут эту информацию полезной.