我试图找到一个IP相机的相机模块设备(运行Linux),但没有成功。
我的主要目标是找到相机流,以便我可以附加一个RTSP服务器。
发现与OpenMAX (OMX)相关的libs。我一直试图将GStreamer与gst交叉编译,看看我能用它做些什么,但仍然没有成功。
一个熟悉OMX的人,不介意给你指点?
$ 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.so1.在 /dev中查找视频设备
$ ls /dev | grep -i video
$没什么..。全ls /dev 这里.
2.使用ffmpeg列出设备
$ 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
$ v4l2-ctl --list-devices
Failed to open /dev/video0: No such file or directory$ v4l2-sysfs-path
Alsa playback device(s): hw:0,04.尝试在整个文件系统中搜索
只找到了我猜是专有的解决方案。
$ 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文件是什么。
$ 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_av,miio_stream,miio_record)分析了一些,但没有发现任何有用的东西。
摄像头是小米mjsxj02cm (SoC msc313e,摄像头传感器SC2235),它使用的是一个基于linux的固件。
发布于 2019-02-23 20:37:18
基于dmesg和msc313e数据表的部分回答:
摄像机模块本身通过I2C控制,通过DVP/MIPI传输图像数据,有多个硬件图像编码器、彩色处理模块等。
从…
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检查具有已知地址的内存区域,并将它们与接收到的图像进行比较。
https://unix.stackexchange.com/questions/502541
复制相似问题