Получить ошибку rtsp при повреждении соединения?

Я использую ffmpeg libavformat для записи RTSP-потока с камеры Panasonic. Я могу получить как аудио-, так и видеопоток от того, что все в порядке, пока между сервером и камерой не произойдет повреждение.

  • функция "av_read_frame" ничего не вернула. Я думаю, что она ждала получения кадра с камеры, но не может из-за поврежденного соединения. Я ожидал, что эта функция должна завершить свою задачу и вернуть ошибку (сбой соединения или что-то в этом роде), но это не так и застряло навсегда.
  • та же проблема с функцией "avformat_open_input" при повреждении соединения. Следовательно, левые функции не могут быть обработаны

Любой может объяснить мне, в чем проблема и что не так с моим кодом. Как я могу избежать тупика для этого случая.

(Среда: Win 7, VS 2010, FFMPEG: 20130227-git-5d2f2c7, сеть LAN)

    int main(int argc, char** argv)
{

    AVFormatContext* context = avformat_alloc_context();
    int video_stream_index;

    av_register_all();
    avcodec_register_all();
    avformat_network_init();

    //open rtsp
    if(avformat_open_input(&context, "rtsp://username:12345/192.168.1.253:554/mpeg4/640x480",NULL,NULL) != 0)
    {
        return EXIT_FAILURE;
    }

    if(avformat_find_stream_info(context,NULL) < 0)
    {
        return EXIT_FAILURE;
    } 
    AVPacket packet;
    av_init_packet(&packet);
    //start reading packets from stream and write them to file

    while(av_read_frame(context,&packet))
    {
       //Store packet here
    }
    av_free_packet(&packet);
    return (EXIT_SUCCESS);
}

person vominhtien961476    schedule 09.09.2013    source источник


Ответы (1)


Вы используете обратный вызов прерывания ffmpeg, чтобы добавить таймауты к этим функциям, см. также этот вопрос.

person Mike Versteeg    schedule 09.09.2013
comment
Хорошо, спасибо за вашу помощь! Теперь я могу управлять кодом с обратным вызовом прерывания. - person vominhtien961476; 10.09.2013