最近のピット間のプロジェクト:早期のAPPのビデオリストを取得する時に、ビデオの長さを取得する必要がありますが、データベースのアップロード、長いフィールドを追加するので、いくつかの時間前に、あなたがアップロードしたときに、手動で映像を入力するのに長い時間を、データを保存していませんライブラリは、1つを手動で入力する場合は、この情報を持っていないデータの数千人を持って前にしかし、人々は怒ってする必要があります。だから、誰がするときがその空虚への長い前の映像情報、この壊れたものかどうかは言及しません。最近、私は、ビデオ、およびリーダーシップにより、統計情報の長期カテゴリ分類することにつながることは0を行うためのプロセスを置くために、問題ではなく、根本的な解決を反映しています。この機能が完了すると、私は考えていたどのような方法することができ、ビデオの長全てまでの更新前。これは確かに手動で入力するための時間ではありません、あなたが戻って入院時にJavaのを持っている必要があります。しかし、多数の記事インターネット検索は、最後の方法は、まずローカルにダウンロードしなければならない唯一のJava実装した後、一つずつトラバーサルクエリで使用することができます。サーバー上のビデオを見て数万人は、この方法では、人々は、頭皮のヒリヒリ感を考えるようにします。
私たちは、実現可能な方法を見つけるが、基本的javeでビデオ情報を取得できませんでしたが。だから、jave公式APIを見に行くプロセスFFmpegのマルチメディアファイルを介して学習した後、彼らはFFmpegのAPIを参照してください、私はコマンドラインでのffmpegを使用したときの映像がurlで得ることができることを見出しました。しかし、あなたはMultimediaInfo、着信ファイルjaveの使用ツールキットを入手する必要がありますが、彼らは、URLのファイルを作成することはできません。だから、ソースからのjar jave手を逆コンパイルします。
//源码
公共MultimediaInfo GETINFO(ファイルソース) スローInputFormatException、EncoderException { FFMPEGExecutorのffmpegのを、 ffmpegの = locator.createExecutor()。 ffmpeg.addArgument( "-i" ); ffmpeg.addArgument(source.getAbsolutePath())。 試す { ffmpeg.executeを(); } キャッチ(IOExceptionを電子) { スロー 新しいEncoderException(E); } MultimediaInfo multimediainfo。 RBufferedReaderリーダ = NULL ; リーダー = 新しい RBufferedReader(新しいInputStreamReaderの(ffmpeg.getErrorStream()))。 multimediainfo = parseMultimediaInfo(ソース、リーダー)。 ffmpeg.destroy(); 返すmultimediainfo; 例外例外。 例外; ffmpeg.destroy(); 投げる例外を。 }
入ってくるパラメータを使用すると、ffmpegのです
source.getAbsolutePathは(絶対ファイルパスを取得)、ファイルで作成されたURLは、このプロジェクトで取得しているので、パス+ URLです。
次に置く入ってくる経路変更は、URLとなりましたが、操作はまだそこにInputFormatException例外です。さて、その後、すべての権利を探し続けます
その後、デバッグは、改訂されたパスが、しかし、このパスはよく見ていないことがわかりました
http://v1.v.123.com \ 11 \ 919 \ 2019 \のZBの\の0181.mp4
正しいURLは次のようになります。http://v1.v.123.com/11/919/2019/zb /0181.mp4
そして、問題を修正します。
もし(!path.indexOf( "HTTP")= -1 ){ パス = source.getPath()。 パス = path.split( ":")[0] + "://" + path.split( ":")[1](1 .substring )。 パス = path.replace( "\\"、 "/" )。 }
これは、最終的には何の問題、あなたは正常に使用することはできません。そして、彼らはパス値を変更する必要があり、ソースが異常情報を取得してあり、次の呼び出しこの方法があります
multimediainfo = parseMultimediaInfo(ソース、リーダー)。
また、これは、ちょうどOKで上記の操作を繰り返してください。これは完全にケリ。
輸入lx.jave.AudioAttributes。 輸入lx.jave.AudioInfo; 輸入lx.jave.Encoder。 輸入lx.jave.EncoderException。 輸入lx.jave.EncodingAttributes。 輸入lx.jave.InputFormatException。 輸入lx.jave.MultimediaInfo; 輸入lx.jave.VideoInfo; 輸入lx.jave.VideoSize。 / ** * jave多媒体工具类(需导出javeジャー包) * @author longxiong * * / パブリック クラスJaveToolsTest { 公共 静的 ボイドメイン(文字列[]引数)がスローInputFormatException、EncoderException、例外{ / ** *ローカルマルチメディア情報ファイルを取得します * / // エンコーダ エンコーダエンコーダ= 新しい新しいエンコーダ(); ファイルファイル = 新しい新しいファイル( "HTTP://*****018.mp4" ); // マルチメディア情報 MultimediaInfo情報= encoder.getInfo(ファイル); // 長い情報 の長い DURATION = info.getDuration(); System.out.printlnは( "ビデオの長さ:" +期間/ 1000 + "S" ); // オーディオ情報 AudioInfoオーディオ= info.getAudio(); int型= audio.getBitRateは、bitRate(); // ビットレート のintチャネルaudio.getChannels =(); // チャネル 列デコーダaudio.getDecoder =(); // 復号器 INT SRATE = audio.getSamplingRate(); // サンプリングレート のSystem.out.println( "デコーダ" +デコーダ+ "チャンネル" +チャネル+ "ビットレート" +は、bitRate + "サンプリングレート:" + SRATE); // ビデオ VideoInfoビデオ= info.getVideo(); int型ビットレート2 = video.getBitRate(); フロートFRATE = video.getFrameRate(); // フレームレート videoSize videoSize =video.getSize(); int型高さ= videoSize.getHeight(); // ビデオの高さ int型の幅= videoSize.getWidth(); // ビデオの幅 するSystem.out.println( "ビデオのフレームレート:" + FRATE +」、ビットレート: "+ bitRate2 +"、映像の高さ: "+高さ+"、映像の幅:「+ 幅); } }
それは、変更することは比較的簡単ですが、修正またはjarバッグを取り付けます。
リンクします。https://pan.baidu.com/s/1SpUFZ6DOiJusXZuTG_Qs6Aの
抽出コード:csh0