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

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

截图代码:
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会花屏 我估计和流的格式有关系 





你可能感兴趣的:(android流媒体)