多个usb摄像头同时驱动推流

我想问一下旭日x3派4GB版本最多可以支持几个usb摄像头同时推流呢?为什么我接了1080p和720p的两个usb摄像头后,第二个摄像头会出现“no space left on device”-
我使用了脚本和c代码俩个方式,同时运行两个usb摄像头还是会出现no space left on device 的报错 ,报错内容和之前一样。分辨率已经下降到320x240,传输速率也降到500k了。

查看了系统日志后发现是带宽问题,不知道该如何解决?-

image.png

8bba90f5f2d8a45c3fcbb9993f194af_20230706001159.jpg

测试没问题,不过延迟很高,不建议使用软解码的方式进行,没有意义

我使用了脚本和c代码俩个方式,同时运行两个usb摄像头还是会出现no space left on device 的报错 ,报错内容和之前一样。分辨率已经下降到320x240,传输速率也降到500k了。

查看了系统日志后发现是带宽问题,不知道该如何解决?

最多可以同时支持两个,且两个USB摄像头都需连接至2.0接口,并且需要经过编码后在进行推流,但可能出现带宽不够的情况。

带宽不够的问题该如何解决呢?

麻烦提供下脚本和c代码源码,我们快速复现下

延迟高有什么解决办法吗?

FFmpeg是可以支持硬解码的,请问x3派可以使用硬解码吗?有没有什么硬解码器?或者有什么方法?

带宽不够话可以采用Mjpeg编码

但是我要推流到rtmp服务器,好像只能支持H.264编码,这该怎么办

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <pthread.h>void* start_stream(void* args) {    int device_number = *(int*)args;    char rtmp_url[128];    sprintf(rtmp_url, "rtmp://116.204.66.26/live/%d", device_number);    char ffmpeg_cmd[256];    sprintf(ffmpeg_cmd, "ffmpeg -i /dev/video%d -c:v libx264 -preset veryfast -tune zerolatency -f flv %s", device_number, rtmp_url);    system(ffmpeg_cmd);    return NULL;}int main() {    int device_numbers[] = {8, 9};  // 摄像头设备号数组    pthread_t threads[2];    for (int i = 0; i < 2; i++) {        pthread_create(&threads[i], NULL, start_stream, (void*)&device_numbers[i]);    }    for (int i = 0; i < 2; i++) {        pthread_join(threads[i], NULL);    }    return 0;}

脚本:

#!/bin/bash# 定义视频设备数组video_devices=(8 9)# 定义数字数组numbers=(1234 5678)# 获取数组的长度length=${#video_devices[@]}# 遍历数组并执行命令for ((i=0; i<$length; i++)); do    # 获取当前索引位置的视频设备和数字    video_device=${video_devices[i]}    number=${numbers[i]}        # 构建命令    command="ffmpeg -i /dev/video$video_device -f flv rtmp://116.204.66.26/live/$number"        # 打开新的终端并执行命令    gnome-terminal -- bash -c "$command; exec bash"done

您好,请问复现大概什么时候可以呢?

你好,研发同学一般是24小时内回复

您好,研发同学怎么说?可以解决了吗?

跑单路有问题吗?

单路usb没问题,双路就不行