首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在嵌入式Linux SoC上获取视频设备

在嵌入式Linux SoC上获取视频设备
EN

Unix & Linux用户
提问于 2019-02-23 17:15:02
回答 1查看 790关注 0票数 2

我试图找到一个IP相机的相机模块设备(运行Linux),但没有成功。

我的主要目标是找到相机流,以便我可以附加一个RTSP服务器。

更新26/02/2019

发现与OpenMAX (OMX)相关的libs。我一直试图将GStreamer与gst交叉编译,看看我能用它做些什么,但仍然没有成功。

一个熟悉OMX的人,不介意给你指点?

代码语言:javascript
复制
$ find / -iname "*omx*"
/lib/libOMX_VSRC.so
/lib/libOMX_AVQE_A.so
/lib/libOMX_BELA.so
/lib/libOMX_IJPE_ENC_HW.so
/lib/libOMX_VMFE.so
/lib/libOMX_VSPL.so
/lib/libOMX_IJPE.so
/lib/libOMX_VVHE.so
/lib/libOMX_ASPL.so
/lib/libOMX_IJPE_MEM_MGR.so
/lib/libOMX_ALSA.so
/lib/libOMX_IJPE_ENC_SW.so
/lib/libOMX_ACODEC.so

我试过什么

1.在 /dev中查找视频设备

代码语言:javascript
复制
$ ls /dev | grep -i video
$

没什么..。全ls /dev 这里.

2.使用ffmpeg列出设备

代码语言:javascript
复制
$ ffmpeg -devices
ffmpeg version 3.2-static http://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.4.1 (Debian 5.4.1-3) 20161019
  configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-5 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gray --enable-libass --enable-libebur128 --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg
  libavutil      55. 34.100 / 55. 34.100
  libavcodec     57. 64.100 / 57. 64.100
  libavformat    57. 56.100 / 57. 56.100
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100
Devices:
 D. = Demuxing supported
 .E = Muxing supported
 --
 D  dv1394          DV1394 A/V grab
 DE fbdev           Linux framebuffer
 D  lavfi           Libavfilter virtual input device
 DE oss             OSS (Open Sound System) playback
  E v4l2            Video4Linux2 output device
 D  video4linux2,v4l2 Video4Linux2 device grab
 D  x11grab         X11 screen capture, using XCB

这里有一些有趣的结果,没有指向文件系统上的设备或其他任何东西。

只要在ffmpeg中引用这些设备的名称,就会抛出一个明显的Cannot open video device,因为这些名称并不是实际的设备。

3.试用v4l2-utils

代码语言:javascript
复制
$ v4l2-ctl --list-devices
Failed to open /dev/video0: No such file or directory
代码语言:javascript
复制
$ v4l2-sysfs-path
Alsa playback device(s): hw:0,0

4.尝试在整个文件系统中搜索

只找到了我猜是专有的解决方案。

代码语言:javascript
复制
$ ls /run | grep video
video_mainstream
video_rawstream
video_substream

$ ls -la /run/video_mainstream/
total 0
drwx------    2 root     root            60 Feb 23 17:03 .
drwxr-xr-x   14 root     root           360 Jan  1  1970 ..
srwxrwxrwx    1 root     root             0 Jan  1  1970 control

不知道这个空control文件是什么。

代码语言:javascript
复制
$ ls /mnt/data/bin/
agent_client                  log2tf.sh                     miio_client                   miio_nas_syncer               miio_sdcard                   network_governor.sh           wifi_start.sh
factory                       log_diag.sh                   miio_client_helper_nomqtt.sh  miio_ota                      miio_send_line                play_audio_test
fetch_av                      miio_agent                    miio_devicekit                miio_qrcode                   miio_stream                   post-ota.sh
ipc_client                    miio_alarm                    miio_md                       miio_record                   mortoxc                       pre-ota.sh
log2mi.sh                     miio_algo                     miio_nas                      miio_recv_line                mortoxd                       shbf_client

很多专有脚本和二进制文件。我用精灵工具和十六进制编辑器(fetch_avmiio_streammiio_record)分析了一些,但没有发现任何有用的东西。

摄像头是小米mjsxj02cm (SoC msc313e,摄像头传感器SC2235),它使用的是一个基于linux的固件。

EN

回答 1

Unix & Linux用户

发布于 2019-02-23 20:37:18

基于dmesgmsc313e数据表的部分回答:

摄像机模块本身通过I2C控制,通过DVP/MIPI传输图像数据,有多个硬件图像编码器、彩色处理模块等。

从…

代码语言:javascript
复制
MSYS: DMEM request: [S1:VENCDMP1]:0x00069AE0
MSYS: DMEM request: [S1:VENCDMP0]:0x00069AE0
MSYS: DMEM request: [S1:VENCDMOUT]:0x0000A100
MSYS: DMEM request: [S0:VENCDMP1]:0x0007F800
MSYS: DMEM request: [S0:VENCDMP0]:0x0007F800
MSYS: DMEM request: [S0:VENCDMOUT]:0x0000A800

我猜VENC的意思是“视频编码器”。还有很多DMA内容,一个"RTMPQ“(队列)等等。

所以我猜工作流是基于硬件和DMA传输的。CPU只是设置这些传输,并让硬件块做他们的事情。

你没有说这个东西是如何连接起来的,但是如果它充当一个USB摄像头设备,一个选择就是USB驱动程序有一个专用的内存区域作为其他硬件块产生的编码图像的目的地,它只会读出图像并通过USB传输。

这将很难以任何方式进入和修改,但至少您可以通过/dev/mem检查具有已知地址的内存区域,并将它们与接收到的图像进行比较。

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

https://unix.stackexchange.com/questions/502541

复制
相关文章

相似问题

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