5分のJAVAコードが教えてくれる:FFmpegがビデオの試用を実現
1.ビジネスシナリオ
知識に対する支払いの時代の到来により、オンライン学習プラットフォームが立ち上がっており、あらゆる規模の企業がオンライン学習プラットフォームを開発しているため、次のニーズが発生します:コース動画デモ機能。
Windows版についてはこちらをクリックしてください:
5分のコードが教えてくれます:JAVAがビデオデモ機能を実現します(ウィンドウ版)
PS:(このブログで使用されているコード、ffmpegインストールパッケージ、およびcmdコマンドラインツールは、ダウンロードして参照できるように、パッケージ化されて↓↓↓↓の添付ファイルに配置されます。)
FFmpegDemoをダウンロードするにはクリックしてください
2.実装のアイデア
プラットフォームユーザーが自分のコースをアップロードした後、サーバーはコースビデオの短いセグメントをインターセプトして保存します(たとえば、ビデオコンテンツの最初の30秒をトライアルコンテンツとしてインターセプトします)。したがって、ユーザーが動画をアップロードした後、サーバーでの処理後に2つの動画(1.元の動画2.試用動画)が生成されます。通常のユーザーはビデオにアクセスして試用ビデオを再生し、有料ユーザーはビデオにアクセスして元のビデオを再生します。
3. FFmpegオープンソースフレームワークの概要
ここでは、Javaを使用してFFmpegを呼び出してビデオとオーディオを処理します。これは、システムにFFmpegを手動でインストールし、呼び出すコマンドを実行することによって実装されます。
FFmpeg公式ウェブサイト:http : //ffmpeg.org/
(FFmpeg Readme:ビデオとオーディオの変換がとても簡単になりました!)
4. Centos7環境の実装
4.1公式ウェブサイトからLinuxをダウンロードしてアップロードする
以下に示すように、http://ffmpeg.org/download.html#releasesからLinuxバージョンの圧縮パッケージffmpeg-4.2.4.tar.bz2をダウンロードします。
ツールを使用して、ダウンロードしたFFmpeg圧縮パッケージをLinuxにアップロードします。ここでは、SecureCRTを使用してアップロードします。
4.2解凍してインストールする
1.下図に示すように、インストールディレクトリ/ usr / ffmpegを入力します。
圧縮パッケージを解凍し、下図に示すようにエラーが報告された場合はtar -jxvf ffmpeg-4.2.4.tar.bz2を使用します
。2.上図に問題がある場合は、bzip2をインストールすると
プロンプトが表示されます:Bzip2:実行できません:そのようなファイルまたはディレクトリはありません。
理由:bzip2パッケージをインストールする必要があります。
解決策:yum install -y bzip2
3.インストールが成功したら、以下に示すように、tar -jxvf ffmpeg-4.2.4.tar.bz2を正常に実行できます。
4.次の図に示すように、解凍ディレクトリを入力してyasmをインストールします。
プロンプトが表示されたら、次の図に示すように「y」を選択します
。5.インストール後にコマンドを実行します。
./configure --enable-shared --prefix=/usr/ffmpeg
6.ここで30分待機したmakeコマンドを実行します(辛抱強く待ってください
。)7.図
8に示すように、make installコマンドを実行します(インストール)。/etc / ld.so.confファイルを変更します。
[root@vmsp ffmpeg-4.2.4]# vi /etc/ld.so.conf
以下に示すように、/ usr / ffmpeg / lib /を追加し
ます。9. ldconfigを実行して有効にします。
[root@vmsp ffmpeg-4.2.4]# ldconfig
10.環境変数を設定する
vi / etc / profileコマンドを使用してプロファイルファイルを開き、ファイルの最後に環境変数を追加します。
PATH=$PATH:/usr/ffmpeg/bin
export PATH
source / etc / profileを実行して有効にします
11.設定が成功したかどうかを確認します
4.2 Javaがffmpegビデオのスクリーンショットを呼び出す
ここではデモを提供します。それをツールメソッドにカプセル化し、プロジェクトで呼び出すことができます。
/**
* @Author : zhangS
* @Date :2020-08-18
*/
public class ExeclLinuxCMD {
/**
* 根据名称截取目标视频,生成试看视频
* @param timeLength 截取时长
* @param oldVideoName 原视频名
* @param newVideoName 试看视频名称
* @return
*/
public static Object exec(Integer timeLength,String oldVideoName,String newVideoName) {
String cmd = "ffmpeg -ss 0:0:0 -t 0:0:"+timeLength+" -i /usr/ffmpeg/"+oldVideoName+" -vcodec copy -acodec copy /usr/ffmpeg/"+newVideoName;
try {
String[] cmdA = {
"/bin/sh", "-c", cmd };
Process process = Runtime.getRuntime().exec(cmdA);
LineNumberReader br = new LineNumberReader(new InputStreamReader(
process.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
sb.append(line).append("\n");
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
//String netsString = exec("netstat -nat|grep -i 80").toString();
exec(50,"test.mp4","test2.mp4");
System.out.println("==========execute success=============");
}
}
4.3エフェクト表示
ユーザーがビデオをアップロードした後、サーバーは、次に示すように、ffmpegを呼び出してビデオをインターセプトすることにより、トライアルビデオを生成します。
4.4プロジェクトへの統合
ユーザーはバックグラウンドでビデオをアップロードし、FFmpegで2つのコピーを生成します。このページでは、ユーザーのビジネス上の判断を行い、対応するビデオを再生するだけです。
デモ動画を
再生:動画全体を再生:
5.テクニカルポイント分析
このブログは、主にビデオ試用機能のデム編集用ですが、ビデオ試用の開発シーンに遭遇した際に参考にできるソリューションを他の開発者が利用できるウィンドウズ下でのビデオ傍受操作も提供します。
FFmpegフレームワークには他にも多くのストリーミングメディア処理関数がありますが、ここではビデオインターセプトメソッドの実装に焦点を当てます。このブログは、FFmpegをシステムに手動でインストールし、Javaでコマンドラインを直接実行することで実装されています。