ffmpegをリンク可能なlibraryに変更
一、事件の原因:
最近、オーディオフォーマットの変換が必要なプロジェクトがあります.機能を満たす必要があります.
1. amr <--> wav
2. amr <--> mp3
3.インタフェースとダイナミックライブラリの形式で上の1と2の機能を提供する
ネットで長い間検索していたが、適当なlibraryは見つからなかった.
探しているうちにffmpegは1と2の機能を実現できることが分かったが、3の機能を満たしていないため、ffmpegをlibraryに改造する考えがあった.
二、改造の手順:
1.必要なパラメータを抽出する:-ab,-ar,-ac,-acodec;
2.1のパラメータに基づいて、対応するインタフェースを作成します.like this:
4.makefileファイルを作成し、実行可能ファイルを生成した論理を動的リンクライブラリを生成するように変更します.
三、出会った問題:
1.ffmpegプログラムをデバッグする必要があるため、最適化されていないプログラムをコンパイルしたい場合は、「disable-optimizations」ではコンパイルに成功することはできません.ソースコードを修正したり、confiureオプションを調整したりする必要があります.
2.回り道をしました:ffmpegの多くのソースコードを修正して、友达@baoxueの注意を経て、修正戦略を変更しました;
3.ffmpegコードにはexitを直接呼び出すことが多く、呼び出しプロセスがサーバプロセスである可能性があるため、呼び出しプロセスが予期せず終了する問題が深刻です.この問題は,スレッドを作成し,オンラインスレッド内でフォーマット変換を処理することによって,最終的にこの問題を解決した.
四、コード
コードはOKですが、性能はテストされていないので、貼り付けられません.
TODO:性能テストに合格すると、コードリンクが貼られます.
最近、オーディオフォーマットの変換が必要なプロジェクトがあります.機能を満たす必要があります.
1. amr <--> wav
2. amr <--> mp3
3.インタフェースとダイナミックライブラリの形式で上の1と2の機能を提供する
ネットで長い間検索していたが、適当なlibraryは見つからなかった.
探しているうちにffmpegは1と2の機能を実現できることが分かったが、3の機能を満たしていないため、ffmpegをlibraryに改造する考えがあった.
二、改造の手順:
1.必要なパラメータを抽出する:-ab,-ar,-ac,-acodec;
2.1のパラメータに基づいて、対応するインタフェースを作成します.like this:
int convert(char* inflie, char* outfile, char* ab, char* ar, char* ac, char* acodec, char* err_msg);
3. 2のインタフェースを実装する.4.makefileファイルを作成し、実行可能ファイルを生成した論理を動的リンクライブラリを生成するように変更します.
三、出会った問題:
1.ffmpegプログラムをデバッグする必要があるため、最適化されていないプログラムをコンパイルしたい場合は、「disable-optimizations」ではコンパイルに成功することはできません.ソースコードを修正したり、confiureオプションを調整したりする必要があります.
2.回り道をしました:ffmpegの多くのソースコードを修正して、友达@baoxueの注意を経て、修正戦略を変更しました;
3.ffmpegコードにはexitを直接呼び出すことが多く、呼び出しプロセスがサーバプロセスである可能性があるため、呼び出しプロセスが予期せず終了する問題が深刻です.この問題は,スレッドを作成し,オンラインスレッド内でフォーマット変換を処理することによって,最終的にこの問題を解決した.
四、コード
コードはOKですが、性能はテストされていないので、貼り付けられません.
TODO:性能テストに合格すると、コードリンクが貼られます.