编辑 | blame | 历史 | 原始文档

多进程方案使用说明

概述

本方案通过多进程实现两个USB摄像头同时工作。每个摄像头运行在独立的进程中,每个进程拥有独立的H264Encoder实例,从而避免了底层C库的单实例限制。

架构说明

  • H264EncodeService:主进程服务,处理第一个摄像头(cameraId=1)
  • H264EncodeService2:独立进程服务(:camera2),处理第二个摄像头(cameraId=2)

使用方法

启动第一个摄像头(cameraId=1)

{
  "width": 640,
  "height": 480,
  "framerate": 25,
  "cameraId": 1
}

或者不指定cameraId(默认为1):

{
  "width": 640,
  "height": 480,
  "framerate": 25
}

启动第二个摄像头(cameraId=2)

{
  "width": 640,
  "height": 480,
  "framerate": 25,
  "cameraId": 2
}

网络推送示例

第一个摄像头:
json { "ip": "192.168.1.100", "port": 8888, "width": 640, "height": 480, "framerate": 25, "simPhone": "013120122580", "cameraId": 1 }

第二个摄像头:
json { "ip": "192.168.1.100", "port": 8889, "width": 640, "height": 480, "framerate": 25, "simPhone": "013120122580", "cameraId": 2 }

停止指定摄像头

停止第一个摄像头:
json { "cameraId": 1 }

停止第二个摄像头:
json { "cameraId": 2 }

如果不指定cameraId,默认停止第一个摄像头。

关键特性

  1. 进程隔离:两个摄像头运行在完全独立的进程中,互不干扰
  2. 自动路由:主服务根据cameraId自动路由到对应的进程
  3. 独立配置:每个摄像头可以独立配置分辨率、帧率、网络参数等
  4. 独立文件:第二个摄像头的文件会添加camera2标识,便于区分
  5. 独立通道:第二个摄像头使用logicalChannelId=2,第一个使用logicalChannelId=1

文件命名

  • 第一个摄像头:h264_1234567890123.h264
  • 第二个摄像头:h264_camera2_1234567890123.h264

注意事项

  1. 确保两个USB摄像头都已正确连接
  2. 第二个摄像头固定使用cameraId=2,第一个摄像头使用cameraId=1(或不指定)
  3. 两个进程可以同时运行,互不影响
  4. 每个进程都有独立的H264Encoder实例,因此可以真正并发工作

技术实现

  • 主服务通过AIDL绑定到第二个进程的服务
  • 第二个进程通过android:process=":camera2"配置在独立进程中运行
  • 所有操作都通过AIDL接口进行进程间通信