ESP-IDF 相当于 Arduino 的 WiFiClient.write() 功能

ESP-IDF's equivalent of Arduino's WiFiClient.write() fucntionality

提问人:Nawal 提问时间:6/26/2022 更新时间:6/26/2022 访问量:327

问:

我正在使用 ESP32-CAM 通过 ESP-IDF 框架进行视频流传输。我能够在 ESP32-CAM 上创建服务器并成功流式传输视频。对于流式传输,我使用带有标头的 HTTP 协议,它运行良好:)Content-Type: multipart/x-mixed-replace; boundary=" PART_BOUNDARY "\r\n

现在,我想在相机上添加一个伺服电机来远程调整平移。我想到了 2 种方法。

  1. 为伺服创建另一个端点,但为此我需要断开视频流,直到伺服请求完成。这在视频中造成了明显的滞后。

  2. 在视频流连接之间发送数据,并获得最小的视频延迟。

我能够在Arduino IDE中使用第二个选项,在那里我们可以选择在正在进行的请求中从客户端读取二进制数据。示例如下WebServer

// only showing the relevent code ...
// create server.
WebServer server(80);
// then register different endpoint handlers ...
// ...
// ...

void video_stream_handler(){
  // initilize camera stuff, nothing to worry here
  camera_fb_t * fb = NULL;
  esp_err_t res = ESP_OK;
  size_t _jpg_buf_len = 0;
  uint8_t * _jpg_buf = NULL;
  char buf[32];
  sensor_t* sensor_settings = esp_camera_sensor_get();
  sensor_settings->set_framesize(sensor_settings, FRAMESIZE_VGA);
  sensor_settings->set_quality(sensor_settings, 20);
  
  // get client handle
  WiFiClient client = server.client();

  // now we can write headers as well as data to client. this works in ESP-IDF as well :)
  client.write(<some-headers>, <header-length>); 

  // now this is interesting.
  // we can read from client as well
  client.read(); // gives bytes read from client 

我的问题是,esp-idf 可以做这样的事情吗? 或者,如果还有其他更好的选择吗?我希望在视频流中将延迟降至最低,同时在两者之间仍然执行伺服操作。

硬件:ESP32-CAM(单核),4MB PSRAM

ESP-IDF http_server参考

PS 我正在使用 Python 套接字来读取/处理视频流并在持续连接中发送二进制数据。

Arduino ESP32 式处理 ESP-IDF

评论

0赞 lurker 7/4/2022
您可以在 eap-idf 中做任何你想做的事情。:)您可以查看 Arduino 的源代码,因为我认为在引擎盖下它使用 esp-idf。但我认为它只是打开一个套接字并发送一个数据包。Client.Write
0赞 lurker 7/4/2022
顺便说一句,您是否尝试在视频流式传输时访问另一个端点?我不确定它是否会阻塞或是否会并行处理它。
0赞 Nawal 7/5/2022
@lurker一次只能访问一个终结点。另一个等到当前端点得到服务,因为它是一个无限流,所以它永远不会结束......

答: 暂无答案