您的位置:首页 > 移动开发 > Android开发

使用Vitamio播放rtsp流媒体并实现动态截图

2014-09-03 00:00 459 查看
Vitamio是北京的一家企业开发多媒体库 主要是面向移动领域的

自己的项目里遇到videoview截图问题

传统的view用getDrawableCache可以

但是动态的surfaceview或者videoview 还有地图的mapview 等等都是不行的

android的截图其实门道很多 有个黑客比赛貌似就是免root实现截图功能

Vitamio是我找到一个蛮适合截videoview第三例子

首先在官网下载最新版4.2.2示例 解压后有两个主要的文件夹:vitamio 和 vitamio-demo

自己按照包名各自新建两个工程(示例没有.project文件无法直接导入)

对应目录拷入文件 注意一定要放在同一文件夹

vitamio设置成is Liberary

vitamio-demo引入vitamio作为库

运行可以看到里面的主要功能

老版本API主要是建立在videoview上的 现在转向mediaplayer了

其实这两个类在android源码里都有对应的 vitamio应该是在其基础上重写了

又加入了一些解码库在它的so文件里

Activity新建的时候加入so库检测:

if (!LibsChecker.checkVitamioLibs(this))
return;


初始化MediaPlayer:
mMediaPlayer = new MediaPlayer(this);
mMediaPlayer.setDataSource(url);//url为rtsp视频地址
mMediaPlayer.setDisplay(holder);
mMediaPlayer.prepareAsync();
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
setVolumeControlStream(AudioManager.STREAM_MUSIC);


截图代码:
<span style="white-space:pre">		</span>Bitmap dd = mMediaPlayer.getCurrentFrame();//截图方法
if (mMediaPlayer.isPlaying()) {
try {
String name = new DateFormat().format(
"yyyyMMdd_hhmmss",
Calendar.getInstance(Locale.CHINA))
+ ".jpg";
String fileName = getSDPath() + "/" + name;//getSDPath()获取SD卡目录string方法
FileOutputStream b = new FileOutputStream(fileName);
dd.compress(Bitmap.CompressFormat.JPEG, 100, b);
b.flush();
b.close();
Toast.makeText(VideoPlayerActivity.this, "截图成功",
Toast.LENGTH_LONG).show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else
Toast.makeText(VideoPlayerActivity.this, "视频未播放,请稍候截图",
Toast.LENGTH_LONG).show();


注: 截图的时候 发现bitmap保存为jpg很正常 但是保存png会花屏 我估计和流的格式有关系
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息