From 4d740446a1c545a59458972653afe8fb5559ece3 Mon Sep 17 00:00:00 2001 From: xufuji456 <839789740@qq.com> Date: Sat, 30 Jan 2021 21:57:17 +0800 Subject: [PATCH] change JsonParseTool to kotlin --- .../frank/ffmpeg/handler/FFmpegHandler.java | 2 +- .../com/frank/ffmpeg/tool/JsonParseTool.java | 152 ------------------ .../com/frank/ffmpeg/tool/JsonParseTool.kt | 147 +++++++++++++++++ 3 files changed, 148 insertions(+), 153 deletions(-) delete mode 100644 app/src/main/java/com/frank/ffmpeg/tool/JsonParseTool.java create mode 100644 app/src/main/java/com/frank/ffmpeg/tool/JsonParseTool.kt diff --git a/app/src/main/java/com/frank/ffmpeg/handler/FFmpegHandler.java b/app/src/main/java/com/frank/ffmpeg/handler/FFmpegHandler.java index f6f597a..290004e 100644 --- a/app/src/main/java/com/frank/ffmpeg/handler/FFmpegHandler.java +++ b/app/src/main/java/com/frank/ffmpeg/handler/FFmpegHandler.java @@ -140,7 +140,7 @@ public class FFmpegHandler { Log.i(TAG, "handle ffprobe onEnd result=" + resultMsg); MediaBean mediaBean = null; if (resultMsg != null && !resultMsg.isEmpty()) { - mediaBean = JsonParseTool.parseMediaFormat(resultMsg); + mediaBean = JsonParseTool.INSTANCE.parseMediaFormat(resultMsg); } mHandler.obtainMessage(MSG_FINISH, mediaBean).sendToTarget(); } diff --git a/app/src/main/java/com/frank/ffmpeg/tool/JsonParseTool.java b/app/src/main/java/com/frank/ffmpeg/tool/JsonParseTool.java deleted file mode 100644 index 2dee4d2..0000000 --- a/app/src/main/java/com/frank/ffmpeg/tool/JsonParseTool.java +++ /dev/null @@ -1,152 +0,0 @@ -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(); - } - -} diff --git a/app/src/main/java/com/frank/ffmpeg/tool/JsonParseTool.kt b/app/src/main/java/com/frank/ffmpeg/tool/JsonParseTool.kt new file mode 100644 index 0000000..c5cc7db --- /dev/null +++ b/app/src/main/java/com/frank/ffmpeg/tool/JsonParseTool.kt @@ -0,0 +1,147 @@ +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.JSONObject + +/** + * the tool of parsing json + * Created by frank on 2020/1/8. + */ +object JsonParseTool { + + private val TAG = JsonParseTool::class.java.simpleName + + private const val TYPE_VIDEO = "video" + + private const val TYPE_AUDIO = "audio" + + fun parseMediaFormat(mediaFormat: String?): MediaBean? { + if (mediaFormat == null || mediaFormat.isEmpty()) { + return null + } + var mediaBean: MediaBean? = null + try { + val jsonMedia = JSONObject(mediaFormat) + val jsonMediaFormat = jsonMedia.getJSONObject("format") + mediaBean = MediaBean() + val streamNum = jsonMediaFormat.optInt("nb_streams") + mediaBean.streamNum = streamNum + Log.e(TAG, "streamNum=$streamNum") + val formatName = jsonMediaFormat.optString("format_name") + mediaBean.formatName = formatName + Log.e(TAG, "formatName=$formatName") + val bitRateStr = jsonMediaFormat.optString("bit_rate") + if (!TextUtils.isEmpty(bitRateStr)) { + mediaBean.bitRate = Integer.valueOf(bitRateStr) + } + Log.e(TAG, "bitRate=$bitRateStr") + val sizeStr = jsonMediaFormat.optString("size") + if (!TextUtils.isEmpty(sizeStr)) { + mediaBean.size = java.lang.Long.valueOf(sizeStr) + } + Log.e(TAG, "size=$sizeStr") + val durationStr = jsonMediaFormat.optString("duration") + if (!TextUtils.isEmpty(durationStr)) { + val duration = java.lang.Float.valueOf(durationStr) + mediaBean.duration = duration.toLong() + } + + val jsonMediaStream = jsonMedia.getJSONArray("streams") ?: return mediaBean + for (index in 0 until jsonMediaStream.length()) { + val jsonMediaStreamItem = jsonMediaStream.optJSONObject(index) ?: continue + val codecType = jsonMediaStreamItem.optString("codec_type") ?: continue + if (codecType == TYPE_VIDEO) { + val videoBean = VideoBean() + mediaBean.videoBean = videoBean + val codecName = jsonMediaStreamItem.optString("codec_tag_string") + videoBean.videoCodec = codecName + Log.e(TAG, "codecName=$codecName") + val width = jsonMediaStreamItem.optInt("width") + videoBean.width = width + val height = jsonMediaStreamItem.optInt("height") + videoBean.height = height + Log.e(TAG, "width=$width--height=$height") + val aspectRatio = jsonMediaStreamItem.optString("display_aspect_ratio") + videoBean.displayAspectRatio = aspectRatio + Log.e(TAG, "aspectRatio=$aspectRatio") + val pixelFormat = jsonMediaStreamItem.optString("pix_fmt") + videoBean.pixelFormat = pixelFormat + Log.e(TAG, "pixelFormat=$pixelFormat") + val profile = jsonMediaStreamItem.optString("profile") + videoBean.profile = profile + val level = jsonMediaStreamItem.optInt("level") + videoBean.level = level + Log.e(TAG, "profile=$profile--level=$level") + val frameRateStr = jsonMediaStreamItem.optString("r_frame_rate") + if (!TextUtils.isEmpty(frameRateStr)) { + val frameRateArray = frameRateStr.split("/".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() + val frameRate = Math.ceil(java.lang.Double.valueOf(frameRateArray[0]) / java.lang.Double.valueOf(frameRateArray[1])) + Log.e(TAG, "frameRate=" + frameRate.toInt()) + videoBean.frameRate = frameRate.toInt() + } + } else if (codecType == TYPE_AUDIO) { + val audioBean = AudioBean() + mediaBean.audioBean = audioBean + val codecName = jsonMediaStreamItem.optString("codec_tag_string") + audioBean.audioCodec = codecName + Log.e(TAG, "codecName=$codecName") + val sampleRateStr = jsonMediaStreamItem.optString("sample_rate") + if (!TextUtils.isEmpty(sampleRateStr)) { + audioBean.sampleRate = Integer.valueOf(sampleRateStr) + } + Log.e(TAG, "sampleRate=$sampleRateStr") + val channels = jsonMediaStreamItem.optInt("channels") + audioBean.channels = channels + Log.e(TAG, "channels=$channels") + val channelLayout = jsonMediaStreamItem.optString("channel_layout") + audioBean.channelLayout = channelLayout + Log.e(TAG, "channelLayout=$channelLayout") + } + } + } catch (e: Exception) { + Log.e(TAG, "parse error=$e") + } + + return mediaBean + } + + fun stringFormat(mediaBean: MediaBean?): String? { + if (mediaBean == null) { + return null + } + val formatBuilder = StringBuilder() + formatBuilder.append("duration:").append(mediaBean.duration).append("\n") + formatBuilder.append("size:").append(mediaBean.size).append("\n") + formatBuilder.append("bitRate:").append(mediaBean.bitRate).append("\n") + formatBuilder.append("formatName:").append(mediaBean.formatName).append("\n") + formatBuilder.append("streamNum:").append(mediaBean.streamNum).append("\n") + if (mediaBean.videoBean != null) { + val videoBean = mediaBean.videoBean + formatBuilder.append("width:").append(videoBean!!.width).append("\n") + formatBuilder.append("height:").append(videoBean.height).append("\n") + formatBuilder.append("aspectRatio:").append(videoBean.displayAspectRatio).append("\n") + formatBuilder.append("pixelFormat:").append(videoBean.pixelFormat).append("\n") + formatBuilder.append("frameRate:").append(videoBean.frameRate).append("\n") + if (videoBean.videoCodec != null) { + formatBuilder.append("videoCodec:").append(videoBean.videoCodec).append("\n") + } + } + if (mediaBean.audioBean != null) { + val audioBean = mediaBean.audioBean + formatBuilder.append("sampleRate:").append(audioBean!!.sampleRate).append("\n") + formatBuilder.append("channels:").append(audioBean.channels).append("\n") + formatBuilder.append("channelLayout:").append(audioBean.channelLayout).append("\n") + if (audioBean.audioCodec != null) { + formatBuilder.append("audioCodec:").append(audioBean.audioCodec).append("\n") + } + } + return formatBuilder.toString() + } + +}