版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a695929533/article/details/51298315
这篇博客中,所描述的功能并没有实现。大家可以忽略。
------------------------------------------------
最近做的小程序,有一个需求:仿照朋友圈预览视频,视频无声音。
一开始使用的VideoView,查了查,不能设置默认声音为无。
又查了查,因为无法通过VideoView获取其调用的MediaPlayer,所以无发设置视频的声音大小,只能通过设置系统音量,改变音量大小。
很显然这不合要求。
所以我打算采用VideoView的超类SurfaceView来显示无声视频。
通过一系列常规代码之后,关键代码是这一句:
mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
设置音轨流类型为STREAM_VOICE_CALL
STREAM_VOICE_CALL是什么东西?
查了查,原来android系统提供了15级音量。
0级为静音,这个STREAM_VOICE_CALL其实就是 int类型的0值。
和此功能相关的全部代码如下:
holder.getVideoSV().getHolder().addCallback(new SurfaceHolder.Callback() {
MediaPlayer mediaPlayer = null;
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
mediaPlayer.setDisplay(holder.getVideoSV().getHolder());
try {
mediaPlayer.setDataSource(videoroot.getPath());
mediaPlayer.prepare();
} catch (IOException e) {
System.out.print("视频无法播放:"+videoroot.getAbsolutePath());
}
mediaPlayer.start();
mediaPlayer.setLooping(true);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
mediaPlayer.release();
}
});
注意mediaplayer设置setAudioStreamType需在prepare()之前