Skip to content

androidProbeMediaInfo

xinbaicheng edited this page Jul 31, 2017 · 9 revisions

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

此功能主要有类KSYProbeMediaInfo实现

功能描述

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

版本要求

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

接口定义

SDK版本 v1.4.4 ~ v1.8.0

/**
 * 版本要求:v1.4.4
 * 探测一个多媒体文件,获取其流信息
 * @param url 多媒体文件地址
 * @param timeout 超时阈值,单位为秒
 */
public void probeMediaInfo(String url, int timeout)

版本v1.9.0及以上

/**
 * 版本要求:v1.9.0
 * 探测一个多媒体文件,获取其流信息
 * @param url 多媒体文件地址
 * @param timeout 超时阈值,单位为秒
 * @param headers 请求时需添加的header
 * @param accelerate 是否加速
 */
public void probeMediaInfo(String url, int timeout, Map<String, String> headers, boolean accelerate)

基本示例

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

KSYProbeMediaInfo probeMediaInfo = new KSYProbeMediaInfo();
String url = "rtmp://live.hkstv.hk.lxdns.com/live/hks";
int probeTimeOutSecond = 10; // 超时阈值,单位为秒
// http请求的头
Map<String, String> headers = new HashMap<>();
headers.put("Referer", "http://www.test.com");
// 探测视频信息
probeMediaInfo.probeMediaInfo(url, probeTimeOutSecond, headers, true);

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());
}

视频缩略图

该功能可获取本地视频的缩略图
如有播放本地视频或获取本地视频的缩略图的需求,建议使用SDK提供的点播库,因点播库支持更多的文件格式和音视频标准

具体可参见:https://github.com/ksvc/KSYMediaPlayer_Android/wiki/LiveAndVod

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

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

对于播放SDK v2.0.3及以上版本获取视频缩略图的接口有变化
/**
 * @brief 获取视频的缩略图,可设置缩略图的输出宽高以及所需缩略图的具体时间点
 *
 * @param url 视频地址
 * @param seekTime 单位: 毫秒(MS)
 *                 该值为0,则以视频首帧为缩略图
 *                 若大于0,则会取离该时间点最近的一个关键帧为缩略图
 *                 该值大于视频时长时,以视频首帧为缩略图
 * @param width 输出缩略图的宽,具体含义可见后续例子
 * @param height 输出缩略图的高,具体含义可见后续例子
 * @param accurate 是否精准截图, TRUE为精准截图,反之则否
 *
 * @return 缩略图
 */
public Bitmap getVideoThumbnailAtTime(String url, long seekTime, int width, int height, boolean accurate)

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

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