私は現在、.NETからlibavutil、libavformat、libavcodec(すべてFFMpegの一部)にアクセスしようとしています。
現在、 Windows32ビット用に毎晩実行される共有FFMpegパッケージの自動ビルドからライブラリを取得しています。
ffmpeg-sharpプロジェクトのコードも使用しています。そのプロジェクトでは、コンパイルされていなかったいくつかのクラスを削除しました(これらは、P / Invoke宣言ではなくラッパークラスです)。
コードは正常にコンパイルされますが、いくつかの問題が発生しています。
まず、av * .dllのビルドでは、cdecl呼び出し規約PInvokeStackImbalanceException
を使用しているようです。これは、を呼び出そうとしたときにいくつかの呼び出し規約を受け取っていたためav_open_input_file
です。これは、正しく機能させるために変更するのに十分簡単でした。AVFormatContext
構造にデータが入力されます。
その後av_find_stream_info
、ファイル内のストリームに関する情報を取得するために呼び出したいと思います。ただし、AVFormatContext
への呼び出しから取得したものを使用してそれを呼び出すと、保護されたメモリから読み取りまたは書き込みを行おうとしていることを示すav_open_input_file
anがスローされます。AccessViolationException
誰かがP/Invokeを使用して、P / Invokeを介してlibavutil、libavformat、およびlibavcodec dllライブラリにアクセスし、それを機能させましたか?
コマンドラインバージョンのFFMpegを使用することは、解決策ではありますが、この場合は実行可能な解決策ではありませんが、ライブラリを介してアクセスする必要があります。この理由は、必要なことを実行するにはディスクをあまりにも多くスラッシングする必要があり(非常に高解像度のビデオのフレームごとの分析を実行する必要があります)、ディスクを避けたいためです。できるだけ。