首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过用于UV4L数据通道的unix域套接字发送数据

通过用于UV4L数据通道的unix域套接字发送数据
EN

Stack Overflow用户
提问于 2019-01-30 01:20:48
回答 1查看 266关注 0票数 0

我有一个关于通过WebRTC数据通道从树莓派发送二进制数据到web客户端的问题。我实际上已经找到了一个解决方案,但我认为它可能是低效的,而且我不确定它到底为什么有效。

基本上,我有一个启用了WebRTC数据通道的UV4L服务器。我的目标是通过WebRTC将通过I2C收集的数据发送到web客户端。UV4L文档解释说,必须创建Unix域套接字,并通过套接字从UV4L服务器和运行在树莓上的应用程序传递数据。我在我的C++项目中使用了C代码,因为我更熟悉这门语言。这就是我在应用程序代码中创建套接字的方式。将UV4L服务器配置为使用适当的套接字创建连接。

代码语言:javascript
复制
      struct thread_info *info = (struct thread_info *)args;
      int fd = 0, connfd = 0, returned_len = 0;

      fd = socket(AF_UNIX, SOCK_SEQPACKET, 0);
      if (fd < 0) {
          fprintf(stderr, "Failed to create socket file descriptor\n");
          exit(1);
       }

       struct sockaddr_un addr;
       addr.sun_family = AF_UNIX;
       strncpy(addr.sun_path, "/tmp/uv4l.socket", sizeof(addr.sun_path)-1);

       bind(fd, (struct sockaddr *) &addr, sizeof(addr));
       if (listen(fd, 10)) {
           fprintf(stderr, "Failed to listen on UNIX socket %d\n", errno);
           exit(1);
       }
       socklen_t socket_length = sizeof(addr);
       connfd = accept(fd,(struct sockaddr *)&addr, &socket_length);
       if (connfd < 0) {
           fprintf(stderr, "Failed to accept socket connection\n");
           exit(1);
       }
       info->socketfd = connfd;

此连接成功。然后,我在另一个线程中使用文件描述符来发送数据。我正在使用的I2C库(pigpio)允许将数据复制到我定义为char buffer[nb_reads];char * buffer

我尝试使用send直接发送此数据,但在数据通道(浏览器)的另一端没有观察到任何消息。只有当我将数据编码为base64字符串时,我才能真正得到预期的结果。

代码语言:javascript
复制
    if (total_read > 0) {
        size_t encoded_length; 
        unsigned char *encoded = base64_encode((const unsigned char*)buffer, total_read, &encoded_length);
        ssize_t sent = send(info->socketfd, encoded, encoded_length, MSG_EOR);
        if (sent < 0) {
            fprintf(stderr, "Failed to send all necessary MPU6050 data");
        }
        free(encoded);
    }

为什么我不能直接发送字节数组?

EN

回答 1

Stack Overflow用户

发布于 2019-01-30 06:44:07

WebRTC数据通道可以在两种不同的binaryTypes中处理消息:BlobArrayBuffer。后者是UV4L (目前)支持的唯一一种消息类型,它希望对另一个对等体(例如浏览器)执行send操作或从另一个对等体接收消息。换句话说,确保浏览器将数据解释为ArrayBuffer

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54426419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档