Tôi hiện đang tìm cách truy cập libavutil, libavformat và libavcodec (tất cả các phần của FFMpeg) từ .NET.Có một tập hợp các khai báo P/Invoke hoạt động cho FFMpeg, libavutil, libavformat và libavcodec trong .NET không?
Hiện tại, tôi nhận được libraries from the automated builds of the shared FFMpeg package được thực hiện mỗi đêm cho Windows 32 bit.
Tôi cũng đang sử dụng mã từ ffmpeg-sharp project. Trong dự án đó, tôi đã loại bỏ một số lớp không biên dịch (chúng là các lớp bao bọc chứ không phải các khai báo P/Invoke).
Mã biên dịch tốt, nhưng tôi đang gặp phải một số vấn đề.
Đầu tiên, có vẻ như việc xây dựng av * .dll sử dụng cdecl calling convention, vì tôi đã nhận được một số PInvokeStackImbalanceException
khi cố gắng gọi av_open_input_file
. Điều này là dễ dàng, đủ để thay đổi để làm cho nó hoạt động đúng. Cấu trúc AVFormatContext
được điền.
Sau đó, tôi muốn gọi av_find_stream_info
để nhận thông tin về các luồng trong tệp. Tuy nhiên, khi gọi điện thoại với số AVFormatContext
được truy lục từ cuộc gọi đến av_open_input_file
, một số AccessViolationException
được ném cho biết rằng tôi đang cố gắng đọc hoặc ghi từ bộ nhớ được bảo vệ.
Có ai đã sử dụng P/Gọi để truy cập vào các thư viện libavutil, libavformat và libavcodec dll thông qua P/Invoke và đã nhận nó hoạt động không?
Tôi nên đề cập rằng làm việc với phiên bản dòng lệnh của FFMpeg, trong khi giải pháp, không phải là giải pháp khả thi trong trường hợp này, quyền truy cập cần phải xảy ra thông qua thư viện. Lý do cho điều này là tôi sẽ phải đập đĩa quá nhiều để làm những gì tôi cần làm (tôi phải làm một phân tích từng khung hình của một số video độ nét rất cao) và tôi muốn tránh đĩa Càng nhiều càng tốt.
Re: disk thrashing mối quan tâm, tôi chỉ đạt được một số thành công với chụp ffmpeg đầu ra - có nội dung, không siêu dữ liệu - thông qua các đường ống stdout. Nếu điều này có thể phù hợp với kịch bản của bạn, không có tập tin và nó không trúng đĩa. –