【问题标题】:android ffmpeg error fatal signal 11android ffmpeg错误致命信号11
【发布时间】:2015-02-06 19:57:48
【问题描述】:

我在 Android 上使用 ffmpeg。并使用 RTSP 网络摄像头。

我推荐here.

我得到了很好的视频。

但我在结束视频时收到错误消息。

Fatal signal 11 (SIGSEGV) at 0x8a7c0d04 (code=1), thread 2537 (Thread-13225)

所以我使用日志发现了错误。但是我不知道为什么会发生错误。

下面的代码是错误的位置。

void closeMovie(){
  av_read_pause(gFormatCtx);
  if (gVideoBuffer != NULL) {
    free(gVideoBuffer);
    gVideoBuffer = NULL;
  }
  if (gFrame != NULL)
      av_free(gFrame);
  if (gFrameRGB != NULL)
      av_free(gFrameRGB);
  if (gVideoCodecCtx != NULL) {
      avcodec_close(gVideoCodecCtx);
      av_free(gVideoCodecCtx);
      gVideoCodecCtx = NULL;
  }
  if (gFormatCtx != NULL) {
      **av_close_input_file(gFormatCtx);** //here
      gFormatCtx = NULL;
  }
}

void av_close_input_file(AVFormatContext *s)
{
  AVIOContext *pb = (s->iformat->flags & AVFMT_NOFILE) || (s->flags & AVFMT_FLAG_CUSTOM_IO) ?
                   NULL : s->pb;
  **av_close_input_stream(s);**// here
  if (pb)
    avio_close(pb);
}

void av_close_input_stream(AVFormatContext *s)
{
    flush_packet_queue(s);
    if (s->iformat->read_close)
       **s->iformat->read_close(s);** //here
    avformat_free_context(s);
}

如果//s->iformat->read_close(s); 没有崩溃

但我无法再次打开视频。再次打开视频我必须退出应用程序。

对不起,我的英语说得不太好。 感谢阅读。

ps1。日志猫

12-10 10:08:02.991: D/TAG(21770): TAG - closeMovie1 - in
12-10 10:08:02.991: D/TAG(21770): TAG - avcodec_close - in
12-10 10:08:02.991: D/TAG(21770): av_opt_free - on
12-10 10:08:02.991: D/TAG(21770): av_opt_free - out
12-10 10:08:02.991: D/TAG(21770): TAG - avcodec_close - out
12-10 10:08:02.991: D/TAG(21770): TAG - av_close_input_file - in
12-10 10:08:02.991: D/TAG(21770): TAG - avformat_close_input - in
12-10 10:08:02.991: D/TAG(21770): TAG - flush_packet_queue - 
12-10 10:08:02.991: D/TAG(21770): flush_packet_queue - on
12-10 10:08:02.991: D/TAG(21770): flush_packet_queue - out
12-10 10:08:02.991: D/TAG(21770): TAG - s->iformat->read_close : 0
12-10 10:08:02.991: D/TAG(21770): TAG - avformat_free_context 
12-10 10:08:02.991: D/TAG(21770): TAG - avformat_free_context - in
12-10 10:08:02.991: D/TAG(21770): av_opt_free - on
12-10 10:08:02.991: D/TAG(21770): av_opt_free - out
12-10 10:08:02.991: D/TAG(21770): av_opt_free - on
12-10 10:08:02.991: D/TAG(21770): av_opt_free - out
12-10 10:08:02.991: D/TAG(21770): TAG - avformat_for_length s->nb_streams - 3
12-10 10:08:02.991: D/TAG(21770): TAG - avformat_for_nb_streams - in
12-10 10:08:02.991: D/TAG(21770): TAG - avformat_for_ nb_streams - out
12-10 10:08:02.991: D/TAG(21770): TAG - avformat_for_nb_streams - in
12-10 10:08:02.991: D/TAG(21770): TAG - avformat_for_ nb_streams - out
12-10 10:08:02.991: D/TAG(21770): TAG - avformat_for_nb_streams - in
12-10 10:08:02.991: D/TAG(21770): TAG - avformat_for_ nb_streams - out
12-10 10:08:02.991: D/TAG(21770): TAG - avformat_for_length s->nb_programs-1 - -1
12-10 10:08:02.991: D/TAG(21770): TAG - freep 1
12-10 10:08:02.991: D/TAG(21770): TAG - freep 2
12-10 10:08:02.991: D/TAG(21770): TAG - while
12-10 10:08:02.991: D/TAG(21770): TAG - freep 3
12-10 10:08:02.991: D/TAG(21770): TAG - dict_free 1
12-10 10:08:02.991: D/TAG(21770): TAG - freep 4
12-10 10:08:02.991: D/TAG(21770): TAG - freep 3
12-10 10:08:02.991: D/TAG(21770): TAG - avformat_free_context - out
12-10 10:08:02.991: D/TAG(21770): TAG - avio_close - in
12-10 10:08:02.991: D/TAG(21770): TAG - avio_close - 1
12-10 10:08:02.991: D/TAG(21770): TAG - avio_close - 2
12-10 10:08:02.991: D/TAG(21770): TAG - avio_close - out
12-10 10:08:02.991: D/TAG(21770): TAG - avio_close(pb) : 0
12-10 10:08:02.991: D/TAG(21770): TAG - avio_close - in
12-10 10:08:02.991: D/TAG(21770): TAG - avio_close - 1
12-10 10:08:02.991: D/TAG(21770): TAG - avio_close - 2
12-10 10:08:02.991: D/TAG(21770): TAG - avio_close - out
12-10 10:08:02.991: D/TAG(21770): TAG - avformat_close_input - out
12-10 10:08:02.991: D/TAG(21770): TAG - av_close_input_file - out
12-10 10:08:02.991: D/TAG(21770): TAG - closeMovie1 - out
12-10 10:08:03.151: D/AbsListView(21770): onVisibilityChanged() is called, visibility : 0
12-10 10:08:03.151: D/AbsListView(21770): unregisterIRListener() is called 
12-10 10:08:03.201: D/AbsListView(21770): unregisterIRListener() is called 
12-10 10:08:03.221: D/AbsListView(21770): unregisterIRListener() is called 
12-10 10:08:03.241: A/libc(21770): Fatal signal 11 (SIGSEGV) at 0x8bb85698 (code=1), thread 21938 (Thread-23561)

ps2.日志的顺序。

(BasicPlayer.c) closeMovie in->
(utils.c) avcodec_close ->
(utils.c) av_close_input_file ->
(utils.c) avformat_close_input ->
(utils.c) flush_packet_queue ->
(utils.c) **s->iformat->read_close(s)** ->
(utils.c) avformat_free_context ->
(utils.c) avio_close(pb) ->
(BasicPlayer.c) closeMovie out

【问题讨论】:

    标签: android ffmpeg rtsp fatal-error


    【解决方案1】:

    感谢阅读。

    我必须解决。

    添加代码utils.c

    typedef struct {
        int audio_size;    /**< audio packet size (bytes) */
        int video_size;    /**< video packet size (bytes) */
        int palette_size;  /**< palette size (bytes) */
        int video_type;    /**< per-frame video compression type */
    } JVFrame;
    typedef struct {
         JVFrame *frames;
         enum {
             JV_AUDIO = 0,
             JV_VIDEO,
             JV_PADDING
         } state;
         int64_t pts;
    } JVDemuxContext;
    

    static int read_close(AVFormatContext *s)
    {
    
        JVDemuxContext *jv = s->priv_data;
        av_free(jv->frames);
        return 0;
    }
    

    并修改代码。

    void av_close_input_stream(AVFormatContext *s)
    {
        flush_packet_queue(s);
        if (s->iformat->read_close)
           //**s->iformat->read_close(s);** //here fixed --> 
           read_close(s);
        avformat_free_context(s);
    }
    

    我不知道为什么会产生错误。

    但是通过修改代码解决了。

    如果你有任何问题,我希望这会有所帮助。

    对不起,我的英语说得不太好。感谢阅读。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-12
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多