0

我玩的是 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 数组。

我想通过 websocket 连接发送这个图像数据。二进制数据的发送函数具有以下语法

esp_websocket_client_send(client,(char *)fb->buf, 1000, portMAX_DELAY);

如果将指针格式从 char 更改为 uint8_t,则会出现编译器错误。所以我使用上面的语法。它似乎仍然有效,python websockets 服务器接收某种数据。在 python 中,当打印到服务器终端时,数据看起来像这样。

b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x0  etc.

我想知道我是否以合适的数据格式发送二进制 jpg 数据?我的意思是,将 uint8 数组解释为 char 数组似乎有点奇怪。我应该在发送之前对它进行不同的编码吗?

4

1 回答 1

0

该“发送”功能不适用于二进制数据。

图像像素是二进制数据。

建议使用:

int esp_websocket_client_send_bin(esp_websocket_client_handle_t 客户端,const char *data,int len,TickType_t 超时)

另请注意:.jpg 图像始终是 512 字节的倍数,因此长度应为 512 的倍数,绝不是 1000

于 2020-07-26T17:27:58.890 回答