IP 카메라(Linux 실행)용 카메라 모듈 장치를 찾으려고 하는데 성공하지 못했습니다.
나의 주요 목표는 RTSP 서버에 연결할 수 있도록 카메라 스트림을 찾는 것입니다.
2019년 2월 26일 업데이트됨
OpenMAX(OMX) 관련 라이브러리를 찾아보세요. 나는 GStreamer를 gst-omx와 크로스 컴파일하여 무엇을 할 수 있는지 알아보려고 노력했지만 여전히 성공하지 못했습니다.
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.so
내가 시도한 것
1. 영상장비 찾기/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
여기에는 몇 가지 흥미로운 결과가 있습니다. 내 파일 시스템의 장치나 그 어떤 것도 가리키지 않습니다.
Cannot open video device
ffmpeg에서 이러한 장치를 이름으로 단순히 참조하면 이러한 이름이 실제 장치가 아니기 때문에 분명해집니다 .
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,0
4. 전체 파일 시스템에서 무언가를 검색해 보십시오.
내가 독점적인 솔루션이라고 생각하는 것만 찾았습니다.
$ 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
많은 독점 스크립트 및 바이너리. 엘프 도구와 16진수 편집기( fetch_av
, miio_stream
, ) 를 사용하여 일부를 분석했지만 miio_record
유용한 것을 찾지 못했습니다.
추신: 카메라는 Xiaomi mjsxj02cm(SoC msc313e, 카메라 센서 SC2235)이며 Linux 기반 펌웨어를 사용합니다.
답변1
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
하고 받은 이미지와 비교할 수 있습니다.