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

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

相关推荐
PHOSKEY2 小时前
3D工业相机从点云数据到五轴点胶运动轨迹的转化技术
数码相机·3d
常利兵2 小时前
解锁Android的隐藏超链接:Deep Link与App Link探秘
android·gitee
for_syq2 小时前
trace抓取工具
android·python
黄林晴2 小时前
Compose Multiplatform 1.10 发布:统一 Preview、Navigation 3、Hot Reload 三箭齐发
android·flutter
Pyeako2 小时前
基于Qt和PaddleOCR的工业视觉识别报警系统开发
人工智能·python·深度学习·数码相机·opencv·ocr·pyqt5
中达瑞和-高光谱·多光谱2 小时前
光谱相机选购指南:核心参数全解析
数码相机
Kapaseker2 小时前
一杯 Kotlin 美式品味 object 声明
android·kotlin
常利兵2 小时前
Room 3.0大变身:安卓开发的新挑战与机遇
android·jvm·oracle
阿拉斯攀登2 小时前
【RK3576 安卓 JNI/NDK 系列 09】RK3576 实战(三):JNI 调用 librga 实现 2D 硬件加速图像处理
android·驱动开发·rk3568·瑞芯微·rk安卓驱动·rk3576 rga加速