我在玩ESP32-CAM。我有一个图像编码为jpg在一个结构中作为这个
typedef struct {
uint8_t * buf; /*!< Pointer to the pixel data */
size_t len; /*!< Length of the buffer in bytes */
size_t width; /*!< Width of the buffer in pixels */
size_t height; /*!< Height of the buffer in pixels */
pixformat_t format; /*!< Format of the pixel data */
struct timeval timestamp; /*!< Timestamp since boot of the first DMA buffer of the frame */
} camera_fb_t;
可以看出,原始图像数据似乎是一个uint8_t数组。
我想通过网络套接字连接发送此图像数据。二进制数据的发送函数具有以下语法
esp_websocket_client_send(client,(char *)fb->buf, 1000, portMAX_DELAY);
如果将指针格式从char更改为uint8_t,则会出现编译器错误。所以我使用上面的语法。尽管如此,它似乎仍然有效,并且python websockets服务器接收某种类型的数据。在python中,当打印到服务器终端时,数据看起来是这样的。
b'xffxd8xffxe0x00x10JFIFx00x01x01x0 etc.
我想知道我是否以合适的数据格式发送二进制jpg数据?我的意思是,将uint8数组解释为char数组似乎有点奇怪。在发送之前,我是否应该对其进行不同的编码?
"send"函数不适用于二进制数据。
图像像素是二进制数据。
建议使用:
int esp_websocket_client_send_bin(esp_web套接字_client_handle_t客户端,const char*数据,int len,TickType_t超时(
另请注意:.jpg图像总是512字节的倍数,因此长度应该是512的倍数,而不是1000