package com.kwai.video.player; import android.os.Bundle; import android.text.TextUtils; import java.util.ArrayList; import java.util.Iterator; import java.util.Locale; public class KsMediaMeta { public static final long AV_CH_BACK_CENTER = 256; public static final long AV_CH_BACK_LEFT = 16; public static final long AV_CH_BACK_RIGHT = 32; public static final long AV_CH_FRONT_CENTER = 4; public static final long AV_CH_FRONT_LEFT = 1; public static final long AV_CH_FRONT_LEFT_OF_CENTER = 64; public static final long AV_CH_FRONT_RIGHT = 2; public static final long AV_CH_FRONT_RIGHT_OF_CENTER = 128; public static final long AV_CH_LAYOUT_2POINT1 = 11; public static final long AV_CH_LAYOUT_2_1 = 259; public static final long AV_CH_LAYOUT_2_2 = 1539; public static final long AV_CH_LAYOUT_3POINT1 = 15; public static final long AV_CH_LAYOUT_4POINT0 = 263; public static final long AV_CH_LAYOUT_4POINT1 = 271; public static final long AV_CH_LAYOUT_5POINT0 = 1543; public static final long AV_CH_LAYOUT_5POINT0_BACK = 55; public static final long AV_CH_LAYOUT_5POINT1 = 1551; public static final long AV_CH_LAYOUT_5POINT1_BACK = 63; public static final long AV_CH_LAYOUT_6POINT0 = 1799; public static final long AV_CH_LAYOUT_6POINT0_FRONT = 1731; public static final long AV_CH_LAYOUT_6POINT1 = 1807; public static final long AV_CH_LAYOUT_6POINT1_BACK = 319; public static final long AV_CH_LAYOUT_6POINT1_FRONT = 1739; public static final long AV_CH_LAYOUT_7POINT0 = 1591; public static final long AV_CH_LAYOUT_7POINT0_FRONT = 1735; public static final long AV_CH_LAYOUT_7POINT1 = 1599; public static final long AV_CH_LAYOUT_7POINT1_WIDE = 1743; public static final long AV_CH_LAYOUT_7POINT1_WIDE_BACK = 255; public static final long AV_CH_LAYOUT_HEXAGONAL = 311; public static final long AV_CH_LAYOUT_MONO = 4; public static final long AV_CH_LAYOUT_OCTAGONAL = 1847; public static final long AV_CH_LAYOUT_QUAD = 51; public static final long AV_CH_LAYOUT_STEREO = 3; public static final long AV_CH_LAYOUT_STEREO_DOWNMIX = 1610612736; public static final long AV_CH_LAYOUT_SURROUND = 7; public static final long AV_CH_LOW_FREQUENCY = 8; public static final long AV_CH_LOW_FREQUENCY_2 = 34359738368L; public static final long AV_CH_SIDE_LEFT = 512; public static final long AV_CH_SIDE_RIGHT = 1024; public static final long AV_CH_STEREO_LEFT = 536870912; public static final long AV_CH_STEREO_RIGHT = 1073741824; public static final long AV_CH_SURROUND_DIRECT_LEFT = 8589934592L; public static final long AV_CH_SURROUND_DIRECT_RIGHT = 17179869184L; public static final long AV_CH_TOP_BACK_CENTER = 65536; public static final long AV_CH_TOP_BACK_LEFT = 32768; public static final long AV_CH_TOP_BACK_RIGHT = 131072; public static final long AV_CH_TOP_CENTER = 2048; public static final long AV_CH_TOP_FRONT_CENTER = 8192; public static final long AV_CH_TOP_FRONT_LEFT = 4096; public static final long AV_CH_TOP_FRONT_RIGHT = 16384; public static final long AV_CH_WIDE_LEFT = 2147483648L; public static final long AV_CH_WIDE_RIGHT = 4294967296L; public static final String KSM_KEY_AUDIO_STREAM = "audio"; public static final String KSM_KEY_BITRATE = "bitrate"; public static final String KSM_KEY_CHANNEL_LAYOUT = "channel_layout"; public static final String KSM_KEY_CODEC_LEVEL = "codec_level"; public static final String KSM_KEY_CODEC_LONG_NAME = "codec_long_name"; public static final String KSM_KEY_CODEC_NAME = "codec_name"; public static final String KSM_KEY_CODEC_PIXEL_FORMAT = "codec_pixel_format"; public static final String KSM_KEY_CODEC_PROFILE = "codec_profile"; public static final String KSM_KEY_DURATION_US = "duration_us"; public static final String KSM_KEY_FORMAT = "format"; public static final String KSM_KEY_FPS_DEN = "fps_den"; public static final String KSM_KEY_FPS_NUM = "fps_num"; public static final String KSM_KEY_HEIGHT = "height"; public static final String KSM_KEY_HTTP_ANALYZE_DNS = "analyze_dns_time"; public static final String KSM_KEY_HTTP_CODE = "http_code"; public static final String KSM_KEY_HTTP_CONNECT_TIME = "connect_time"; public static final String KSM_KEY_HTTP_CONTENT_LENGHT = "http_content_length"; public static final String KSM_KEY_HTTP_CONTENT_RANGE = "http_content_range"; public static final String KSM_KEY_HTTP_FIRST_DATA_TIME = "first_data_time"; public static final String KSM_KEY_HTTP_REDIRECT = "http_redirect"; public static final String KSM_KEY_HTTP_X_CACHE = "http_x_cache"; public static final String KSM_KEY_LANGUAGE = "language"; public static final String KSM_KEY_SAMPLE_RATE = "sample_rate"; public static final String KSM_KEY_SAR_DEN = "sar_den"; public static final String KSM_KEY_SAR_NUM = "sar_num"; public static final String KSM_KEY_START_US = "start_us"; public static final String KSM_KEY_STREAMID = "streamId"; public static final String KSM_KEY_STREAMS = "streams"; public static final String KSM_KEY_TBR_DEN = "tbr_den"; public static final String KSM_KEY_TBR_NUM = "tbr_num"; public static final String KSM_KEY_TYPE = "type"; public static final String KSM_KEY_VIDEO_STREAM = "video"; public static final String KSM_KEY_WIDTH = "width"; public static final String KSM_VAL_TYPE__AUDIO = "audio"; public static final String KSM_VAL_TYPE__UNKNOWN = "unknown"; public static final String KSM_VAL_TYPE__VIDEO = "video"; public int mAnalyzeDnsTime; public KSYStreamMeta mAudioStream; public long mBitrate; public long mDurationUS; public String mFormat; public int mHttpCode; public int mHttpConnectTime = 0; public String mHttpContentLength; public String mHttpContentRange; public int mHttpFirstDataTime = 0; public String mHttpRedirect; public String mHttpXCache; public Bundle mMediaMeta; public long mStartUS; public String mStreamId; public final ArrayList<KSYStreamMeta> mStreams = new ArrayList<>(); public KSYStreamMeta mVideoStream; public static class KSYStreamMeta { public long mBitrate; public long mChannelLayout; public String mCodecLongName; public String mCodecName; public String mCodecProfile; public int mFpsDen; public int mFpsNum; public int mHeight; public final int mIndex; public String mLanguage; public Bundle mMeta; public int mSampleRate; public int mSarDen; public int mSarNum; public int mTbrDen; public int mTbrNum; public String mType; public int mWidth; public KSYStreamMeta(int i) { this.mIndex = i; } public String getBitrateInline() { long j = this.mBitrate; if (j <= 0) { return "N/A"; } int i = (j > 1000 ? 1 : (j == 1000 ? 0 : -1)); Locale locale = Locale.US; Object[] objArr = new Object[1]; if (i < 0) { objArr[0] = Long.valueOf(this.mBitrate); return String.format(locale, "%d bit/s", objArr); } objArr[0] = Long.valueOf(this.mBitrate / 1000); return String.format(locale, "%d kb/s", objArr); } public String getChannelLayoutInline() { long j = this.mChannelLayout; if (j <= 0) { return "N/A"; } if (j == 4) { return "mono"; } if (j == 3) { return "stereo"; } return String.format(Locale.US, "%x", Long.valueOf(this.mChannelLayout)); } public String getCodecLongNameInline() { return !TextUtils.isEmpty(this.mCodecLongName) ? this.mCodecLongName : !TextUtils.isEmpty(this.mCodecName) ? this.mCodecName : "N/A"; } public String getCodecShortNameInline() { return !TextUtils.isEmpty(this.mCodecName) ? this.mCodecName : "N/A"; } public String getFpsInline() { int i; int i2 = this.mFpsNum; return (i2 <= 0 || (i = this.mFpsDen) <= 0) ? "N/A" : String.valueOf(((float) i2) / ((float) i)); } public int getInt(String str) { return getInt(str, 0); } public int getInt(String str, int i) { String string = getString(str); if (TextUtils.isEmpty(string)) { return i; } try { return Integer.parseInt(string); } catch (NumberFormatException unused) { return i; } } public long getLong(String str) { return getLong(str, 0); } public long getLong(String str, long j) { String string = getString(str); if (TextUtils.isEmpty(string)) { return j; } try { return Long.parseLong(string); } catch (NumberFormatException unused) { return j; } } public String getResolutionInline() { if (this.mWidth <= 0 || this.mHeight <= 0) { return "N/A"; } if (this.mSarNum <= 0 || this.mSarDen <= 0) { return String.format(Locale.US, "%d x %d", Integer.valueOf(this.mWidth), Integer.valueOf(this.mHeight)); } return String.format(Locale.US, "%d x %d [SAR %d:%d]", Integer.valueOf(this.mWidth), Integer.valueOf(this.mHeight), Integer.valueOf(this.mSarNum), Integer.valueOf(this.mSarDen)); } public String getSampleRateInline() { if (this.mSampleRate <= 0) { return "N/A"; } return String.format(Locale.US, "%d Hz", Integer.valueOf(this.mSampleRate)); } public String getString(String str) { return this.mMeta.getString(str); } } public static KsMediaMeta parse(Bundle bundle) { if (bundle == null) { return null; } KsMediaMeta ksMediaMeta = new KsMediaMeta(); ksMediaMeta.mMediaMeta = bundle; ksMediaMeta.mFormat = ksMediaMeta.getString(KSM_KEY_FORMAT); ksMediaMeta.mDurationUS = ksMediaMeta.getLong(KSM_KEY_DURATION_US); ksMediaMeta.mStartUS = ksMediaMeta.getLong(KSM_KEY_START_US); ksMediaMeta.mBitrate = ksMediaMeta.getLong(KSM_KEY_BITRATE); int i = -1; int i2 = ksMediaMeta.getInt("video", -1); int i3 = ksMediaMeta.getInt("audio", -1); ksMediaMeta.mFormat = ksMediaMeta.getString(KSM_KEY_HTTP_X_CACHE); ksMediaMeta.mHttpRedirect = ksMediaMeta.getString(KSM_KEY_HTTP_REDIRECT); ksMediaMeta.mHttpContentRange = ksMediaMeta.getString(KSM_KEY_HTTP_CONTENT_RANGE); ksMediaMeta.mHttpContentLength = ksMediaMeta.getString(KSM_KEY_HTTP_CONTENT_LENGHT); ksMediaMeta.mAnalyzeDnsTime = ksMediaMeta.getInt(KSM_KEY_HTTP_ANALYZE_DNS, 0); ksMediaMeta.mHttpCode = ksMediaMeta.getInt(KSM_KEY_HTTP_CODE, 0); ksMediaMeta.mStreamId = ksMediaMeta.getString(KSM_KEY_STREAMID); try { if (ksMediaMeta.getString(KSM_KEY_HTTP_CONNECT_TIME) != null) { ksMediaMeta.mHttpConnectTime = new Double(ksMediaMeta.getString(KSM_KEY_HTTP_CONNECT_TIME)).intValue(); } if (ksMediaMeta.getString(KSM_KEY_HTTP_FIRST_DATA_TIME) != null) { ksMediaMeta.mHttpFirstDataTime = new Double(ksMediaMeta.getString(KSM_KEY_HTTP_FIRST_DATA_TIME)).intValue(); } } catch (NumberFormatException unused) { ksMediaMeta.mHttpConnectTime = 0; ksMediaMeta.mHttpFirstDataTime = 0; } ArrayList<Bundle> parcelableArrayList = ksMediaMeta.getParcelableArrayList(KSM_KEY_STREAMS); if (parcelableArrayList == null) { return ksMediaMeta; } Iterator<Bundle> it = parcelableArrayList.iterator(); while (it.hasNext()) { Bundle next = it.next(); i++; if (next != null) { KSYStreamMeta kSYStreamMeta = new KSYStreamMeta(i); kSYStreamMeta.mMeta = next; kSYStreamMeta.mType = kSYStreamMeta.getString("type"); kSYStreamMeta.mLanguage = kSYStreamMeta.getString("language"); if (!TextUtils.isEmpty(kSYStreamMeta.mType)) { kSYStreamMeta.mCodecName = kSYStreamMeta.getString(KSM_KEY_CODEC_NAME); kSYStreamMeta.mCodecProfile = kSYStreamMeta.getString(KSM_KEY_CODEC_PROFILE); kSYStreamMeta.mCodecLongName = kSYStreamMeta.getString(KSM_KEY_CODEC_LONG_NAME); kSYStreamMeta.mBitrate = (long) kSYStreamMeta.getInt(KSM_KEY_BITRATE); if (kSYStreamMeta.mType.equalsIgnoreCase("video")) { kSYStreamMeta.mWidth = kSYStreamMeta.getInt("width"); kSYStreamMeta.mHeight = kSYStreamMeta.getInt("height"); kSYStreamMeta.mFpsNum = kSYStreamMeta.getInt(KSM_KEY_FPS_NUM); kSYStreamMeta.mFpsDen = kSYStreamMeta.getInt(KSM_KEY_FPS_DEN); kSYStreamMeta.mTbrNum = kSYStreamMeta.getInt(KSM_KEY_TBR_NUM); kSYStreamMeta.mTbrDen = kSYStreamMeta.getInt(KSM_KEY_TBR_DEN); kSYStreamMeta.mSarNum = kSYStreamMeta.getInt(KSM_KEY_SAR_NUM); kSYStreamMeta.mSarDen = kSYStreamMeta.getInt(KSM_KEY_SAR_DEN); if (i2 == i) { ksMediaMeta.mVideoStream = kSYStreamMeta; } } else if (kSYStreamMeta.mType.equalsIgnoreCase("audio")) { kSYStreamMeta.mSampleRate = kSYStreamMeta.getInt(KSM_KEY_SAMPLE_RATE); kSYStreamMeta.mChannelLayout = kSYStreamMeta.getLong(KSM_KEY_CHANNEL_LAYOUT); if (i3 == i) { ksMediaMeta.mAudioStream = kSYStreamMeta; } } ksMediaMeta.mStreams.add(kSYStreamMeta); } } } return ksMediaMeta; } public String getDurationInline() { long j = (this.mDurationUS + 5000) / 1000000; long j2 = j / 60; return String.format(Locale.US, "%02d:%02d:%02d", Long.valueOf(j2 / 60), Long.valueOf(j2 % 60), Long.valueOf(j % 60)); } public int getInt(String str) { return getInt(str, 0); } public int getInt(String str, int i) { String string = getString(str); if (TextUtils.isEmpty(string)) { return i; } try { return Integer.parseInt(string); } catch (NumberFormatException unused) { return i; } } public long getLong(String str) { return getLong(str, 0); } public long getLong(String str, long j) { String string = getString(str); if (TextUtils.isEmpty(string)) { return j; } try { return Long.parseLong(string); } catch (NumberFormatException unused) { return j; } } public ArrayList<Bundle> getParcelableArrayList(String str) { return this.mMediaMeta.getParcelableArrayList(str); } public String getString(String str) { return this.mMediaMeta.getString(str); } }