OpenMAX AL аварийно завершает работу с сигналом 6 (SIGABRT). Медиасервер умирает

У меня есть проблема, когда по окончании воспроизведения видео OpenMAX приложение вылетает с сигналом 6.

Вот мой код EOS в буфере обратного вызова. Авария также происходит, если я остановил медиаплеер и очистил очередь. В соответствии с некоторыми более подробными журналами, я посылаю сигнал EOS, EOS обрабатывается, а затем происходит сбой.

Вот мой код для сигнализации EOS

// We reached the EOF or an I/O error occured
    // Create EOS signal
    XAAndroidBufferItem signal;
    memset(&signal, 0, sizeof(XAAndroidBufferItem));
    signal.itemKey = XA_ANDROID_ITEMKEY_EOS;

    // Enqueue the error
    if ((res = (*i_PlayerInputBufferInterface)->Enqueue(i_PlayerInputBufferInterface,
        (void *)&EOS_BUFFER_CONTEXT, nullptr, 0, &signal, sizeof(XAuint32) * 2))
        != XA_RESULT_SUCCESS)
        throw OpenMAXException("Could not enqueue EOS signal.", res);

    // Update video state
    i_IsEOF = true;

    return XA_RESULT_SUCCESS;

Мой след надгробия здесь.

http://pastebin.com/CScimETt

1 ответ

Решение

Вы получаете ошибку подтверждения в stagefright:

A/ATSParser(21042): frameworks/av/media/libstagefright/mpeg2ts/ATSParser.cpp:1194 CHECK_EQ( sync_byte,0x47u) failed: 169 vs. 71
A/libc(21042): Fatal signal 6 (SIGABRT) at 0x00005232 (code=-6), thread 21385 (NuPlayerDriver )

Похоже, что он недоволен потоком данных (что странно - должно быть ошибкой, а не фатальным утверждением, если это так).

Лучше всего выяснить, что это за поток, которым захлебывается парсер libstagefright.

Отпечаток сборки говорит, что это старое устройство со сборкой ICS (samsung/GT-I9100/GT-I9100:4.0.3/IML74K). Я не вижу фреймворки ICS /av-источники на исходном сайте, но исходный файл jellybean выглядит так, как будто это то же самое... проверка выполняется в строке 1033. Похоже, что при попытке проанализировать транспортный поток происходит сбой.

Другие вопросы по тегам