Android:采用SurfaceView设置无声视频

版权声明:本文为博主原创文章,未经博主允许不得转载。 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()之前


猜你喜欢

转载自blog.csdn.net/a695929533/article/details/51298315
今日推荐