Ich bin derzeit auf der Suche nach libavutil, libavformat und libavcodec (alles Teil von FFMpeg) von .NET zugreifen.Gibt es in .NET eine Reihe funktionierender P/Invoke-Deklarationen für FFMpeg, libavutil, libavformat und libavcodec?
Derzeit bekomme ich die libraries from the automated builds of the shared FFMpeg package jede Nacht für Windows 32-Bit durchgeführt.
Ich verwende auch den Code aus der ffmpeg-sharp project. In diesem Projekt habe ich eine Reihe von Klassen entfernt, die nicht kompiliert wurden (sie sind Wrapperklassen, nicht die P/Invoke-Deklarationen).
Der Code kompiliert gut, aber ich habe ein paar Probleme.
Zuerst scheint es, dass der Build von av * .dll die cdecl calling convention verwendet, da ich eine Nummer von PInvokeStackImbalanceException
empfing, wenn ich versuche, av_open_input_file
aufzurufen. Das war leicht genug, um es richtig arbeiten zu lassen. Die Struktur AVFormatContext
ist ausgefüllt.
Danach möchte ich av_find_stream_info
anrufen, um Informationen über die Streams in der Datei zu erhalten. Beim Aufruf mit der AVFormatContext
abgerufen von dem Aufruf an av_open_input_file
wird jedoch eine AccessViolationException
ausgelöst, die angibt, dass ich versuche, aus dem geschützten Speicher zu lesen oder zu schreiben.
Hat jemand P/Invoke verwendet, um auf die Bibliotheken libavutil, libavformat und libavcodec dll über P/Invoke zuzugreifen und es zum Laufen gebracht zu haben?
Ich sollte erwähnen, dass die Arbeit mit der Befehlszeilenversion von FFMpeg, während eine Lösung, in diesem Fall keine praktikable Lösung ist, Zugriff über die Bibliotheken erfolgen muss. Der Grund dafür ist, dass ich die Festplatte viel zu sehr durchdrehen muss, um das zu tun, was ich tun muss (ich muss eine Frame-für-Frame-Analyse von einigen sehr hochauflösenden Videos machen) und ich möchte die Festplatte vermeiden so viel wie möglich.
Re: Festplatte Thrashing betrifft, habe ich nur etwas Erfolg mit der Erfassung ffmpeg Ausgang - ja Inhalt, nicht Metadaten - über die Stdout Rohr erreicht. Wenn dies zu Ihrem Szenario passt, gibt es keine Datei und es trifft nicht auf die Festplatte. –