如何在LAN中的2个设备之间传输现有的相机byte []数据

时间:2018-05-21 06:32:31

标签: android video-streaming android-camera

我想打开3个功能的设备相机:

  • 动作侦测

  • 视频记录

  • 使用rtsp

  • 播放视频

我可以通过初始化设备相机预览并使用相机对象的返回byte []数据来完成2个第一个功能。

class Adbanner extends React.Component {

  // Set this component's state as the current ad index
  state = {ad: 0};

  // Rotates the ad index state every 2 seconds
  rotateAd () {
    this.setState({ad: (this.state.ad + 1) % adarray.length});
    this.timer = setTimeout(this.rotateAd, 2000);
  }

  // Start rotating the ad index when mounted
  componentDidMount () {
    this.rotateAd();
  }

  // Renders when constructed, then whenever the state changes (or when React wants to)
  render() {
    return (
      <div>
        <input id="ad" type="image" src={adarray[this.state.ad]} style="position:absolute, height:50%, width:100%">
      </div>
    );
  }

  // Stop the update timer when unmounting
  componentWillUnmount () {
    clearTimeout(this.timer);
  }
}

export default Adbanner;

但我还不能做第三个功能。 我尝试过一些操作系统(libstreaming,rtmp-rtsp-stream-client-java ,..)但他们都将再次打开新的相机预览做流。

对于如何仅对现有相机预览中的rtsp相机字节[]数据进行流式传输,您有何评论?

1 个答案:

答案 0 :(得分:1)

如果您查看rtmp-… library,可以找到onPreviewFrame()实施。您可以通过添加检测来扩展此方法。如果我理解正确,这个库可以为你处理录像。

如果您(理所当然)更喜欢使用更成熟的库,那么您的选择应该是WebRTC。但是将您的面部检测挂钩到WebRTC可能会更难,并且可能涉及C ++。

另一方面,如果您的任务非常有限,并且两台设备共享相同的无线局域网且干扰最小,则您不需要高级传输协议作为RTSP。直接TCP套接字(用于编码帧)就足够了,这可以非常轻松地添加。