Обработка исключений в обратных вызовах чтения AVIOContext - PullRequest
0 голосов
/ 01 мая 2018
m_formatCtx = avformat_alloc_context ();
uint8_t * buffer = NULL, * avio_ctx_buffer = NULL;
size_t buffer_size, avio_ctx_buffer_size = 200;
avio_ctx_buffer = (uint8_t *) av_malloc (avio_ctx_buffer_size * 10);
AVIOContext * avio_ctx = avio_alloc_context (avio_ctx_buffer, avio_ctx_buffer_size,                                           0,
                                           tcp, &socketRead, NULL, NULL);

Считайте видео / аудио информацию через socketRead, как указано выше.

int socketRead (void * ptr, uint8_t * buf, int buf_size)
{
    printf ("socketRead bufsize =% d \ n", buf_size);
    ssize_t readSize = 0;
    TCPClient * tcp = (TCPClient *) ptr;
    readSize = tcp-> read (buf, buf_size);
    return readSize;
}

Однако, если посередине неправильно получен видео пакет,

D / libnav: socketRead bufsize = 2048
D / libnav: socketRead bufsize = 2048
D / libnav: socketRead bufsize = 4096
D / libnav: socketRead bufsize = 8192
D / libnav: socketRead bufsize = 16384
D / libnav: socketRead bufsize = 32768
D / libnav: socketRead bufsize = 65536
D / libnav: socketRead bufsize = 131072
D / libnav: socketRead bufsize = 262144
D / libnav: socketRead bufsize = 524288

Наконец, buf_size для socketRead увеличивается и в конечном итоге

A / libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x440 in tid 19369 (Thread-21565)

Я получаю эту ошибку.

Я хочу сделать другую гибкую обработку вместо сбоя. Мне нужна помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...