Gần đây tôi đã cố gắng để nâng cấp các thư viện ffmpeg tôi sử dụng trong ứng dụng Mac OS X của tôi bằng cách tải về và biên dịch ffmpeg từ nguồn.ffmpeg biên dịch vấn đề: avcodec_find_decoder luôn luôn trả về null
Mã của tôi hoạt động đúng với thư viện được biên dịch trước của cùng một phiên bản trên cửa sổ. Trên Mac OS X, thư viện có vẻ hoạt động (nó có thể mở tệp và tìm các luồng và codec được sử dụng), nhưng khi nó được chuyển tới avcodec_find_decoder, hàm này luôn trả về giá trị rỗng.
Mã này đã làm việc với một phiên bản cũ của thư viện (biên soạn một năm trước trên Mac OS X 10.5)
tôi cấu hình fmpeg sử dụng
./configure --extra-cflags="-arch i386" --extra-ldflags='-arch i386' --arch=x86_32 --target-os=darwin --enable-cross-compile --disable-indev=jack --enable-shared --disable-static
Tôi đã kiểm tra config.mak, và nó xuất hiện để có bộ giải mã cho các loại tập tin tôi đã thử bật (ogg, vorbis, avi, mkv, ...) Tôi cũng đã kiểm tra xem các tập tin tiêu đề chính xác đã được sử dụng chưa và thư viện mới được biên dịch đã được sử dụng chưa.
Tôi đã tìm thấy chỉ có một số bài viết cũ liên quan đến vấn đề này, nhưng không có bất kỳ giải pháp:
http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2007-January/021399.html
http://libav-users.943685.n4.nabble.com/avcodec-find-decoder-problem-td944800.html
Chỉnh sửa: kiểm tra hơn nữa, nó xuất hiện av_codec_next (NULL) trả về null cũng , có nghĩa là không có một codec duy nhất có sẵn, hoặc rằng first_avcodec trong utils.c không được thiết lập (tôi thực sự đã không tìm thấy ở tất cả các nơi mà biến này được thiết lập, tôi đã giả định av_register_all, nhưng tôi không thể tìm thấy nó đó)
Điều đó thực sự trông giống như một lỗi. Tôi không nghĩ rằng các tiêu chuẩn c đảm bảo rằng khởi tạo sẽ là 0? Vì vậy, static int initialized = 0; sẽ là cách chính xác để thực hiện. – Adion
@Adion Có, tiêu chuẩn C không khởi tạo biến int tĩnh thành số không nếu chúng không được khởi tạo một cách rõ ràng. Tuy nhiên, [ở đây] (http://stackoverflow.com/questions/1294772/does-gcc-automatically-initialize-static-variables-to-zero) nói thêm ... – Daniel
Ok, tôi thực sự không còn gọi avcodec_register_all nữa(), do đó, bất cứ điều gì đã sai dường như đã được cố định trong 5 năm kể từ khi tôi hỏi câu hỏi. – Adion