# FPV-Player-Demo **Repository Path**: hilbertw/fpv-player-demo ## Basic Information - **Project Name**: FPV-Player-Demo - **Description**: 云卓图传播放器Demo - **Primary Language**: Android - **License**: Not specified - **Default Branch**: dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 7 - **Created**: 2025-04-04 - **Last Updated**: 2025-04-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 更新日志 ``` v3.2.2 文件包 fpvplayer-v3.2.2.aar sky-ijkplayer-v1.1.aar 更新内容 云卓播放器: 1.修复BUG 2.RTSP流关闭时没有发送TEARDOWN指令问题 v3.1.6 文件包 fpvplayer-v3.1.6.aar sky-ijkplayer-v1.1.aar 更新内容 1.RTMP推流功能 2.降低拉流失败时重新拉流频率 v3.0.9 文件包 fpvplayer-v3.0.9.aar sky-ijkplayer-v1.1.aar 更新内容 1.修复FPVPlayer 在H16上低分辨率硬解码花屏问题 2.修复FPVPlayer 部分情况下重连不上的问题 v3.0.5 文件包 fpvplayer-v3.0.5.aar sky-ijkplayer-v1.1.aar 更新内容 1.FPVWidget 云卓播放器优化(运行效率,降低CPU占用) 2.FPVReaderWidget 部分情况下宽高设置失败导致黑屏问题修复 v2.9.0 文件包 fpvplayer-v2.9.0.aar sky-ijkplayer-v1.1.aar 更新内容 1.截图功能 2.IJKPlayer播放器优化 a.关闭部分视频流时不释放问题 b.修改缓存参数 3.云卓播放器优化 a.新增丢包策略 b.其他优化 4.新增串口图传播放控件(适用H12,需要配合RCSDK使用) v2.8 优化IJKPlayer播放器 1.RTSP流丢包时大片马赛克问题 2.拉流时获取不到宽度高度时,部分硬解码器导致崩溃问题 3.IJKPlayer动态链接库集成到aar 云卓播放器调整 1.提高解码线程的优先级 注意* 如果从v2.8版本以前的版本更新的,需要删除项目的.so文件,因为v2.8及以后的版本在aar中已经集成了相关的.so 需要删除的.so: jniLibs arm64-v8a libijkffmpeg.so libijkplayer.so libijksdl.so armeabi-v7a libijkffmpeg.so libijkplayer.so libijksdl.so x86 libijkffmpeg.so libijkplayer.so libijksdl.so v2.8及以后ijkplayer-java-release.aar替换为sky-ijkplayer.aar v2.7.2 云卓播放器优化(处理未丢包的情况下偶尔卡顿跳帧问题) v2.7.1 图像格式支持NV12、NV21、YV12、I420 v2.6 处理removeView(FPVWidget)后再次addView(FPVWidget)导致黑屏问题 v2.5 处理RTSP流丢包时导致大片马赛克问题 v2.4.1 删除OpenH264相关内容 v2.4 提升出图速度 v2.2 FPVPlayerVersion获取版本号 ``` # Demo 工程 下载或者克隆Git上的Android示例代码工程:https://gitee.com/skydroid/fpv-player-demo.git # 空白项目集成 SDK 本指引介绍如何将 FPV-Player-Demo 中的 视频SDK包移植到用户的空白项目中 ``` 本指引中使用的 Android Studio 版本为 Android Studio Chipmunk | 2021.2.1 Patch 2 SDK所需权限 ``` - ### 导入SDK AAR包 ``` fpvplayer-v2.9.0.aar sky-ijkplayer-v1.1.aar ``` 将以上SDK AAR导入到项目app/libs中 - ### 修改build.gradle(app) 文件 在 dependencies 项里添加SDK包 ``` implementation files("libs/fpvplayer-v3.2.2.aar") implementation files("libs/sky-ijkplayer-v1.1.aar") ``` - ### 修改 AndroidManifest.xml 文件 参照 Demo 的 AndroidManifest.xml添加SDK 需要的最基础权限 ``` ``` - ## 网口图传播放 - ### 布局文件添加控件 ``` ``` 添加视频播放控件 - ### 播放视频 SDK内部会自动重连,开发者无需再关注连接状态及重连逻辑 ``` //设置播放地址 fpvWidget?.url = "rtsp://192.168.144.108:554/stream=0" //开始播放 fpvWidget?.start() //停止播放 fpvWidget?.stop() ``` - ### 播放器配置 ``` //使用硬解 fpvWidget?.usingMediaCodec = true //使用软解 fpvWidget?.usingMediaCodec = false //修改播放器 PlayerType.AUTO:根据视频流自动选择播放器(默认) PlayerType.ONLY_SKY:仅使用云卓播放器 PlayerType.ONLY_IJK:仅使用IJKPlayer播放器 fpvWidget?.playerType = PlayerType.AUTO //修改RTSP流TCP/UDP连接方式 RtspTransport.AUTO:默认(由FFmpeg自动设置) RtspTransport.UDP:固定UDP连接 RtspTransport.TCP:固定TCP连接 fpvWidget?.rtspTranstype = RtspTransport.AUTO //监听状态及帧数据 fpvWidget?.onPlayerStateListener = object : OnPlayerStateListener{ override fun onConnected() { } override fun onDisconnect() { } //在使用IJKPlayer播放器时,onReadFrame无效 override fun onReadFrame(p0: FrameInfo?) { } } //获取版本号 FPVPlayerVersion.getVersion() ``` - ## 串口图传播放(适用于H12) 注意* 串口图传需要配合RCSDK使用(https://gitee.com/skydroid/rcsdk-demo) - ### 布局文件添加控件 ``` ``` 添加视频播放控件 - ### 初始化串口图传播放器 ``` //设置解码器类型 //三体相机与双轴云台需要使用OpenH264进行软解 fpvReaderWidget.setVideoDecoderType(FPVReaderWidget.VIDEO_DECODER_TYPE_OPENH264); //设置参数准备播放 fpvReaderWidget.start(FPVReaderWidget.VIDEO_TYPE_H264,640,360,15); //停止播放 fpvReaderWidget?.stop() ``` - ### 连接串口,接收串口视频数据进行播放 SDK内部会自动重连,开发者无需再关注连接状态及重连逻辑 *串口通讯部分需要引入RCSDK ``` //配置串口信息 pipeline = PipelineManager.INSTANCE.createSerialPipeline("/dev/ttyHS0",4000000); pipeline.setOnCommListener(new CommListener() { @Override public void onConnectSuccess() { //连接串口成功 } @Override public void onConnectFail(SkyException e) { //连接串口失败 } @Override public void onDisconnect() { //串口断开连接 } @Override public void onReadData(byte[] bytes) { //收到串口数据,发送到串口图传播放控件进行解码显示 fpvReaderWidget.sendFrame(bytes); } }); //连接串口 PipelineManager.INSTANCE.connectPipeline(pipeline); //断开串口连接 PipelineManager.INSTANCE.disconnectPipeline(pipeline); ```