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

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

相关推荐
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
FLJwu3 天前
存储与固件量产实战01:运动相机TF卡量产翻车实录!V30≠4K可用,90%OEM踩中的隐形售后坑
经验分享·数码相机·相机
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
2601_955662463 天前
短剧多人对白怎么配?2026年多角色配音工具对比
大数据·人工智能·音视频·语音识别
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
开发笔记-阿牛3 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L
人工智能·单片机·嵌入式硬件·音视频·音频