# AwesomePlayerDemo **Repository Path**: dwdyoung/awosome-player ## Basic Information - **Project Name**: AwesomePlayerDemo - **Description**: No description available - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-11-10 - **Last Updated**: 2024-10-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: ffmpeg, 编解码 ## README # AwesomePlayerDemo ## 介绍 ### 同屏相关技术 本项目主要提供同屏技术的底层实现方式,向上层提供lib库。本demo包含发送端和接收端,发送端可以将自身的屏幕编码成H264等编码格式,然后通过UDP或者TCP方式发送到接收端,达到2个设备显示内容同步的目的。

## 实现原理 ### 截屏并编码 发送端通过 MediaProjectionManager 获取屏幕数据,之后通过硬编码和软编码方式将屏幕YUV编码成H264格式。 - 硬编码请查看 cpp_lib/src/main/java/com/gonsin/paperless2/sdk/sync/hard 目录相关代码 - 软编码采用ffmpeg技术,相关代码在 cpp_lib/src/main/cpp
### 发送数据 成功编码成H264之后,通过netty框架采用私有的协议发送到接收端,私有协议内容参考 数据服务器流媒体协议.md 本demo基于netty技术,和原生java技术实现了多种的发送器和接收器,接口名字分别是 ISenderIReceiver ,所有的实现均在cpp_lib/src/main/java/com/gonsin/paperless2/sdk/sync/connector可以查找到 本demo可以选择不同的 发送器 将 MediaData 发送到接收端。
### 接收数据 接收端同样采用 接收器 IReceiver 实现,关键代码路径如上。
### 解码并显示 接收器可以设置通过硬解码和软解码对H264进行解码,相关解码的代码与编码路径一直,参考以上内容。 解码成功之后,显示到屏幕上采用2种方式 - 软解码的方式,采用 GLFrameSurface 显示 - 硬编码方式,采用 SurfaceView 显示