parent
67c6d57112
commit
16c095f5c7
@ -0,0 +1,152 @@ |
||||
package com.frank.ffmpeg.tool; |
||||
|
||||
import android.text.TextUtils; |
||||
import android.util.Log; |
||||
|
||||
import com.frank.ffmpeg.model.AudioBean; |
||||
import com.frank.ffmpeg.model.MediaBean; |
||||
import com.frank.ffmpeg.model.VideoBean; |
||||
|
||||
import org.json.JSONArray; |
||||
import org.json.JSONObject; |
||||
|
||||
/** |
||||
* the tool of parsing json |
||||
* Created by frank on 2020/1/8. |
||||
*/ |
||||
public class JsonParseTool { |
||||
|
||||
private final static String TAG = JsonParseTool.class.getSimpleName(); |
||||
|
||||
private final static String TYPE_VIDEO = "video"; |
||||
|
||||
private final static String TYPE_AUDIO = "audio"; |
||||
|
||||
public static MediaBean parseMediaFormat(String mediaFormat) { |
||||
if (mediaFormat == null || mediaFormat.isEmpty()) { |
||||
return null; |
||||
} |
||||
MediaBean mediaBean = null; |
||||
try { |
||||
JSONObject jsonMedia = new JSONObject(mediaFormat); |
||||
JSONObject jsonMediaFormat = jsonMedia.getJSONObject("format"); |
||||
mediaBean = new MediaBean(); |
||||
int streamNum = jsonMediaFormat.optInt("nb_streams"); |
||||
mediaBean.setStreamNum(streamNum); |
||||
Log.e(TAG, "streamNum=" + streamNum); |
||||
String formatName = jsonMediaFormat.optString("format_name"); |
||||
mediaBean.setFormatName(formatName); |
||||
Log.e(TAG, "formatName=" + formatName); |
||||
String bitRateStr = jsonMediaFormat.optString("bit_rate"); |
||||
if (!TextUtils.isEmpty(bitRateStr)) { |
||||
mediaBean.setBitRate(Integer.valueOf(bitRateStr)); |
||||
} |
||||
Log.e(TAG, "bitRate=" + bitRateStr); |
||||
String sizeStr = jsonMediaFormat.optString("size"); |
||||
if (!TextUtils.isEmpty(sizeStr)) { |
||||
mediaBean.setSize(Long.valueOf(sizeStr)); |
||||
} |
||||
Log.e(TAG, "size=" + sizeStr); |
||||
String durationStr = jsonMediaFormat.optString("duration"); |
||||
if (!TextUtils.isEmpty(durationStr)) { |
||||
float duration = Float.valueOf(durationStr); |
||||
mediaBean.setDuration((long) duration); |
||||
} |
||||
|
||||
JSONArray jsonMediaStream = jsonMedia.getJSONArray("streams"); |
||||
if (jsonMediaStream == null) { |
||||
return mediaBean; |
||||
} |
||||
for (int index = 0; index < jsonMediaStream.length(); index ++) { |
||||
JSONObject jsonMediaStreamItem = jsonMediaStream.optJSONObject(index); |
||||
if (jsonMediaStreamItem == null) continue; |
||||
String codecType = jsonMediaStreamItem.optString("codec_type"); |
||||
if (codecType == null) continue; |
||||
if (codecType.equals(TYPE_VIDEO)) { |
||||
VideoBean videoBean = new VideoBean(); |
||||
mediaBean.setVideoBean(videoBean); |
||||
String codecName = jsonMediaStreamItem.optString("codec_tag_string"); |
||||
videoBean.setVideoCodec(codecName); |
||||
Log.e(TAG, "codecName=" + codecName); |
||||
int width = jsonMediaStreamItem.optInt("width"); |
||||
videoBean.setWidth(width); |
||||
int height = jsonMediaStreamItem.optInt("height"); |
||||
videoBean.setHeight(height); |
||||
Log.e(TAG, "width=" + width + "--height=" + height); |
||||
String aspectRatio = jsonMediaStreamItem.optString("display_aspect_ratio"); |
||||
videoBean.setDisplayAspectRatio(aspectRatio); |
||||
Log.e(TAG, "aspectRatio=" + aspectRatio); |
||||
String pixelFormat = jsonMediaStreamItem.optString("pix_fmt"); |
||||
videoBean.setPixelFormat(pixelFormat); |
||||
Log.e(TAG, "pixelFormat=" +pixelFormat); |
||||
String profile = jsonMediaStreamItem.optString("profile"); |
||||
videoBean.setProfile(profile); |
||||
int level = jsonMediaStreamItem.optInt("level"); |
||||
videoBean.setLevel(level); |
||||
Log.e(TAG, "profile=" + profile + "--level=" + level); |
||||
String frameRateStr = jsonMediaStreamItem.optString("r_frame_rate"); |
||||
if (!TextUtils.isEmpty(frameRateStr)) { |
||||
String[] frameRateArray = frameRateStr.split("/"); |
||||
double frameRate = Math.ceil(Double.valueOf(frameRateArray[0]) / Double.valueOf(frameRateArray[1])); |
||||
Log.e(TAG, "frameRate=" + (int) frameRate); |
||||
videoBean.setFrameRate((int) frameRate); |
||||
} |
||||
} else if (codecType.equals(TYPE_AUDIO)) { |
||||
AudioBean audioBean = new AudioBean(); |
||||
mediaBean.setAudioBean(audioBean); |
||||
String codecName = jsonMediaStreamItem.optString("codec_tag_string"); |
||||
audioBean.setAudioCodec(codecName); |
||||
Log.e(TAG, "codecName=" + codecName); |
||||
String sampleRateStr = jsonMediaStreamItem.optString("sample_rate"); |
||||
if (!TextUtils.isEmpty(sampleRateStr)) { |
||||
audioBean.setSampleRate(Integer.valueOf(sampleRateStr)); |
||||
} |
||||
Log.e(TAG, "sampleRate=" + sampleRateStr); |
||||
int channels = jsonMediaStreamItem.optInt("channels"); |
||||
audioBean.setChannels(channels); |
||||
Log.e(TAG, "channels=" + channels); |
||||
String channelLayout = jsonMediaStreamItem.optString("channel_layout"); |
||||
audioBean.setChannelLayout(channelLayout); |
||||
Log.e(TAG, "channelLayout=" + channelLayout); |
||||
} |
||||
} |
||||
} catch (Exception e) { |
||||
Log.e(TAG, "parse error=" + e.toString()); |
||||
} |
||||
return mediaBean; |
||||
} |
||||
|
||||
public static String stringFormat(MediaBean mediaBean) { |
||||
if (mediaBean == null) { |
||||
return null; |
||||
} |
||||
StringBuilder formatBuilder = new StringBuilder(); |
||||
formatBuilder.append("duration:").append(mediaBean.getDuration()).append("\n"); |
||||
formatBuilder.append("size:").append(mediaBean.getSize()).append("\n"); |
||||
formatBuilder.append("bitRate:").append(mediaBean.getBitRate()).append("\n"); |
||||
formatBuilder.append("formatName:").append(mediaBean.getFormatName()).append("\n"); |
||||
formatBuilder.append("streamNum:").append(mediaBean.getStreamNum()).append("\n"); |
||||
if (mediaBean.getVideoBean() != null) { |
||||
VideoBean videoBean = mediaBean.getVideoBean(); |
||||
formatBuilder.append("width:").append(videoBean.getWidth()).append("\n"); |
||||
formatBuilder.append("height:").append(videoBean.getHeight()).append("\n"); |
||||
formatBuilder.append("aspectRatio:").append(videoBean.getDisplayAspectRatio()).append("\n"); |
||||
formatBuilder.append("pixelFormat:").append(videoBean.getPixelFormat()).append("\n"); |
||||
formatBuilder.append("frameRate:").append(videoBean.getFrameRate()).append("\n"); |
||||
if (videoBean.getVideoCodec() != null) { |
||||
formatBuilder.append("videoCodec:").append(videoBean.getVideoCodec()).append("\n"); |
||||
} |
||||
} |
||||
if (mediaBean.getAudioBean() != null) { |
||||
AudioBean audioBean = mediaBean.getAudioBean(); |
||||
formatBuilder.append("sampleRate:").append(audioBean.getSampleRate()).append("\n"); |
||||
formatBuilder.append("channels:").append(audioBean.getChannels()).append("\n"); |
||||
formatBuilder.append("channelLayout:").append(audioBean.getChannelLayout()).append("\n"); |
||||
if (audioBean.getAudioCodec() != null) { |
||||
formatBuilder.append("audioCodec:").append(audioBean.getAudioCodec()).append("\n"); |
||||
} |
||||
} |
||||
return formatBuilder.toString(); |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue