# 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 截图

### 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.
*/
```