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

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

相关推荐
VidDown2 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
朱涛的自习室3 小时前
70 美金的 Beyond Compare,我让 Gemini 4 和 DeepSeek 造个开源免费版(Day 2)
android·前端·人工智能
美狐美颜SDK开放平台5 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
光锥智能6 小时前
价格从“元”降到“分”,AI视频的下半场开打了
人工智能·音视频
.Bryce.7 小时前
在智能体中使用A2A工具:让大模型自己决定“该找谁帮忙“
android·java·服务器·redis·后端·agent·a2a
方舟小孩8 小时前
开源办公软件海豹办公 1.9.15 实战 从模板异常到 Android WebView 资源回归
android
用户2181697049309 小时前
Kotlin 语法四 协程
android
出师牛9 小时前
Android - 再探Handler
android
高晶9 小时前
Android 物联网组网实战:NFC 从零到落地
android·java
stevenzqzq9 小时前
android 维度和渠道
android