IPカメラ(Linuxを実行)のカメラモジュールデバイスを見つけようとしていますが、あまり成功していません。
私の主な目的は、カメラストリームを見つけることです。これにより、RTSPサーバーを接続できます。
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
ここにいくつかの興味深い結果がありますが、ファイルシステム上のデバイスなどを指し示すものは何もありません。
これらの名前は実際のデバイスではないため、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,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
多くの独自のスクリプトとバイナリ。 elfツールと16進エディター(fetch_av
、miio_stream
、miio_record
)を使用していくつかを分析しましたが、有用なものは見つかりませんでした。
追伸:カメラはXiaomi mjsxj02cm(SoC msc313e、カメラセンサーSC2235)で、Linuxベースのファームウェアを使用しています。
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カメラデバイスとして機能する場合、1つのオプションは、USBドライバーが他のハードウェアブロックによって生成されたエンコードされた画像の宛先として専用のメモリ領域を持っていることです。画像を読み取ってUSB経由で転送するだけです。
これにアクセスして変更するのは難しいでしょうが、少なくとも/dev/mem
を介して既知のアドレスを持つメモリ領域を検査し、それらを画像として受け取ったものと比較することができます。