본문 바로가기
기타

ffserver segmentation fault 문제 (16.11.28)

by Joseph.Lee 2016. 11. 28.

2016년 11월 28일 오늘 기준,

https://github.com/FFmpeg/FFmpeg 에서 ffmpeg소스를 다운받아 컴파일하고

ffserver을 사용하려고 하면 오류가 난다.


예를들어 http://127.0.0.1/status.html등 ffserver.conf에서 Stream Url으로 지정한 곳에 들어가면 그 즉시

Segmentation fault가 뜨며 ffserver가 죽어버린다...


status page에 들어간다고 하면...

ffserver.c의 compute_status함수에 진입하고

ffserver.c:1993   AVCodec *codec = avcodec_find_encoder(st->codecpar->codec_id);

에서 문제가 발생한다.


st->codecpar가 NULL이기 때문인데, AVStream구조체에서 codec는 deprecated된 상태이고,

이 대신 codecpar을 쓸 것을 권장하고 있다.


디버깅을 해 보면 st->codec는 정상적으로 값이 들어가 있는데 codecpar은 NULL이다...


codec을 설정해주는 곳은 ffserver_config.c에서 add_codec함수인데

static void add_codec(FFServerStream *stream, AVCodecContext *av, FFServerConfig *config)


ffserver_config.c:322의 st->codec = av; 이 부분! codec는 설정하는데 codecpar은 처리하지 않는다...



아무래도 codec을 codecpar으로 변경하는 과정에서 ffserver.c는 수정되었지만 아직 ffserver_config는 수정되지 않은듯 하다.

(왜 이렇게 하지??? 같이 수정하지 않고...)


* 결국 ffmpeg의 release/3.2 branch을 이용해서 컴파일하고있다...


git clone -b "release/3.2" https://github.com/FFmpeg/FFmpeg.git

* release/3.2도 문제가 발생한다.. 단 해결방법이 있다.


ffserver.c:3000에 이걸 추가하면 된다.


stream->streams[i]->codecpar = avcodec_parameters_alloc(); // 이 라인 추가

avcodec_parameters_from_context(stream->streams[i]->codecpar, stream->streams[i]->codec);

반응형

댓글