JAVAは、URLリンクで(ファイルをダウンロードしなくても)、ビデオファイルの情報を取得します

  最近のピット間のプロジェクト:早期の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 

 

おすすめ

転載: www.cnblogs.com/qq545505061/p/11224871.html