14

私のアプリはHLSを使用してサーバーからビデオをストリーミングしますが、サーバーからHLSストリームを要求するときは、デバイスが処理できる最大ビデオビットレートを渡す必要があります。Android APIガイドには、「デバイスで利用可能なビデオ録画プロファイルをメディア再生機能のプロキシとして使用できる」と記載されていますが、デバイスの背面カメラのvideoBitRateを取得しようとすると、常に12Mb/sとして返されます。デバイス(Galaxy Nexus、Galaxy Tab Plus 7 "、Galaxy Tab 8.9)に関係なく、3つの異なるGPU(PowerVR SGX540、Mali-400 MP、Tegra 250 T20)があるにもかかわらず、これが私のコードです。間違い?

CamcorderProfile camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
targetVideoBitRate = camcorderProfile.videoBitRate;

Galaxy Tab Plusでこれを試してみると:

boolean hasProfile = CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_HIGH);

QUALITY_HIGHは1080p録画用であり、仕様では720pでしか録画できないとされているにもかかわらず、Trueを返します。

4

1 に答える 1

8

自分の質問に対する答えを見つけたようです。

ドキュメントを十分に読んでいませんでした。QUALITY_HIGHは1080pと同等ではなく、デバイスがサポートする最高品質のプロファイルを指定する方法にすぎません。したがって、定義上、CamcorderProfile.hasProfile( CamcorderProfile.QUALITY_HIGH )常に真です。私はこのようなものを書くべきでした:

public enum mVideoQuality { 
    FullHD, HD, SD
}
mVideoQuality mMaxVideoQuality;
int mTargetVideoBitRate;

private void initVideoQuality {
    if ( CamcorderProfile.hasProfile( CamcorderProfile.QUALITY_1080P ) ) {
        mMaxVideoQuality = mVideoQuality.FullHD;
    } else if ( CamcorderProfile.hasProfile( CamcorderProfile.QUALITY_720P ) ) {
        mMaxVideoQuality = mVideoQuality.HD;
    } else {
        mMaxVideoQuality = mVideoQuality.SD;
    }
    CamcorderProfile cProfile = CamcorderProfile.get( CamcorderProfile.QUALITY_HIGH );
    mTargetVideoBitRate = cProfile.videoBitRate;
}

私のデバイスのほとんどはまだ1080pエンコーディングのサポートを報告していますが、これは私が懐疑的ですが、このコードをSony Experia Tipo(私のローエンドテストデバイス)で実行したところ、最大エンコード品質は480p、videoBitRateは720Kbでした。 /s。

私が言ったように、すべてのデバイスが信頼できるかどうかはわかりませんが、720Kb/sから17Mb/sまでのビデオビットレートの範囲と、480pから1080pまでのプロファイル品質を見てきました。うまくいけば、他の人がこの情報が役立つと思うでしょう。

于 2013-07-16T02:26:46.873 に答える