# REDPlayer
![示例图片](./redplayer.jpg)
![GitHub release (latest by date including pre-releases)](https://img.shields.io/badge/release-v1.0.0-blue)
![GitHub license](https://img.shields.io/badge/license-LGPL2.1-blue)
<!-- [GitHub issues](https://img.shields.io/github/issues/badges/RedPlayer/open) -->
<!-- [GitHub pull requests](https://img.shields.io/bitbucket/pr/badge/RedPlayer?label=pull%20requests) -->
## About REDPlayer
REDPlayer 是一款由小红书自主研发的跨平台(支持 Android、iOS、HarmonyOS 等平台)播放器。不同于行业其他播放器,REDPlayer 具有结构简单、耦合度低、功能边界清晰等特点,提供了多种接入方式,技术人员可根据需要灵活选择,既可快速集成SDK使用,也可基于源码进行定制开发。
REDPlayer 的宗旨是让开发者可以快速明确地了解播放器的基本构造,并可根据个人需求进行简单扩展,满足不同用户的多样需求,可作为学生学习的基础工具,也可作为企业的商用平台。
REDPlayer 支持点播、直播场景下的多种协议和格式(如 HLS、MP4、FLV 等),并可二次扩展更多协议(如:RTC 等)。每个模块均是解耦的,开发者可以根据需要挂载自定义模块,如自研解码器、渲染器等。
Platform | Build Status
-------- | ------------
Android | Done
iOS | Done
others | In Coming
### Quickstart/Demo
- Android [Quickstart](source/android/README.md)/ [Demo](source/android/app/README.md)
- IOS [Quickstart](source/ios/README.md)/ [Demo](source/ios/RedPlayerDemo)
- In coming...
### Features
Function | Function Description | Current Support Situation | Other Notes
-------- | -------------------- | ------------------------- | -----------
Rich Format | Supports rich audio and video formats such as FLV, HLS, MP4, MP3, and Vorbis | ✅ |
DASH Protocol | Supports standard protocol DASH | ✅ | Optimized version of DASH for on-demand support in the later stage
HDR | Supports multiple HDR formats such as HDR10/HLG. Distribution and playback support are provided according to the model | ✅ |
URL Playback | Supports playback of local and network videos via URL | ✅ |
Log Reporting | Supports reporting player logs and statistics related to playback point information | ✅ |
Abnormal Analysis | Supports obtaining corresponding abnormal information through log analysis | ✅ |
H.264 Playback & Hardware Decoding | Supports H.264 video sources and hardware decoding | ✅ |
H.265 Playback & Hardware Decoding | Supports H.265 video sources and hardware decoding | ✅ | Software decoding capabilities will be supported in the later stage
Automatic switching between software and hardware decoding | Automatically switches to software decoding when the terminal does not support hardware decoding | ✅ |
Playback Control | Supports playback control functions such as start, end, pause, and resume | ✅ |
Accurate Seeking | Supports accurate seeking to a specified position, which can be accurate to the frame level | ✅ |
Dynamic Dropping | Start dynamic dropping when the frame rate exceeds 60 fps | ✅ |
Replay | Supports manually triggered replay after the video ends | ✅ |
Continue playing | Supports setting the continuous playing time point | ✅ |
Loop Playback | Supports automatic replay after video playback ends | ✅ | Parameter configuration is required
Variable Speed Playback | Supports variable speed playback of 0.5-2 times, and the audio实现variable speed without changing the pitch | ✅ |
Definition Adjustment | Supports switching between multiple definitions for on-demand and transcoding | ✅ |
Seeking within the Cache | Supports seeking without clearing the buffer for cached video content | ✅ |
Packing Mode | Supports picture cropping and filling | ✅ |
Private DRM | Supports private DRM encryption schemes | ✅ |
Adaptive Bitrate | When playing HLS/DASH, it supports automatically selecting the definition for playback through bandwidth prediction | ✅ | Currently only supports selection before playback, and does not support abr during playback
Volume Settings | Supports real-time adjustment of system volume and mute operation | ✅ |
Pure Audio Playback | Supports playing audio only | ✅ |
Preload | Supports setting the preload size to reduce the time spent on the first screen | ✅ |
Play While Downloading | Supports playing while caching and downloading subsequent content, and you can set network policies | ✅ |
Playback Callback | Supports playback status callback, first frame callback, playback completion or failure callback | ✅ |
Retry on Playback Failure | Automatically retries on playback failure | ✅ | Only supports retries for non-4XX and 5XX classes
Real-time Download Speed | Supports getting real-time download speed | ❌ | Will be supported in later versions
Encrypted Streaming PlayBack | Support for on-demand transcoding of encrypted streams | ❌ | Need for custom development
Screenshot Function | Support for capturing any frame of the playback picture | ❌ | Will be supported in later versions
Thumbnail Preview | Support for previewing progress bar thumbnails (sprite map) | ❌ | Related to business, not currently supported
Set player size | Support for customizing the width and height of the player | ❌ | Will be supported in later versions
External subtitles | Support for two docking modes of external subtitles: full-link solution and pure client solution | ❌ | Will be supported in later versions
Client super-resolution | The client performs super-resolution enhancement on low-quality videos | ❌ | Will be supported in later versions
H.266 playback | Support for video playback in H.266 encoding format | ❌ | Will be supported in later versions
AV1 playback | Support for video playback in AV1 encoding format | ❌ | Will be supported in later versions
### Open Content
```bash
# Describe the main contents of current open source and the estimated time and contents of the next open source
```
- [CONTENTS.md](CONTENTS.md)
### Usage
- You can directly integrate your project by calling the interface or compile independently.
- [INTERFACES.md](INTERFACES.md)
### Build Environment
- **Install Homebrew & Git**
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install git
```
- **Build Android**
**Using Android SDK**
[Andrioid SDK](https://developer.android.com/studio?hl=en) is android project base dependency. You should download and then config with the following command:
```bash
# add this line to your ~/.bash_profile or ~/.profile, the android sdk will work
export ANDROID_SDK=<your sdk path>
# My build environment:
# macOS 14.0
# Android Studio Flamingo | 2022.2.1 Patch 2
# gradle version: 7.5.0
```
- **Build iOS**
**Using CocoaPods**
[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command:
```bash
$ gem install cocoapods
# My build environment:
# macOS 14.0
# Xcode 15.2 (15C500b)
# Cocoapods version: 1.10.2
# Ruby 3.0.6p216
```
### Latest Changes
- [NEWS.md](NEWS.md)
### Support
- Please try to discuss technical issues (https://github.com/RTE-Dev/RedPlayer/issues) publicly on github, and do not inquire privately by email. We will not reply one by one.
### Licence
#### Self Licence
```
Copyright (c) 2024 xiaohongshu
Licensed under LGPLv2.1 or later
```
#### Dependence Licence
- ffmpeg: LGPL v2.1+
- soundtouch: LGPL v2.1
- libcurl: MIT License
- c-ares: MIT License
- glide: MIT License
- Masonry: MIT License
- openssl: Apache License 2.0
- PictureSelector: Apache License 2.0
### Law And Rule
All rights and explanations belong to Xiaohongshu,you should always ask your lawyer for these stuffs before use it in your product.