VideoStreamer 是一个专为 Android 设备设计的视频流媒体应用,旨在提供高质量的屏幕镜像和流媒体体验。
- 实时屏幕镜像:无缝地将 Android 设备屏幕镜像到其他设备。
- 高分辨率支持:默认原生分辨率
- 易于集成:兼容 OBS 等流媒体软件,便于直播和录制。
- 支持的输入: 屏幕捕获,摄像头录制
- 低延迟音频流:搭配指定程序可以低延迟的把内录音频推送到电脑播放,测试设备上约90ms延迟。
虽然 scrcpy 是一个广受欢迎的开源 Android 屏幕镜像工具,但我在开发 VideoStreamer 时选择不依赖它,主要基于以下原因:
- 容易崩溃:scrcpy 在某些网络条件不佳、设备兼容性问题或长时间运行时容易出现崩溃,导致用户体验中断。
- OBS 集成不便:要将 scrcpy 的输出集成到 OBS 等流媒体软件中,必须通过窗口采集方式获取,这会导致原始分辨率丢失,无法充分利用高清画面的优势。
- 流畅度不足:scrcpy 在处理高分辨率内容或复杂动画时,流畅度不够理想,容易出现画面卡顿或帧率下降。
值得注意的是,本项目也存在延迟方面的缺点。这是缓冲机制的问题,但缓冲过小反而可能引发卡顿。
- Android API 级别 29 或更高
- 一个 RTMP 流服务器
QUIC 传输使用 Alibaba XQUIC v1.9.5,TLS 后端固定为 Tongsuo(铜锁,原 BabaSSL) 8.3-stable。 XQUIC 与 Tongsuo 都以 Git 子模块固定到已验证提交;Android 包只生成 arm64-v8a,最低 API 为 29。
首次构建或更新子模块后执行:
git submodule update --init --recursive
./scripts/build-tongsuo-android.shWindows 请在 Git Bash 中运行上面的 Tongsuo 脚本,并准备 Android NDK
27.2.12479018、CMake 3.22.1、Perl 与 Make。脚本默认从 local.properties 读取
Android SDK 路径,将静态库放到忽略提交的 third_party/build/。随后在 PowerShell 或终端构建应用:
.\gradlew.bat assembleDebug如需指定环境,可设置 ANDROID_NDK_HOME、ANDROID_API 或 ANDROID_ABIS。应用层的
ALPN、控制消息、流方向和媒体封包保持原 LiveSuite 协议不变,因此无需修改服务端。
- 启动应用。
- 连接目标设备。
- 开始流媒体传输。
设置中的「录屏仅使用硬件编码器」默认开启,下次启动录屏推流时生效。关闭后允许软件编码兜底,仍优先选择硬件;相机的编码器策略独立。录屏保留原生分辨率,帧率和码率沿用已保存的设置。
录屏授权后,虚拟显示器在编码器就绪前不挂接画面 Surface,停止推流时也会断开。Android 允许初始 Surface 为 null,无需额外保留全分辨率的占位图形缓冲。编码器输出先归还硬件缓冲区,再做码流转换和网络入队;PCM、H.264 和 QUIC 封包减少了中间数组,RTMP 发送线程由入队唤醒。
真机对比时应使用相同手机、游戏场景、画质、网络和推流参数,分别观察游戏帧时间、接收端录制帧率、音画同步及持续运行后的内存占用。需要覆盖纯视频、音视频、独立音频、横竖屏切换、反复启停和网络拥塞。构建通过只能验证代码与打包,不能代替真机的功耗、温度和流畅度测量。
你可以自行实现服务端,或者使用我们的GUI客户端LiveSuite,也可以参考这个Node.js的简单实现:
import NodeMediaServer from 'node-media-server';
const config = {
rtmp: {
port: 1935,
chunk_size: 30000,
gop_cache: false,
ping: 30,
ping_timeout: 60
}
};
const nms = new NodeMediaServer(config);
nms.run();
nms.on('postPublish', (sessions) => {
});
nms.on('donePublish', (sessions) => {
});而后,在OBS中添加媒体源,链接填入对应的流链接。例如,设备推流为rtmp:///device/stream ,OBS中添加媒体源为rtmp:///device/stream
本项目主要由AI编写,代码质量可能存在问题 250 warnings ,如有大佬发现问题,请提issue,万分感谢。
第三方原生组件及许可证见 THIRD_PARTY_NOTICES.md。
长时间使用可能把音频内录干崩,干崩了就只有重启内录才有声音了我也不知道是不是我的问题了,因为试了下居然其它应用还有声,并且重启也没用。
- LiveSuiteGUI客户端,包含rtmp流服务器和音频服务器程序,可以完整搭配使用
- udp-audio-server音频程序本体