android 设备实时传输相机采集的视频到电脑pc端 通过内网wifi 方案

Android 端集成一个推流库,将采集的画面编码后,通过 RTMP/RTSP 等协议发送到电脑上运行的流媒体服务器(如 MediaMTX),然后在电脑上用 VLC 等播放器拉流观看。

以下以功能全面的 RootEncoder 为例,展示从添加依赖到开始推流的完整代码

  1. 添加依赖
    在项目根目录的 settings.gradle 中添加 JitPack 仓库:
bash 复制代码
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' } // 添加这行
    }
}

在模块的 build.gradle 中添加依赖:

bash 复制代码
dependencies {
    implementation "com.github.pedroSG94.RootEncoder:library:2.2.6"
}
  1. 配置权限
    在 AndroidManifest.xml 中声明必要权限:
bash 复制代码
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- 如果需要在推流时录制视频到本地,需要存储权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" 
                 android:maxSdkVersion="28" />
``
在开始推流前,需要准备音频和视频编码器,可以设置分辨率、码率、帧率等参数
`
RootEncoder 提供了多个核心类,最常用的是 RtmpCamera1(基于旧的 Camera1 API)和 RtmpCamera2(基于新的 Camera2 API)。这里以兼容性更好的 RtmpCamera1 为例

```bash
 // 关键:初始化 RtmpCamera1,传入 SurfaceView 和连接状态监听器
        rtmpCamera = new RtmpCamera1(surfaceView, this);
        // 准备视频编码器
boolean videoPrepared = rtmpCamera.prepareVideo(1280, 720, 30, 2000 * 1024, 0);
// 参数解释:宽度, 高度, 帧率(fps), 比特率(bps), 旋转角度(0为不旋转)

// 准备音频编码器
boolean audioPrepared = rtmpCamera.prepareAudio(128 * 1024, 44100, true, false, false);
// 参数解释:比特率, 采样率, 是否立体声, 是否开启回声消除, 是否开启降噪

if (videoPrepared && audioPrepared) {
    // 编码器准备成功
} else {
    // 编码器准备失败(通常是因为设备不支持该配置)
}

开始推流

bash 复制代码
// 开始推流 - 地址格式:rtmp://[电脑IP]:1935/live/stream
rtmpCamera.startStream("rtmp://192.168.1.100:1935/live/stream");

// 停止推流
rtmpCamera.stopStream();

// 释放资源(在Activity销毁时调用)
@Override
protected void onDestroy() {
    super.onDestroy();
    if (rtmpCamera != null) {
        rtmpCamera.stopStream();
        rtmpCamera.stopPreview();
    }
}

连接状态回调

通过实现 ConnectCheckerRtmp 接口,可以监听推流状态

bash 复制代码
public class LiveActivity extends AppCompatActivity implements ConnectCheckerRtmp {

    // ... 其他代码

    @Override
    public void onConnectionSuccessRtmp() {
        runOnUiThread(() -> {
            Toast.makeText(this, "推流连接成功", Toast.LENGTH_SHORT).show();
        });
    }

    @Override
    public void onConnectionFailedRtmp(String reason) {
        runOnUiThread(() -> {
            Toast.makeText(this, "推流失败: " + reason, Toast.LENGTH_SHORT).show();
        });
    }

    @Override
    public void onDisconnectRtmp() {
        runOnUiThread(() -> {
            Toast.makeText(this, "推流已断开", Toast.LENGTH_SHORT).show();
        });
    }

    @Override
    public void onAuthErrorRtmp() {
        runOnUiThread(() -> Toast.makeText(this, "认证错误", Toast.LENGTH_SHORT).show());
    }

    @Override
    public void onAuthSuccessRtmp() {
        runOnUiThread(() -> Toast.makeText(this, "认证成功", Toast.LENGTH_SHORT).show());
    }
}

测试与验证

启动电脑上的流媒体服务器(如 MediaMTX 或 SRS),确保 RTMP 服务正常运行。

获取电脑内网 IP(如 192.168.1.100)。

运行 Android 应用,点击「开始推流」按钮。

在电脑上用 VLC 播放器拉流验证:

打开 VLC → 「媒体」→「打开网络串流」

输入 rtmp://192.168.1.100:1935/live/stream

点击「播放」,即可看到手机摄像头画面

相关推荐
BoomHe1 天前
Android AOSP13 原生 Launcher3 壁纸获取方式
android
Digitally1 天前
如何将联系人从 Android 转移到 Android
android
李小枫1 天前
webflux接收application/x-www-form-urlencoded参数
android·java·开发语言
爱丽_1 天前
MySQL `EXPLAIN`:看懂执行计划、判断索引是否生效与排错套路
android·数据库·mysql
NPE~1 天前
[App逆向]环境搭建下篇 — — 逆向源码+hook实战
android·javascript·python·教程·逆向·hook·逆向分析
没学上了1 天前
多相机协同拍照原理底层刨析
数码相机
电子科技圈1 天前
赋能高端音频功能促进多样化设备创新——XMOS USB Audio平台实现四大功能升级
人工智能·mcu·音视频·智能家居·边缘计算·语音识别·智能硬件
EasyDSS1 天前
视频高清直播点播/云点播/云直播EasyDSS:一站式视频云平台全链路整合,重塑企业视频应用新生态
音视频
jwybobo20071 天前
AV1 码流 RTP 封装
音视频·av1
yewq-cn1 天前
AOSP 下载
android