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
役に立つものが見つかりませんでした。
PS:カメラは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カメラデバイスとして機能する場合、1つのオプションは、USBドライバに別のハードウェアブロックから生成されたエンコードされた画像のターゲットとして専用のメモリ領域があることです。画像を読み、USB経由で転送します。
何らかの方法でアクセスして修正することは困難ですが、少なくとも既知のアドレスでメモリ領域を確認して受信した画像/dev/mem
と比較することができます。