-
Notifications
You must be signed in to change notification settings - Fork 247
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);