2012-01-02 15 views
1

私は、ウェブカメラからmp4ファイル(H264)にリアルタイムでビデオをエンコードするC++ライブラリを持っています。次のように私が持っている設定は、次のとおりです。Androidで再生するためにffmpegでビデオをエンコードする方法は?

codecContex->profile=FF_PROFILE_H264_BASELINE; //Baseline 
    codecContex->gop_size=250; 
    codecContex->max_b_frames=0; 
    codecContex->max_qdiff=4; 
    codecContex->me_method=libffmpeg::ME_HEX; 
    codecContex->me_range=16; 
    codecContex->qmin=10; 
    codecContex->qmax=51; 
    codecContex->qcompress=0.6; 
    codecContex->keyint_min=10; 
    codecContex->trellis=0; 
    codecContex->level=13; //Level 1.3 
    codecContex->weighted_p_pred = 2; 
    codecContex->flags2|=CODEC_FLAG2_WPRED+CODEC_FLAG2_8X8DCT; 

これは、iOSデバイスとWindows Phoneで7つのデバイスではなく、Androidデバイスで再生MP4ファイルを作成します。私は、Androidはベースラインプロファイルでエンコードされた映画のみをサポートしていると読んでいます。これらの設定ではベースラインムービーが生成されるはずですが、生成されたMP4ファイルをMediaInfoで見るとAVC(High @ L1.3)と表示されます。その後

codecContex->flags2|=CODEC_FLAG2_WPRED+CODEC_FLAG2_8X8DCT; 

:私は最後の行を削除する場合これは...

なぜそれが動作していないが、私はそれはAVC([email protected])で何かを生成するように見えることはできませんかもしれませんMediaInfoはそのファイルを代わりに "AVC(Main @ L1.3)"としてレポートしますが、これらのフラグはベースラインプロファイルの一部です!

答えて

2

私はそれを次のオプションを使用して、ベースラインのエンコードました:

codecContex->coder_type = 0; 
    codecContex->flags|=CODEC_FLAG_LOOP_FILTER; 
    codecContex->profile=FF_PROFILE_H264_BASELINE; //Baseline 
    codecContex->scenechange_threshold = 40; 
    codecContex->gop_size=250; 
    codecContex->max_b_frames=0; 
    codecContex->max_qdiff=4; 
    codecContex->me_method=7; 
    codecContex->me_range=16; 
    codecContex->me_cmp|= 1; 
    codecContex->me_subpel_quality = 6; 
    codecContex->qmin=10; 
    codecContex->qmax=51; 
    codecContex->qcompress=0.6; 
    codecContex->keyint_min=25; 
    codecContex->trellis=0; 
    codecContex->level=13; //Level 1.3 
    codecContex->refs = 1; 
    codecContex->weighted_p_pred = 0; 
    codecContex->crf = 20.0f; 
    codecContex->flags2|=CODEC_FLAG2_BPYRAMID-CODEC_FLAG2_WPRED-CODEC_FLAG2_8X8DCT; 

を...ビデオは文句を言わないHTML5のvideo要素で再生ができますが、ブラウザで直接mp4ファイルをロードするかどうか。ムービーの幅は480ピクセル以下でなければなりません。

関連する問題