O app da câmera veicular foi projetado para se integrar ao AAOS, oferecendo aos motoristas recursos de gravação de vídeo para aumentar a segurança. Este guia descreve os requisitos técnicos, as etapas de integração e as práticas recomendadas para garantir uma implementação bem-sucedida.
Pré-requisitos
Antes de continuar, verifique se estas condições foram atendidas:
SDK:
- O SDK 31 ou mais recente é obrigatório.
Hardware:
- Câmeras EVS ou Camera2 disponíveis para AAOS.
- É necessário ter espaço de armazenamento interno suficiente ou suporte para armazenamento externo removível
para fazer gravações de vídeo.
Requisitos de software:
- Suporte não agrupado. Para saber mais, consulte Apps desagregados.
- Permissões. A câmera veicular precisa de permissões do sistema.
Fazer o download do código-fonte
Encontre o código-fonte na Pesquisa de código do Android em:
O código-fonte é fornecido nestes três módulos:
- Serviço de câmera veicular. Streaming, gravação e lógica de acionamento.
- Gerenciador de câmera veicular. Conecta-se ao serviço de câmera veicular e expõe uma API estável para os clientes
- App de câmera veicular: consulte o app de câmera veicular usando a API Dashcam Manager.
Criar a câmera veicular
Use o Soong ou o Gradle para criar a Dashcam.
Soong
Antes de criar no Soong, limpe os diretórios .cxx
.
No Soong:
mma DashcamService DashcamManager-lib DashcamApp
Os APKs estão localizados em out/target/product/[lunch-target]/system/priv-app/
Gradle
No Gradle:
./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble
Os APKs estão localizados em out/aaos-apps-gradle-build/
Instruções detalhadas para criar a Dashcam com o Gradle estão disponíveis no
arquivo README
.
Permissões
Várias permissões do sistema são necessárias para o serviço e o app da câmera veicular.
A maneira mais simples de conceder essas permissões é incluí-las em uma configuração pré-criada usando o Blueprint ou o Make.
No blueprint:
Android.bp
android_app_import {
name: "DashcamApp-prebuilt",
apk: "DashcamApp.apk",
privileged: true,
certificate: "platform",
required: ["allowed_privapp_com.android.car.dashcam"],
}
Em "Criar":
dashcam.mk
PRODUCT_PACKAGES += \
DashcamApp
PRODUCT_COPY_FILES :=\
vendor/[path-to-vendor-prebuilts]/apps/CarCatApp/allowed_privapp_com.android.car.dashcam:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/com.android.car.dashcam.xml \
Crie um arquivo de permissões com o nome allowed_privapp_com.android.car.dashcam.xml
:
<permissions>
<privapp-permissions package="com.android.car.dashcam">
<permission name="" />
</privapp-permissions>
<privapp-permissions package="com.android.car.dashcam.app">
<permission name="" />
</privapp-permissions>
</permissions>
Adicione permissões do manifesto ao arquivo de permissões.
Para saber mais, consulte Prebuilt em uma imagem do sistema.
Sideload
O arquivo de permissões também pode ser transferido. Use esse método quando a dashcam pré-criada não estiver configurada.
Usando o arquivo de permissões criado na seção de pré-criações, execute:
adb root
adb remount
adb push allowed_privapp_com.android.car.dashcam.xml /etc/permissions/allowed_privapp_com.android.car.dashcam.xml
adb shell chmod 644 /etc/permissions/allowed_privapp_com.android.car.dashcam.xml
Configurar sobreposições
O serviço de câmera de painel tem configurações sobrepostas.
Configuração do serviço
dashcam-service/res/values/config.xml
Esse arquivo contém as configurações do serviço:
allow_internal_storage
Permitir gravações no armazenamento internosave_location
O nome do diretório para salvar gravações. O padrão é câmera de painel.max_storage_mb
Quanto armazenamento para permitir que a câmera veicular usemax_age_days
Por quanto tempo manter um arquivo antes da podaboot_startup_enabled
O serviço da câmera veicular é iniciado na inicialização do dispositivonotifications_on
Mostrar notificações quando a gravação começarnative_recorder
Usar APIs do NDK, padrão para APIs Javanative_renderer
Usar APIs do NDK, padrão para APIs Javadefault_app_component
O app padrão da câmera veicular, que tem acesso a gravações globais e a acionamentos globaisrecording_module
ComponentName da implementação de IRecordingModulestreaming_module
ComponentName da implementação de IRecordingModuletrigger_module
ComponentName da implementação de IRecordingModule
Configurar um acionador
Para acionar a configuração, execute:
dashcam-service/src/assets/config.xml
Esse arquivo contém configurações para gravar acionadores. A configuração do gatilho consiste em duas partes:
ID do anúncio precedente. O ID da câmera, EVS ou Camera2, dependendo do suporte.
prerollLengthMs
Duração do pré-roll armazenado com cada evento.
<Preroll>
<Camera
ID="0"
prerollLengthMs="10000" />
</Preroll>
Este exemplo mostra o ID da câmera 0 com um pré-rolagem de 10 segundos.
name
O nome exclusivo do acionadorcamera
ID da câmera, EVS ou Camera2, dependendo do que tiver suportesensorPropertyID
ID do sensordescription
Descrição do gatilho exibido na interfacerecordingLengthMs
Duração após o evento a ser gravada em milissegundos.sensorType
Qual tipo de sensor. As opções sãoVHAL
ouSENSOR_MANAGER
.sensorValueType
Tipo de dados produzidos pelo sensor. As opções sãoINT
,INT_ARRAY
,FLOAT
,FLOAT_ARRAY
eBOOLEAN, STRING
.thresholdType
Como avaliar o valor do sensor. As opções sãoAVERAGE
,BOOLEAN
,EQUALS
,LEAP
,LEAP_AVERAGE
,LEAP_OVER
,PEAK
ePEAK_HOLD
.thresholdValue
O valor a ser comparado com o valor do sensor e o tipo de limitethresholdExtra
Valor extra necessário para alguns tipos de limite, como o intervalo paraAVERAGE
triggerCooldown
Tempo de espera antes de acionar outro evento desse tipo em milissegundos.
<EventTriggers>
<EventTrigger
name="AEB"
camera="1 2"
sensorPropertyID="289411073"
description="Automatic Emergency Braking"
recordingLengthMs="20000"
sensorType="VHAL"
sensorValueType="INT"
thresholdType="EQUALS"
thresholdValue="2"
triggerCooldown="5000"/>
</EventTriggers>
Este exemplo mostra um sensor VHAL que produz valores inteiros em que comparamos uma igualdade com o valor de limite. Quando a condição de igualdade é atendida, um acionador grava nas câmeras 1 e 2.
<EventTrigger
name="SPEED"
camera="1 2 3 4"
sensorPropertyID="291504648"
description="Over speed"
recordingLengthMs="10000"
sensorType="VHAL"
sensorValueType="FLOAT"
thresholdType="AVERAGE"
thresholdValue="20.0"
thresholdExtra="1000"
triggerCooldown="2000"/>
Este exemplo mostra um sensor VHAL que produz valores flutuantes em que avaliamos
a média de uma faixa de amostras em relação ao valor de limite. O intervalo
de amostragem é definido em thresholdExtra
Módulos
O serviço de câmera de painel consiste em três módulos:
Stream contém a lógica para processar streams de câmeras.
Recording contém a lógica para processar gravações.
Trigger contém a lógica para acionar uma gravação com base nos dados do sensor. As APIs do módulo são definidas nas interfaces correspondentes,
IStreamModule
,IRecorderModule
eITriggerModule
, e expostas ao DashcamManager porDashcamServiceAPI
.
Módulos de sobreposição
O serviço de câmera de painel usa dashcam-service/res/values/config.xml
para determinar onde
encontrar as implementações do módulo. Oferecemos implementações padrão para cada
módulo. No entanto, cada módulo pode ser sobreposto definindo o componente no
valor de configuração correspondente.
Definir o nome do componente de implementação OEM de
IRecorderModule
comorecording_module
O nome do componente de implementação OEM de
IStreamModule
foi definido como o módulo de streaming.Definir o nome do componente de implementação OEM de
ITriggerModule
comotrigger_module
No momento da execução, o serviço da câmera de ré instancia o nome do componente definido em
config.xml
para cada módulo.
Guia para desenvolvedores de apps
A câmera veicular é uma solução e personalizável pronta para produção. A câmera usa as APIs do Dashcam Manager para se comunicar com Dashcam service
. A API
Dashcam Manager pode ser encontrada em IDashcamManager
. Qualquer app com as permissões
necessárias pode usar o Gerenciador de câmera de ré.
Permissões
O Camera2 e o EVS são compatíveis.
Pré-criado
A maneira mais fácil de conceder essas permissões é incluí-las na configuração pré-criada usando o Blueprint ou o Make.
OverlayUI
O app pode ser personalizado com sobreposições de recursos do ambiente de execução. Para saber mais, consulte Sobreposições de recursos de execução. Para acessar a lista de elementos sobreponíveis, consulte overlayable.xml.
Acionar gatilhos
Os gatilhos podem ser estendidos para a sessão atual com uma chamada
para DashcamManager.addTrigger()
. Os acionadores adicionados são mantidos apenas para a sessão atual.
Início automático
A gravação com início automático não é compatível. No entanto, um acionador manual pode ser
iniciado onBoot
com uma chamada para DashcamManager.startRecording()
Práticas recomendadas
Armazenamento. O armazenamento removível externo é altamente recomendado.
Experiência do usuário. Projete a interface do app Dashcam para ser intuitiva e fácil de usar, seguindo as diretrizes de design do AAOS.
Otimização de desempenho. Otimize o desempenho do app para minimizar o uso de recursos e garantir uma operação tranquila no AAOS.
Solução de problemas
Problemas de conectividade da câmera. O EVS ou o Camera2 precisam ter suporte e estar disponíveis no AAOS IVI.
Erros de armazenamento. Verifique o espaço de armazenamento disponível e gerencie as gravações. O armazenamento externo é altamente recomendado, já que o uso do armazenamento interno pode causar desgaste prematuro.