Skip to content

androidProbeMediaInfo

xinbaicheng edited this page Sep 19, 2016 · 9 revisions

探测视频信息与获取视频缩略图功能

此功能主要有类KSYProbeMediaInfo实现

功能描述

探测视频,可得到该视频的文件封装格式、视频编码格式、视频宽高、音频编码格式、采样率、声道数等信息
获取本地缩略图,可设定输出缩略图的宽高以及所需具体时间点的缩略图

版本要求

探测视频信息: v1.4.4 及以上
获取缩略图: v1.5.3 及以上

基本示例

支持多线程同时探测多个视频

KSYProbeMediaInfo probeMediaInfo = new KSYProbeMediaInfo();
String url = "rtmp://live.hkstv.hk.lxdns.com/live/hks";
int probeTimeOutSecond = 10; // 超时阈值,单位为秒
// 探测视频信息
probeMediaInfo.probeMediaInfo(url, probeTimeOutSecond);

Log.e(TAG, "Media format:"+probeMediaInfo.getMediaFormat().toString()+", bitrate:"+probeMediaInfo.getMediaBitrate() +", video stream count:"+probeMediaInfo.getVideoStreamCount() + ", audio stream count:"+probeMediaInfo.getAudioStreamCount());

ArrayList<KSYProbeMediaInfo.KSYProbeMediaData> videoArray = probeMediaInfo.getVideoStreams();
for(KSYProbeMediaInfo.KSYProbeMediaData video : videoArray)
{
    Log.e(TAG, "Video codec type:"+video.getVideoCodecType().toString() + ",width:"+video.getVideoWidth()+", height:"+video.getVideoHeight());
}

ArrayList<KSYProbeMediaInfo.KSYProbeMediaData> audioArray = probeMediaInfo.getAudioStreams();
for(KSYProbeMediaInfo.KSYProbeMediaData audio : audioArray)
{
    Log.e(TAG, "Audio codec type:"+audio.getAudioCodecType().toString()+", channel:"+audio.getAudioChannel()+", sample rate:"+audio.getAudioSampleRate());
    Log.e(TAG, "Audio bitrate:"+audio.getAudioBitrate()+", frame size:"+audio.getAudioFrameSize()+", fmt:"+audio.getAudioFormat());
}

视频缩略图

下面将简要介绍接口的参数含义

/**
 * @brief 获取视频的缩略图,可设置缩略图的输出宽高以及所需缩略图的具体时间点
 *
 * @param url 视频地址
 * @param seekTime 单位: 毫秒(MS)
 *                 该值为0,则以视频首帧为缩略图
 *                 若大于0,则会取离该时间点最近的一个关键帧为缩略图
 *                 该值大于视频时长时,以视频首帧为缩略图
 * @param width 输出缩略图的宽,具体含义可见后续例子
 * @param height 输出缩略图的高,具体含义可见后续例子
 *
 * @return 缩略图
 */
public Bitmap getVideoThumbnailAtTime(String url, long seekTime, int width, int height)

下面将结合具体例子展示该接口的使用方法

String url = "/storage/emulated/0/test.mp4";
long targetTime = 5 * 1000; // 5000 ms
int targetVideoWidth = 640;
int targetVideoHeight = 480;

KSYProbeMediaInfo mediaInfo = new KSYProbeMediaInfo();

// 以视频首帧为缩略图,输出缩略图宽高与原视频保持一致
Bitmap bitmap0 = mediaInfo.getVideoThumbnailAtTime(url, 0, 0, 0);

// 以视频 targetTime 最近的一帧关键帧为缩略图,输出缩略图宽高与原视频保持一致
Bitmap bitmap1 = mediaInfo.getVideoThumbnailAtTime(url, targetTime, 0, 0);

// 以视频 targetTime 最近的一帧关键帧为缩略图
// 输出缩略图宽为 targetVideoWidth,高度 会根据原视频的宽高比例做出缩放
Bitmap bitmap2 = mediaInfo.getVideoThumbnailAtTime(url, targetTime, targetVideoWidth, 0);

// 以视频 targetTime 最近的一帧关键帧为缩略图
// 输出缩略图高为 targetVideoHeight,宽度 会根据原视频的宽高比例做出缩放
Bitmap bitmap3 = mediaInfo.getVideoThumbnailAtTime(url, targetTime, 0, targetVideoHeight);

// 以视频 targetTime 最近的一帧关键帧为缩略图
// 输出缩略图宽为 targetVideoWidth,高度为 targetVideoHeight
Bitmap bitmap4 = mediaInfo.getVideoThumbnailAtTime(url, targetTime, targetVideoWidth, targetVideoHeight);
Clone this wiki locally