2

我正在尝试使用 dart(flutter) 客户端和带有 gRPC api 的 python 服务器进行实时图像分析。如何在 gRPC 中使用 dart-client 设置异步图像流?(如 websockets)

4

2 回答 2

1

这是一个相当大的话题,但你要求一个 dart 客户端,所以我假设你有一个看起来像这样的“ .proto ”文件和一个工作的 python-server。

如果你想将你的 dart-client 连接到一个异步流,你必须这样做。

  typedef FrameStreameCallback = Function(Frame);

  ResponseStream<Frame> _frameStream;
  void getFrames(FrameStreameCallback cb) {
    FrameRequest req = new FrameRequest();
    //Set data of req and so on...

    _frameStream =  _stub.FrameStreamer(req);

    _frameStream.listen((Frame newFrame) {
      //Send callback when a new Frame is received
      cb(newFrame);
    });
    _messageStream.handleError((onError) {
      print("An error occured in frame stream " + onError);
    });
  }

然后你这样调用这个方法:

obj.getFrames((Frame f){
  print("New Frame received" + f.toString());
});
于 2019-08-14T13:03:05.350 回答
1

你的问题范围太大了。您必须决定要流式传输的内容,您是否尝试流式传输一个图像帧?请记住,如果您希望每条消息发送超过 1MB,gRPC 提倡重新设计您的系统或使用其他东西。

我不熟悉 dart,但假设您需要将图像流式传输到运行 dart 的客户端,您可以让客户端向 python 服务器发送请求,然后让 python 服务器将帧流回。原型可能如下所示:

service FrameService {

  rpc FrameStreamer(FrameRequest) returns (stream Frame) {}

}

message FrameRequest {
    //empty
}

message Frame {
    //put your data in here, perhaps bytes?
    //or an frame id, etc.
}
于 2019-03-06T17:37:38.397 回答