# android-jungle-mediaplayer **Repository Path**: chen3441251/android-jungle-mediaplayer ## Basic Information - **Project Name**: android-jungle-mediaplayer - **Description**: An Android MediaPlayer framework. Can play audio / video, or record audio. - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-26 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # android-jungle-mediaplayer 简介 ### 1、简介 `android-jungle-mediaplayer` 是 Android 平台上一款多媒体播放/语音录制的库。使用它你可以很方便的实现语音、视频播放功能。有以下优点: - 功能齐备,可自定制播放器、播放组件; - 内置实现了一个播放器,可以不加修改使用; - 视频播放支持 `SurfaceView/TextureView` 渲染; - 提供语音录制组件。 **内置播放器支持以下功能:** - 手势(双击暂停/回复播放;水平滑动进度跳转;左侧上下滑动调节亮度;右侧上下滑动调节音量) - 支持全屏/半屏播放; - 支持屏幕旋转自动识别,并自动切换全屏/半屏; - 可定制。 **具体实现原理请参考我的系列博文:** - [【Android】 从头搭建视频播放器(1)——概述](http://www.jianshu.com/p/c12481d3ceae) - [【Android】 从头搭建视频播放器(2)——SystemMediaPlayerImpl](http://www.jianshu.com/p/fc07935a0b04) - [【Android】 从头搭建视频播放器(3)——手势检测 & 控制](http://www.jianshu.com/p/2ea493532d2c) - [【Android】 从头搭建视频播放器(4)——屏幕旋转处理](http://www.jianshu.com/p/eb4451923172) - [【Android】 从头搭建视频播放器(5)——将所有放在一起](http://www.jianshu.com/p/59b02960e0d5) ### 2、使用方法 ``` compile 'com.jungle.mediaplayer:android-jungle-mediaplayer:1.0' ``` ### 3、Demo 截图 ![播放截图](https://github.com/arnozhang/android-jungle-mediaplayer/blob/master/docs/demo_image.jpg?raw=true) ### 3、组件介绍 |组件|功能| |---|---| |BaseMediaPlayerInterface|MediaPlayer 的通用接口| |BaseMediaPlayerListener|MediaPlayer 的 Listener| |AudioFocusPlayerListener|具有 **AudioFocus** 功能的 MediaPlayer Listener| |SurfaceViewMediaRender|利用 **SurfaceView** 渲染的 Render| |TextureViewMediaRender|利用 **TextureView** 渲染的 Render。 **SDK_VERSION >= 14**| |BaseMediaPlayer|具体的 MediaPlayer 基类,可以派生它用第三方播放器实现具体功能| |SystemImplMediaPlayer|使用系统 **android.media.MediaPlayer** 作为实现的 MediaPlayer| |BaseAudioRecorder|语音录制基类,可以派生它用第三方录制组件实现具体功能| |SystemImplAudioRecorder|使用系统 **android.media.MediaRecorder** 作为实现的 AudioRecorder| |JungleMediaPlayer|包装了 UI 等用户交互的播放器| ### 4、使用方法 这里只展示一些代码片段,**具体使用方法请参考项目中的 Demo 代码**。 > 需要注意的是,在 Activity 销毁的时候,务必调用播放器组件的 **`destroy`** 方法进行销毁播放器。 > > 如果播放网络视频或语音,需要在 `Android.manifest` 中声明 **`android.permission.INTERNET`** 权限。 > > **SurfaceView** 不要设置任何背景(`android:background`),不然画面会显示不出。 #### 5.1、视频播放 ```java JungleMediaPlayer mMediaPlayer; // ... mMediaPlayer.setPlayerListener(new SimpleJungleMediaPlayerListener() { @Override public void onTitleBackClicked() { if (mMediaPlayer.isFullscreen()) { mMediaPlayer.switchFullScreen(false); return; } finish(); } }); // play String videoUrl = "http://xxx.xx/video.mp4"; mMediaPlayer.playMedia(new VideoInfo(videoUrl)); ``` #### 5.2、语音播放 ```java BaseMediaPlayer mMediaPlayer = new SystemImplMediaPlayer(context); mMediaPlayer.addPlayerListener(new SimpleMediaPlayerListener() { @Override public void onStartPlay() { } @Override public void onLoadFailed() { } // ... }); // play mMediaPlayer.play(new VideoInfo(mAudioUrl)); ``` > 如果语音播放时需要处理 **`AudioFocus`** 逻辑,请使用 **`AudioFocusPlayerListener`** 这个 Listener。 #### 5.3、语音录制 ```java final static int REQUEST_CODE_AUDIO_PERMISSIONS = 100; Callback mPermissionCallback; BaseAudioRecorder mAudioRecorder; private void initRecorder() { RecordPermissionRequester permissionRequester = new RecordPermissionRequester() { @Override public void requestRecordPermission(String[] permissions, Callback callback) { mPermissionCallback = callback; ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE_AUDIO_PERMISSIONS); } }; mAudioRecorder = new SystemImplAudioRecorder(new RecorderListener() { @Override public void onError(Error error) { showToast("Record Audio ERROR! " + error.toString()); } @Override public void onStartRecord() { // do started logic. } @Override public void onStopRecord() { // do stopped logic. } }, permissionRequester); } private void startRecord() { String filePath = getAudioFilePath(); mAudioRecorder.setOutputFile(filePath); mAudioRecorder.startRecord(getContext()); } @Override public void onRequestPermissionsResult( int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_CODE_AUDIO_PERMISSIONS && mPermissionCallback != null) { mPermissionCallback.onPermissionRequested(); } } ``` > 语音录制需要在 `Android.manifest` 中声明 **`android.permission.RECORD_AUDIO`** 权限。 > > 高版本系统中,可能额外需要动态申请 `android.permission.RECORD_AUDIO` 权限。上面的 Demo 例子中作了示范。
## License ``` /** * Android Jungle-MediaPlayer framework project. * * Copyright 2016 Arno Zhang * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ ```