Pular para o conteúdo principal

Desenvolvimento de Vídeo e ISP

Esta página foca no pipeline de vídeo do produto e nas interfaces de ISP. Para um ambiente de aplicação C/C++ comum e implantação, siga o guia de início rápido em recamera_pro_toolchain. Os detalhes de configuração de rockit, IQ e sensor referenciados aqui são tópicos avançados do pacote de código-fonte completo.

Conceito Central: O Pipeline rockit MPI​

O processamento de vídeo da Rockchip usa o modelo rockit (MPI, Media Process Interface) de módulos, canais e ligações. Evite operar V4L2 diretamente. Abreviações de módulos:

MóduloNome CompletoFinalidade
VIVideo InputCaptura quadros do sensor através do ISP
VPSSVideo Process Sub SystemRedimensionamento multicanal, corte e conversão de formato
VENCVideo EncoderCodificação H.264 / H.265 / JPEG / MJPEG
VDECVideo DecoderDecodificação
VOVideo OutputEnvia quadros para um display
RGNRegionSobreposições de OSD e marcas d'água
AI / AOAudio In / OutCaptura / reprodução
AENC / ADECAudio Encoder / DecoderCodificação / decodificação de áudio
AVSAround View SystemCostura de visão surround de múltiplas câmeras
IVSIntelligent Video SurveillanceAnálise inteligente, como detecção de movimento
TDETwo Dimensional EngineAceleração 2D
MBMedia BufferGerenciamento de pool de buffers de mídia
SYSSystemInicialização, ligação e gerenciamento de memória

Os cabeçalhos correspondentes estão em output/out/media_out/include/. Eles seguem a convenção de nomenclatura rk_mpi_<module>.h (por exemplo, rk_mpi_vi.h, rk_mpi_venc.h e rk_mpi_sys.h). Outros cabeçalhos incluem rk_debug.h, rk_defines.h e rk_errno.h.

Pipeline típico:

sensor → VI(dev0/pipe0/chn0) → VPSS(grp0) → VENC(chn0) → RTSP/File
↘ RGN overlay
↘ IVS intelligent analysis

Conecte módulos com RK_MPI_SYS_Bind(). Os dados então fluem automaticamente, portanto você não precisa mover os quadros manualmente.

Índice de Exemplos Existentes​

media/samples/simple_test/ — Exemplos Mínimos de Arquivo Único (Ponto de Partida Recomendado)​

Cada arquivo .c é um programa completo, compilável de forma independente. O nome do arquivo descreve o pipeline:

ArquivoDemonstração
simple_vi_get_frame.cCaptura quadros de VI; o menor exemplo de VI
simple_vi_get_frame_rkaiq.cCaptura quadros e inicializa rkaiq manualmente
simple_vi_bind_venc.cVI para VENC, codificando para um arquivo
simple_vi_bind_venc_jpeg.cCaptura de snapshot JPEG
simple_vi_bind_venc_rtsp.cVI para VENC para streaming RTSP; o ponto de partida mais comum
simple_vi_bind_venc_rtsp_lowdelay.cRTSP de baixa latência
simple_vi_bind_venc_rtsp_eptz.cPTZ eletrônico
simple_vi_bind_venc_svc_rtsp.cCodificação escalável SVC
simple_vi_bind_venc_osd.cSobreposição OSD
simple_vi_bind_vpss_bind_venc.cAdiciona VPSS para múltiplos streams
simple_vi_bind_vpss_bind_vo.cAdiciona saída de display
simple_vi_bind_ivs.cConecta análise inteligente
simple_vi_bind_avs_bind_venc.cCostura de visão surround
simple_vi_gdc_vo.cCorreção de distorção
simple_vdec_bind_vo.c / simple_vdec_bind_vo_rtsp_lowdelay.cDecodificar e exibir / re-streaming de baixa latência
simple_ai_bind_aenc.c / simple_adec_bind_ao.c / simple_ao_send_frame.cCaptura e codificação de áudio / decodificação e reprodução / reprodução direta de quadros
simple_multi_ahd_vpss_test.cAHD multicanal
rv1126b/simple_irfpa_vi_bind_venc_rtsp.cApenas RV1126B: matriz de plano focal infravermelho e streaming

O diretório simple_test/ também inclui rk_2_1920x1080.json / .xml como um exemplo de calibração AVS de câmera dupla 1080p.

media/samples/example/ — Exemplos Completos​

SubdiretórioArquivo
vi/sample_vi.c, sample_multi_vi.c, sample_vi_eis.c (estabilização eletrônica de imagem)
venc/sample_vi_vpss_osd_venc.c、sample_multi_vi_avs_osd_venc.c
vo/sample_vi_vo.c
audio/sample_ai.c、sample_ai_aenc.c
avs/sample_avs.c、sample_multi_vi_avs.c
demo/sample_demo_vi_venc.c、sample_demo_dual_camera.c、sample_demo_dual_camera_wrap.c、sample_demo_multi_cam.c、sample_demo_multi_camera_eptz.c、sample_demo_eis.c、sample_demo_aiisp.c、sample_demo_dual_aiisp.c、sample_demo_vi_avs_venc.c
test/Testes de estresse:sample_venc_stresstest.c、sample_vpss_stresstest.c、sample_isp_stresstest.c、sample_mulit_isp_stresstest.c、sample_multi_cam_stresstest.c、sample_rgn_stresstest.c、sample_ai_aenc_adec_ao_stresstest.c、sample_avs_stresstest.c、sample_vdec_vo_stresstest.c、sample_vdec_vpss_vo_stresstest.c、sample_demo_*_stresstest.c

Para testes de estabilidade, execute o teste de estresse correspondente em test/.

Exemplos em Nível de Aplicação em project/app/​

DiretórioConteúdo
testdemo/low_delay_net_displayDisplay de rede de baixa latência
testdemo/yoloworld_demoDemo de detecção YOLO-World (inclui 3rdparty, resources e RkLunch.sh)
aov_sample/Visão sempre ativa de baixo consumo:sample_aov_aiisp_iva_venc.c、sample_aoa_capture.c、sample_aov_audio.c、resume_suspend_test.sh
cvr/Gravação veicular
ao_record_demo/Demo de gravação de áudio; seu Makefile é um modelo útil para linkar rockit
uvc_app_tiny/Modo de câmera UVC
recamera_ipc/A implementação completa do produto; veja Arquitetura de Serviço do Produto

Compilar e Executar Exemplos​

Os exemplos são compilados com media (make -C ./samples é chamado pelo alvo all em media/Makefile):

./build.sh media
ls output/out/media_out/ # should contain the sample binaries

Para RV1126B, a compilação adiciona automaticamente -DRV1126B e usa arquivos-fonte específicos do chip em simple_test/rv1103_rv1106_rv1103b_rv1126b/ e simple_test/rv1126b/.

Copie um exemplo para o dispositivo e execute-o:

scp output/out/media_out/bin/simple_vi_bind_venc_rtsp root@<device-ip>:/userdata/
ssh root@<device-ip>
# /userdata/simple_vi_bind_venc_rtsp --help

Aviso de conflito de recursos: No firmware do produto, rkipc (recamera_ipc) já está em execução e possui os recursos de VI/VENC/ISP e o serviço RTSP na porta 5554. Um exemplo pode falhar porque os nós de dispositivo já estão em uso. Pare o aplicativo antes de depurar:

# sh /oem/usr/bin/RkLunch-stop.sh
# Or use /etc/init.d/S21appinit stop

Não mate serviços do sistema indiscriminadamente para acessar nós de dispositivo. Reinicie-os após a depuração. Em produção, coordene o acesso por meio de configuração compartilhada ou de um procedimento explícito de parada de serviço.

Arquitetura de Streaming RTSP (Importante)​

O streaming na reCamera Pro usa duas etapas:

recamera_ipc(rkipc) internal RTSP service listening on 127.0.0.1:5554
↓ rtsp://127.0.0.1:5554/live/0 (main) /live/1 (sub)
go2rtc converts the stream
↓ WebRTC :8555 / RTSP :554 (optional) / HLS, etc.
External clients

A configuração está em project/cfg/BoardConfig_Recamera2/overlay/overlay-buildroot-go2rtc/oem/usr/etc/go2rtc/go2rtc.yaml. Se a porta 554 é exposta externamente é controlado pelas configurações enable nas seções [video.0.rtsp], [video.0.onvif] e [video.1.rtsp] de /userdata/config/rkipc.ini. Veja Acesso e Depuração do Dispositivo.

O arquivo de configuração padrão para recamera_ipc é project/app/recamera_ipc/src/rv1126b_ipc/rkipc-3840x2160.ini. Ele contém configurações de resolução, taxa de bits, taxa de quadros e RTSP/ONVIF.

Para uma aplicação de streaming personalizada, há duas opções:

  1. Usar rockit e librtsp: Inicie seu próprio serviço RTSP como em simple_vi_bind_venc_rtsp.c (faça o link com -lrtsp) e escolha uma porta diferente de 5554.
  2. Usar GStreamer: O dispositivo possui GStreamer 1.22 (a lista de plugins ainda precisa ser verificada no hardware) e pode capturar com v4l2src. O seguinte comando de sondagem foi registrado como funcional:
# gst-launch-1.0 -v v4l2src device=/dev/video13 num-buffers=30 \
# ! 'video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1' \
# ! videoconvert ! fakesink

Os números dos nós de dispositivo (como /dev/video13) dependem do firmware e podem mudar entre versões. Confirme-os no dispositivo com v4l2-ctl --list-devices.

ISP e rkaiq​

Localizações do Código-Fonte​

  • Código-fonte do mecanismo:media/isp/camera_engine_rkaiq/
  • Arquivo IQ:media/isp/camera_engine_rkaiq/rkaiq/iqfiles/isp35/(esta configuração de placa usa isp35) |
  • Calibração FEC:media/isp/camera_engine_rkaiq/IspFec/fec_calib/
  • Cabeçalhos (após a compilação): output/out/media_out/include/rkaiq/, com subdiretórios como uAPI, uAPI2, algos, common, xcore, iq_parser, iq_parser_v2 e smartIr
  • Bibliotecas: -lrkaiq (também faça o link com -lstdc++ -lm)

O código mais recente usa consistentemente uAPI2 (rk_aiq_user_api2_*.h); apenas compilações com a macro RV1126_RV1109 usam a uAPI mais antiga.

Arquivos IQ na Configuração da Placa​

A configuração da placa especifica:

export RK_CAMERA_SENSOR_IQFILES="ainr/sc450ai_default_default.json ainr/sc450ai ainr/sc850sl ainr/sc850sl_default_default.json"
export RK_CAMERA_SENSOR_CAC_BIN=""
export RK_AIISP_MODEL=NONE

Isso empacota arquivos IQ de AINR (redução de ruído por IA) para os sensores SC450AI e SC850SL na imagem. O modelo AI-ISP está desativado (RK_AIISP_MODEL=NONE).

No dispositivo, os arquivos empacotados estão localizados em /oem/usr/share/iqfiles/, e /etc/iqfiles é um link simbólico para este diretório (criado por __PACKAGE_OEM() / __PACKAGE_ROOTFS() em build.sh).

Substituir ou Ajustar Arquivos IQ​

  • Durante a depuração, substitua o arquivo diretamente no dispositivo: /oem/usr/share/iqfiles/<sensor>/<Module>.json(remonte /oem se estiver somente leitura), depois reinicie rkipc para aplicar a alteração.
  • Para uma versão de release, coloque o arquivo JSON ajustado de volta em media/isp/camera_engine_rkaiq/rkaiq/iqfiles/isp35/ainr/ e liste-o em RK_CAMERA_SENSOR_IQFILES, depois recompile media e o firmware.

Para ferramentas e procedimentos de ajuste, consulte docs/zh/isp/Rockchip_Tuning_Guide_ISP35_CN.pdf、Rockchip_Color_Optimization_Guide_ISP39_ISP33_ISP35_CN.pdf、Rockchip_Development_Guide_IRFPA_CN.pdf (infravermelho) e Rockchip_Development_Guide_FEC_CN.pdf (calibração de distorção).

Sensores e drivers de kernel​

O fragmento de kernel rv1126b-recamera2.config compila muitos drivers de sensor como módulos:

SC450AI SC850SL SC200AI SC3336 SC401AI SC4336 SC530AI SC635HAI SC00AI series
GC2053 GC8613 GST412C IMX415 IMX464 IMX586 IMX708 OS04A10 PS5458
TECHPOINT(AHD Decoding)

Ele também habilita CONFIG_VIDEO_ROCKCHIP_FEC=y (hardware de correção de distorção) e CONFIG_OF_OVERLAY=y (DTBO overlays em tempo de execução); CONFIG_VIDEO_RK_IRCUT está desativado.

Device trees relacionados à câmera:

ArquivoFinalidade
rv1126b-recamera2-v1.dtsPonto de entrada de nível superior, model = "Rockchip RV1126B RECAMERA PRO Board"
rv1126b-recamera2-cam-csi0.dtsi / -cam-csi1.dtsiCaminhos de câmera CSI0 / CSI1
rv1126b-recamera2-ext-cam-csi1.dtsCâmera da placa de expansão (compilada como .dtbo)
rv1126b-recamera2-baseboard-0.dts / -baseboard-1.dtsVariantes da placa base
rv1126b-recamera2-extboard-0.dts / -extboard-1.dtsVariantes da placa de expansão
rv1126b-recamera2-disp.dtsiDisplay

RK_KERNEL_RC_DTO=y habilita DTBO (Runtime Device Tree Overlay). As saídas de compilação rv1126b-recamera2-ext-*.dtbo são copiadas pelo build.sh para /oem/usr/share/. Na inicialização, a identificação da placa (S00board-id) lê o ADC e grava /run/board_id.env; o sistema usa essas informações para selecionar um overlay dinamicamente. Esse mecanismo permite que uma única imagem de firmware ofereça suporte a várias configurações de hardware do reCamera Pro. Consulte Personalização do sistema (DTS / Kernel / Buildroot / Overlay).

RGA e conversão de formato​

media/rga/ fornece aceleração 2D para redimensionamento, conversão NV12↔RGB, rotação e mesclagem. Faça o link com -lrga.

Um caso de uso comum: VENC requer NV12, enquanto o modelo de NPU requer RGB. Converter com RGA é muito mais rápido e usa menos CPU do que videoconvert.

Não passe bytes NV12 brutos diretamente para um modelo RGB/BGR. Converta o formato de pixel e normalize os dados explicitamente.

Documentação relacionada​

DocumentoCaminho
Guia do desenvolvedor Rockit Runtimedocs/zh/media/Rockchip_Developer_Guide_Linux_Rockit_Runtime_CN.pdf
Guia da API MPI em Cdocs/zh/media/Rockchip_Developer_Guide_MPI_C_CN.pdf
Guia do driver VIdocs/zh/isp/Rockchip_Driver_Guide_VI_CN.pdf
Guia do driver de câmeradocs/zh/isp/Rockchip_Developer_Guide_Camera_Driver_CN.pdf
Desenvolvimento e ajuste do ISP35docs/zh/isp/Rockchip_Development_Guide_ISP35_CN.pdf、Rockchip_Tuning_Guide_ISP35_CN.pdf
Estabilização eletrônica de imagem EISdocs/zh/media/Rockchip_Developer_Guide_EIS_CN.pdf、Rockchip_RV1126B_Development_Guide_DIS_CN.pdf
Modo de baixo consumo AOVdocs/zh/media/Rockchip_Developer_Guide_Linux_AOV_CN.pdf
Gravação veicular DVRdocs/zh/media/Rockchip_Developer_Guide_Linux_DVR_CN.pdf
Solução de problemas do VENCdocs/zh/media/Rockchip_Trouble_Shooting_Linux_VENC_CN.pdf
Calibração AVSdocs/zh/media/Rockchip_Developer_Guide_AVS_Calib_Product_CN.pdf
Inicialização rápidadocs/zh/ipc/Rockchip_Developer_Guide_Linux_RKAI_CN.pdf (Thunder Boot)

Suporte técnico e discussão sobre o produto​

Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...