Como construímos um aplicativo iOS para gravar um vídeo 3D (estudo de caso)
Publicados: 2022-03-10Nossa equipe também foi atraída pelas filmagens em 3D. Estudamos minuciosamente as características do aparelho visual humano e os detalhes técnicos da fotografia estereoscópica. Então, decidimos desenvolver um aplicativo para iOS para gravar vídeos em 3D e enviar os vídeos para o YouTube. A ideia por trás do aplicativo era facilitar a gravação de vídeo 3D montando dois iPhones em um quadro especial - e nós conseguimos! Foi assim que o aplicativo Stereo Video Recorder apareceu.
Decidimos compartilhar com os leitores da Smashing Magazine nossa investigação sobre a criação de vídeo 3D. Gostaríamos também de falar sobre os recursos técnicos de criação do aplicativo e fornecer desenhos detalhados da estrutura usada para montar os iPhones.
Como tudo começou
Em nosso estudo de recursos de vídeo 3D, começamos com experimentos em realidade virtual. Construímos uma moldura de papelão e olhamos para o mundo através de dois iPhones em formato 3D. Detalhes de nossa pesquisa podem ser encontrados em nosso blog. Nós vamos mais longe aqui.

Dando continuidade a esta pesquisa, decidimos criar outro protótipo do aplicativo, um que permite gravar vídeo 3D estereoscópico e carregá-lo no YouTube.
A estereoscopia é uma maneira de criar a ilusão de profundidade em uma imagem plana. A gravação estéreo é conhecida desde o século XIX. Ao criar vídeo 3D estereoscópico, simulamos a visão binocular. Devido à distância entre as pupilas, é muito mais fácil para o cérebro humano analisar o volume do espaço circundante – a distância dos objetos. A estereoscopia binocular é amplamente utilizada na indústria cinematográfica. Dificilmente você pode encontrar uma obra-prima de Hollywood que não faça uso do formato estéreo.
O objetivo do nosso protótipo de aplicativo era gravar vídeo simultaneamente com duas câmeras diferentes do iPhone e depois mesclar os arquivos de vídeo resultantes em um para visualização usando qualquer óculos 3D - por exemplo, Google Cardboard, um capacete de realidade virtual ou uma TV 3D.
Imagem estéreo e nossa percepção de uma imagem 3D
Deixe-me elaborar sobre imagens estéreo e nossa percepção de imagens 3D. Na verdade, a estereografia funciona como nossos olhos, que evoluíram com o tempo. Como há uma distância entre nossos dois olhos, as imagens projetadas nas retinas dos olhos esquerdo e direito são um pouco diferentes. Essa diferença é chamada de paralaxe (um efeito em que a posição de um objeto parece ser diferente quando vista de duas posições diferentes). No entanto, o observador não vê duas imagens separadas. O aparato visual forma uma percepção de uma única imagem espacial e pode sentir volume, distância, etc. É importante entender que o aparato visual detecta, processa e projeta imagens espaciais e objetos localizados no espaço em determinados pontos.

Uma compreensão de como o aparato visual humano funciona permite uma investigação completa de como o material visual precisa ser preparado e reproduzido para que o espectador possa ter uma noção de uma imagem 3D completa.
Vamos ver tudo em ordem.
Como qualquer dispositivo que opera sob as leis da física, o aparato visual humano tem suas próprias características e limitações.
Antes de tudo, precisamos entender que, em termos de nosso processo visual, focamos nosso olhar em apenas um único ponto, chamado ponto de vista (POV). Na verdade, POV é o ponto onde os olhos estão focados e por onde passam as linhas de visão esquerda e direita. Dependendo da distância do POV, o ângulo entre as linhas de visão dos olhos esquerdo e direito será diferente. Os olhos são direcionados de tal forma que as linhas convergem no POV. Essas linhas são paralelas quando a pessoa olha para longe, ou seja, para o infinito.

As imagens projetadas na retina diferem ligeiramente devido ao pequeno deslocamento dos olhos. Isso geralmente se manifesta na forma de deslocamento da imagem que a pessoa está olhando – para a esquerda para o olho esquerdo e para a direita para o olho direito. Esse fenômeno, já mencionado, é chamado de paralaxe.
No entanto, o aparelho visual pode perceber o volume apenas em certos valores de paralaxe. Dependendo da distância do objeto, a paralaxe será diferente para objetos próximos e distantes. Pode ser que a paralaxe ultrapasse o valor do limite e a pessoa veja não um objeto 3D, mas uma imagem bifurcada. Um experimento envolvendo a mudança de visão de objetos próximos para objetos distantes poderia oferecer uma melhor compreensão das especificidades disso.

Como pode ser visto na figura, se você fixar sua visão em primeiro plano, os objetos de fundo começarão a se bifurcar. Se você fixar sua visão no plano de fundo, a imagem em primeiro plano se bifurcará. Essa característica do aparato visual desempenha um papel essencial nas características da filmagem 3D e na reprodução de imagens estéreo.
Na vida comum, não percebemos esse efeito porque estamos acostumados a seguir apenas um objeto e, quando você muda de visão, sua visão se adapta rapidamente às novas condições. No entanto, quando tentamos projetar artificialmente uma imagem volumétrica usando duas imagens com uma paralaxe predeterminada, o aparato visual não consegue mais se adaptar tão rapidamente quanto costuma fazer. Para que o aparato visual funcione em modo normal, o equipamento de vídeo 3D deve ser ajustado aos olhos do espectador, analisando onde está localizado o ponto de observação. Este equipamento também deve criar imagens estéreo com a paralaxe necessária.
No entanto, implementar isso é tecnicamente muito difícil. Normalmente, é usado um esquema simples com parâmetros de disparo geométricos e técnicos fixos. Esses parâmetros serão diferentes para vistas de perto e distantes. Por parâmetros geométricos e técnicos, entendemos o campo de visão das câmeras, o deslocamento horizontal das câmeras a partir do centro, o ângulo de rotação das câmeras e o ponto de convergência das câmeras.
Portanto, você não poderá fotografar objetos igualmente próximos e distantes se tiver apenas um conjunto de equipamentos de filmagem (duas câmeras e um quadro). Mais precisamente, você poderia filmar, mas seria extremamente desconfortável para uma pessoa assistir a um vídeo em que, por exemplo, o equipamento é ajustado para uma visão distante, mas filma uma visão de perto, ou vice-versa, com o efeito estéreo expressa fracamente em segundo plano.

Da ideia à prática: como montar os iPhones
Voltemos à nossa ideia. Decidimos desenvolver um protótipo de aplicativo móvel que pode gravar vídeo 3D estéreo. Considerando todos os itens acima, precisamos avaliar o seguinte:
- a possibilidade básica de gravar uma imagem estéreo usando dois iPhones;
- o alcance efetivo de distâncias que garantiria uma percepção estéreo de alta qualidade e confortável, levando em consideração as condições usuais de uso de uma câmera.
Quando chegamos muito perto de criar um protótipo, a primeira coisa que fizemos foi avaliar o potencial da câmera do iPhone para nossa tarefa. Ficamos agradavelmente surpresos ao descobrir que o iPhone oferece um ângulo de visão aceitável para um close-up. Como já mencionado, apenas colocar duas câmeras lado a lado não é suficiente para obter um bom efeito estéreo. Normalmente, o algoritmo para calcular o disparo começa com a definição dos parâmetros do plano - ou seja, as distâncias dos objetos mais próximos e mais distantes e as distâncias entre os objetos no plano do quadro. Os parâmetros de instalação são então selecionados com base nesses dados.
Um cálculo simplificado da distância entre câmeras pode ser feito com base nesta fórmula:

-
Parallax<sub>fore</sub>
define o deslocamento máximo da imagem de primeiro plano quando os quadros do par estéreo se sobrepõem. -
L<sub>fore</sub>
= distância do objeto em primeiro plano -
f
= distância focal da lente -
L
= distância ao ponto focal da lente -
M
= zoom do quadro
No nosso caso, tivemos que mudar um pouco o algoritmo, porque estávamos usando uma câmera padrão e, portanto, a distância focal da lente é definida de forma rígida. Nossa tarefa era obter um efeito estéreo confortável e uma faixa aceitável de distâncias para o objeto de disparo. Assim, precisávamos realizar vários experimentos — arranjando as duas câmeras uma em relação à outra — para encontrar a distância necessária entre seus centros (a distância entre os centros das câmeras) e os ângulos de convergência.
Para simplificar a tarefa no processo de prototipagem, decidimos não girar as câmeras para alcançar a convergência em um determinado ponto, mas usar a convergência no infinito. Descobriu-se que, para obter o melhor resultado, é necessário ajustar com precisão o ângulo de convergência das câmeras. E se levarmos em conta que planejamos fazer uma moldura de papelão para montar os iPhones, ajustar o ângulo de convergência das câmeras fica praticamente impossível. Assim, após uma série de experimentos, chegamos a um compromisso, obtendo o equilíbrio ideal entre a distância entre as câmeras para permitir fotografar na zona próxima e obter um bom efeito estéreo.


Nosso objetivo era desenvolver o quadro mais simples para os iPhones, que fosse fácil de fabricar, fosse conveniente de operar, fornecesse os parâmetros de disparo necessários e tivesse a rigidez necessária. Assim, optamos por um modelo 3D que pode ser feito de material plástico ou espuma (poliestireno, neste caso) por fresagem ou impressão 3D. No futuro, é claro, vamos querer desenvolver um dispositivo mais simples de fazer – por exemplo, um dispositivo de papelão.
A única limitação de hardware no momento é que você precisa usar os mesmos dispositivos, com câmeras absolutamente idênticas.


Abaixo estão os desenhos detalhados do quadro para diferentes versões de dispositivos com tamanhos de tela de 4,0, 4,7 e 5,5 polegadas - adequados para o iPhone 6+ e 6S+, para o 6, 6S e 7 e para o 5 e 5S.



Aplicativo para gravação de vídeo 3D estereoscópico
O aplicativo é executado simultaneamente em dois dispositivos, mas o disparo é controlado a partir de apenas um dos dispositivos, portanto, não há necessidade de controlar o processo de disparo de alguma maneira especial.
De forma simplificada, o cenário de uso padrão para o aplicativo consiste na seguinte sequência de ações:
- Monte os dois iPhones no quadro.
- Execute o aplicativo nos dois dispositivos.
- Determine quais dos dispositivos servirão como mestre e quais como escravo. Comece a gravar a partir do dispositivo mestre. (Não execute nenhuma ação adicional no segundo dispositivo.)
- Após a gravação, aguarde a sincronização dos fragmentos gravados e a renderização de um vídeo pronto para upload no YouTube.
- Carregue o vídeo no YouTube a qualquer momento após a sincronização e visualize-o em sua TV 3D ou por meio de óculos de realidade virtual.
Vale ressaltar que o trabalho principal ocorre em apenas um dos iPhones, o dispositivo mestre. É neste iPhone que iniciamos as filmagens. O vídeo é processado e enviado para o YouTube também no dispositivo mestre. Leva algum tempo para preparar o vídeo para upload no YouTube. Isso dependerá do desempenho dos dispositivos utilizados e da qualidade da conexão entre os dispositivos mestre e escravo.
O segundo iPhone, atuando como escravo, é usado apenas como segunda câmera. No final da filmagem, ele envia o fragmento de vídeo para o dispositivo mestre.

As capturas de tela da tela principal do aplicativo, exibindo a galeria de vídeos gravados, são mostradas abaixo. Os vídeos podem ser vistos através de um player incorporado e no YouTube. Aqui, você também pode observar como outras funções de disparo (mestre e escravo) são atribuídas aos dispositivos.


Obstáculos Técnicos
Dessincronização
Todas as manipulações com os fragmentos de vídeo são realizadas com a ajuda do poderoso framework AVFoundation, usando, se possível, aceleração de hardware.
Para enviar para o YouTube, os fragmentos de vídeo são colados quadro a quadro, lado a lado. Obviamente, todo quadro esquerdo deve corresponder ao quadro direito por tempo. Com o menor atraso nos quadros de uma das fontes, o efeito estéreo será perdido ou distorcido (especialmente em cenas dinâmicas), e a imagem aparecerá duplicada.
Para resolver esse problema, começamos a gravar vídeos nos dispositivos ao mesmo tempo. Na verdade, a gravação não começa imediatamente após pressionar o botão iniciar, mas após um pequeno atraso no qual um determinado algoritmo é ativado - muito semelhante à forma como o protocolo de tempo de precisão (PTP) mede a distorção do relógio. Assim, conseguimos iniciar a gravação de vídeo com uma divergência de 30 a 50 milissegundos, que, na pior das hipóteses, corresponde a aproximadamente 1 quadro de dessincronização.
Bugs na conectividade multipeer do iOS
Usamos a biblioteca nativa do iOS Multipeer Connectivity para estabelecer a comunicação entre os dois dispositivos. Esta biblioteca estabelece uma conexão direta entre dispositivos na mesma rede Wi-Fi, bem como via Bluetooth ou usando algo semelhante ao Wi-Fi Direct no iPhone. Assim, você pode gravar e sincronizar fragmentos de vídeo mesmo em campo aberto, sem uma rede de Internet sem fio ou móvel. Mas é necessária uma conexão com a Internet para enviar o vídeo para o YouTube a partir do dispositivo mestre.
A principal razão pela qual decidimos usar esta biblioteca é que ela estabelece comunicação entre os dois dispositivos quando não estão conectados à mesma rede. Obviamente, sob más condições de filmagem 3D estéreo, o máximo que se pode esperar é uma conexão 3G. Para gravar um vídeo 3D, é vital poder – com atraso mínimo – transmitir pacotes de dados para sincronização. Além disso, se não houvesse conexão com a Internet, não poderíamos filmar. Portanto, a biblioteca Multipeer Connectivity tornou-se uma tábua de salvação. Além disso, é uma solução nativa para a plataforma Apple.
No entanto, vale ressaltar que nem tudo saiu exatamente como queríamos. Durante a integração com a Conectividade Multipeer, muitos bugs foram detectados e toda a biblioteca ficou extremamente instável em sua operação. A maioria dos recursos declarados estavam lá apenas em teoria. Quando os dispositivos operam dentro do mesmo segmento de rede, a Conectividade Multipeer opera com mais eficiência; a conexão é estabelecida por um período de tempo aceitável; dispersão permissível do tempo de entrega da mensagem é alcançada.
No entanto, se tivermos, relativamente falando, condições de filmagem 3D estéreo ruins ou, digamos, houver muitos dispositivos móveis em um só lugar, estabelecer uma conexão se tornará uma loteria. Tem-se a sensação de que a biblioteca da Apple ainda não está totalmente desenvolvida e ainda é bastante crua.
Vinculando os dispositivos
Implementamos o protocolo de vinculação automática na versão inicial do nosso protótipo. O protocolo em si consiste em um conjunto de regras pelas quais um coordenador é escolhido entre os dispositivos pares – com base na maioria – no momento inicial.
Em seguida, o coordenador coleta periodicamente estatísticas de telemetria de cada dispositivo passando um marcador especial em um círculo entre os dispositivos escravos. Com base nesses dados de telemetria, os pares de dispositivos montados no quadro são comparados. Após a identificação de um par, um mestre e um escravo são atribuídos no par e uma conexão direta entre eles é estabelecida. Nesta fase, a vinculação está completa.
Pesquisas Automáticas e Independentes
Quando necessário, buscas automáticas e independentes (com base em identificadores únicos) de dispositivos que participaram das sessões anteriores foram realizadas para sincronização (obtenção de faixas de vídeo gravadas no caso de falha de carregamento dos dados no dispositivo mestre no momento da gravação). As leituras do acelerômetro foram usadas principalmente para identificar quais dispositivos correspondiam ao par. O coordenador calculou a correlação entre os pares potenciais. Se a correlação ultrapassasse um determinado limite, os dispositivos eram considerados pares potenciais e os recursos secundários eram posteriormente testados.
Como não conseguimos superar totalmente os problemas mencionados acima com a Conectividade Multipeer, decidimos abandonar temporariamente a vinculação automática, porque isso afetaria o usuário médio muito negativamente e prejudicaria a experiência do usuário.
Com o que terminamos
No final, conseguimos um aplicativo muito interessante e de alta qualidade. Assistir a um vídeo gravado por meio deste aplicativo dá a você a mesma sensação de assistir a filmes em 3D no cinema.
É claro que o olho humano funciona de maneira um pouco diferente: suas linhas convergem em um determinado ponto do espaço e dependem do ponto de foco. No nosso caso, os olhos sempre olham em paralelo. No entanto, mesmo com esse fato, o efeito estéreo é muito pronunciado: o volume do espaço é sentido no primeiro plano, no meio do plano e no fundo aproximadamente o mesmo que na tela.
Você precisa de óculos VR ou TV 3D para visualizar este vídeo corretamente.
Então, tornamos possível usar o aplicativo Stereo Video Recorder para gravar vídeo estéreo 3D por conta própria para suas necessidades de negócios ou apenas por diversão!
Trabalhando em bugs e planos futuros
Nosso objetivo foi alcançado: estudamos os critérios para a criação de vídeo 3D e criamos um aplicativo que permite a qualquer usuário criar um vídeo estéreo. Mas nem tudo é tão fácil quanto parece. Precisamos trabalhar em algumas coisas. Tivemos muitos problemas com a biblioteca Multipeer Connectivity. Queremos substituí-lo ou encontrar uma solução alternativa para que o aplicativo funcione bem com acesso limitado à Internet.
Também precisamos:
- implementar focagem síncrona e medição de exposição nos dois dispositivos, bem como implementar a gravação de faixas de áudio estéreo;
- desenvolver um enquadramento mais pragmático para os dispositivos;
- integre o mecanismo de emparelhamento automático de dispositivos;
- fornecer suporte para diferentes opções de dispositivos e ser capaz de lidar com diferentes resoluções de vídeo (no momento, podemos gravar vídeo apenas com as mesmas versões do iPhone — por exemplo, um iPhone 5S só pode ser emparelhado com outro iPhone 5S);
- crie uma versão Android do aplicativo.
Nosso aplicativo Stereo Video Recorder já está na App Store. Você pode usá-lo para criar vídeo 3D. Temos certeza de que a tecnologia continuará a se desenvolver e que, eventualmente, haverá muito mais soluções para a criação de vídeo estereoscópico. Vamos tentar acompanhar os tempos.
Por favor, deixe seus comentários e idéias sobre o uso deste aplicativo. Ficaríamos gratos por sua opinião e feedback.
Leitura adicional no SmashingMag:
- Quatro maneiras de criar um aplicativo móvel, parte 1: iOS nativo
- Prototipagem de aplicativos iOS e Android com Sketch (com um brinde)
- O Futuro do Vídeo em Web Design
- Noções básicas de automação de teste para aplicativos, jogos e a Web móvel