Melhor prática da música K e tecnologia de vídeo curto - Exploração da tecnologia de áudio e vídeo "Sing Bar"

Conteúdo original, favor indicar a fonte para reimpressão

I. Introdução

  Com o desenvolvimento de aplicativos móveis hoje, quase todos os aplicativos têm funções relacionadas a áudio e vídeo.Em resumo, provavelmente há gravação de áudio e vídeo, reprodução de áudio e vídeo, processamento de efeitos especiais de áudio e vídeo e transmissão de áudio e vídeo.
  Os aplicativos de vídeo curto mais populares são Douyin e Kuaishou, o aplicativo de música K Sing Bar e National K song, e o novo Music Street de NetEase Cloud, bem como NetEase Cloud Music e QQ Music para ouvir músicas. Embora o modo de operação de cada aplicativo seja diferente, a implementação técnica é semelhante. O processamento de vídeo do software de vídeo curto é mais rico, existem filtros e adesivos muito legais, e o software de música K lida com mais detalhes da música, como volume, efeito sonoro e tom.
  O autor é um usuário anterior do Sing Bar. Desde seu desenvolvimento, a tecnologia de áudio e vídeo coberta pelo Sing Bar é relativamente abrangente. O professor Zhan Xiaokai, o chefe original da tecnologia de áudio e vídeo do Sing Bar, explicou o áudio móvel no livro "Advanced Audio and Video Guide". As melhores práticas de vídeo fornecem implementações específicas, então usarei o Sing Bar como uma referência para explorar tecnologias relacionadas a áudio e vídeo no terminal móvel. (A implementação do código é baseada no Android, mas para a operação de baixo nível de áudio e vídeo, as ideias de implementação de cada plataforma são praticamente as mesmas. Além disso, o autor nunca trabalhou na barra de canto. Se houver violação ou outro comportamento, por favor, deixe uma mensagem. Se você deseja se comunicar com o autor Para discutir a tecnologia de áudio e vídeo móvel juntos, deixe uma mensagem ou discuta no WeChat smzh_james).


Uma lista de diretórios de técnica
a, gravação de áudio (gravação, decodificador de áudio, reamostragem de áudio, mixagem de áudio)
Em segundo lugar, a reprodução de áudio e processamento de efeitos (volume, tom, som)
três gravações de vídeo (relacionadas à câmera, codificação de vídeo)
IV Efeitos de vídeo Processamento (beleza, filtros, adesivos)
5. Reprodução de vídeo (decodificação de vídeo, renderização de vídeo, sincronização de áudio e vídeo)
6. Mixagem de áudio e vídeo
(links de conteúdo serão atualizados sucessivamente)

2. Comparação de efeitos e análise de realização técnica

Consulte a interface do Sing Bar App e faça um software de música K simples, estilo preto e branco, mas cobre a maioria das funções, doravante chamadas de SuperKtv. A comparação do efeito é mostrada na figura abaixo.

(1) A

  imagem 1 da página da lista de músicas K é SuperKtv, a imagem 2 está cantando.

  A implementação do SuperKtv é relativamente simples, ele obtém diretamente os arquivos de áudio existentes no celular e os exibe em uma lista, possibilitando uma entrada para as funções subsequentes. Não há dificuldade na implementação, e todos que fazem o desenvolvimento entendem isso, então não vou repetir.

(2) As

  duas primeiras imagens na página de gravação de áudio são as páginas de gravação de áudio do SuperKtv, e a terceira imagem é a página de gravação de áudio do Sing Bar.

  • As letras
      são muito importantes para o software de karaokê. Um software profissional de karaokê, como o Sing Bar, tem uma enorme biblioteca de música. Para sincronizar com o canto, as letras geralmente têm um carimbo de hora para que possam ser roladas dinamicamente durante o canto. , E função de pontuação. A partir de uma análise técnica, a letra e a função de pontuação devem ser diferentes para cada música, esse aspecto não envolve tecnologia de áudio e vídeo, e o autor não tem muita energia para customizar a letra e a função de pontuação da música.
      Para que o SuperKtv e o Sing Bar tenham um maior grau de intimidade, ainda penso em maneiras de fazer esse trabalho. Para resolver rapidamente o problema de letras SuperKtv, só pode começar a partir da rede, usando a rede de letras https://www.90lrc.cn recursos de pesquisa poderosos, usando sua interface de pesquisa para pesquisar a música, Html retornou com a lista de resultados da pesquisa e, em seguida, analisar Html obtém o item de lista apropriado. Geralmente, o primeiro item é o mais apropriado, e o link da letra é retirado e, em seguida, o Html com a letra é obtido através do link da letra e o texto da letra pode ser obtido após a filtragem. O efeito de exibição é mostrado na Figura 1 acima. Uma maneira de realizar a função de pontuação é combinar o tom reconhecido dinamicamente com o conteúdo no arquivo predefinido durante o processo de canto.

  • A gravação de
       uma das funções principais do software de música K para requisitos de áudio de baixa latência de alto desempenho, neste ponto do que o Android IOS para fazer muito melhor, e a função é perfeita, com AudioUnit pode resolver a maioria dos problemas; Android8.0 menos OpenSL ES é recomendado, que é uma implementação simplificada de OpengSL em dispositivos incorporados; Android 8.0 e superior recomendam AAudio, uma interface de gravação leve, nascida para processamento de áudio de baixa latência. De acordo com o documento do site oficial, o desempenho de baixa latência é melhor. Bom, e dados os dados de teste de vários modelos de Pixel. No entanto, como existem muitos modelos Android e diferentes esforços de implementação de hardware, ambos não são tão bons quanto o AudioRecorder em compatibilidade. A equipe do Google Android encapsulou OpenSL ES e AAudio e o nomeou Oboe. Parece ter o ideal de alcançar o AudioUnit. Fornece uma interface de chamada unificada e é extremamente conveniente de usar. Oboe pode ser encontrado diretamente no GitHub https: // GitHub / Oboé , o demo fornecido é de grande valor de referência, mas de acordo com o feedback do GitHub, existem muitos problemas de uso, principalmente em relação a ruído e atraso. Estou ansioso para a atualização de acompanhamento para resolver completamente o problema que o Android tem sido criticado desde seu início.
       Outra solução para gravação de baixa latência é calcular o atraso de gravação. Presume-se que, se o atraso de gravação puder ser obtido, o som gravado pode ser avançado artificialmente por um período de tempo durante a mixagem na página de edição, e o resultado é quase nenhum atraso. Mas se você pode ser tão fácil de resolver se não for Android, o registro de cálculo de atraso não é fácil, cálculos brutos gravando atraso de hardware = atraso + atraso de buffer, Se houver mais cálculos no retorno de chamada de gravação, o atraso de cálculo precisa ser adicionado. Até agora, apenas o AAudio fornece um método para calcular o atraso. O embaraçoso é que o atraso medido é 0. Mesmo que dispositivos acima de 8,0 já tenham ocupado o mercado mainstream, certamente não é suficiente para software comercial suportar 8.0.O atraso do hardware só pode ser obtido por fabricantes com dados mais precisos, portanto a cooperação com os fabricantes é uma das soluções. Método. Para telefones celulares Huawei, o SDK da Huawei fornece o Api correspondente. Usando AudioKit pode obter diretamente o atraso de gravação e tem a função de ouvido e sete efeitos de som. Esta deve ser a melhor notícia que ouvi até agora.

  • A decodificação e reamostragem de áudio
       geralmente reproduzem o acompanhamento ou os vocais originais ao gravar no software de música K. para fornecer uma referência para o cantor. A API subjacente geralmente não fornece funções de decodificação, portanto, o acompanhamento é necessário antes de "preencher" os dados no buffer do dispositivo Ou a música original é decodificada nos dados originais, que é o famoso Pcm. Os arquivos de música geralmente estão no formato Mp3 ou AAC. Lame é recomendado para codificação e decodificação de Mp3, e Fdk-aac é recomendado para codificação e decodificação de AAC. Esses dois têm a melhor velocidade até agora e são mais adequados para aqueles com requisitos de tempo real. , Você pode usar ou compilar diretamente essas duas bibliotecas no FFmpeg, chamar a operação Api do FFmpeg, dar um passo para trás, usar diretamente o próprio algoritmo de decodificação do FFmpeg para completar as funções correspondentes, é claro, existem diferenças no desempenho. A prática comum na decodificação é compilar o FFmpeg com Lame ou Fdk-aac, e chamar a Api do FFmpeg para fazer a codificação e decodificação, porque a uniformidade de sua Api é muito vantajosa.
       Na plataforma Android, o MediaCodec também pode ser usado para decodificação. O sistema vem com Api, que é fácil de usar, tem mais documentos e usa decodificação de hardware, que é muito mais rápida do que a decodificação de software. Infelizmente, o MediaCodec só é fornecido após o Android 6.0 Interface C ++, considerando a unidade com IOS, a primeira é recomendada.
       Os pontos principais da reamostragem são a taxa de amostragem, o número de canais e a profundidade de amostragem (também chamada de precisão de quantização) do arquivo de música. A taxa de amostragem, o número de canais e a precisão de quantização de um determinado arquivo de música podem ser considerados incertos, mas a taxa de amostragem, o canal e a profundidade de amostragem suportada pelo hardware da plataforma de reprodução são limitados e certos, portanto, os dados de "enchimento" para o áudio O outro trabalho antes do buffer do dispositivo é a reamostragem, basta usar FFmpeg diretamente.A função de reamostragem fornecida pelo FFmpeg é mais poderosa, incluindo a taxa de amostragem, número de canais e profundidade de amostragem pode ser alterada. Você pode consultar o documento ou pesquisar na Internet. Deve-se notar que a maioria dos tutoriais de reamostragem FFmpeg na Internet ignoram um problema. Ao reamostrar de mono para canais duplos, a fim de garantir que o volume de áudio permaneça inalterado, o decibel (volume) real mudará ligeiramente. Os pontos também precisam de atenção especial.

  • Armazenamento de conteúdo de áudio
       Considerando que o conteúdo de áudio gravado pelo software de música K será editado posteriormente, é recomendável salvar os dados originais diretamente quando o espaço em disco não for limitado para facilitar as operações subsequentes. O espaço de uma música é geralmente dentro de 100 Mb. Se você considerar o espaço em disco, poderá codificar e salvar os dados gravados e, em seguida, decodificá-los durante a edição. Em relação à parte de codificação de áudio, iremos analisá-la em detalhes ao salvá-lo. Deve-se notar que o arquivo deve ser lido e escrito com frequência ao salvar dados. Considerando os problemas de desempenho, as operações assíncronas podem ser usadas para concluir. O problema de sincronização de thread de operações assíncronas pode ser usado na biblioteca Boost Fornece a fila livre de bloqueio para ser concluída.

(3) Página de edição de áudio


  As duas primeiras fotos são em SuperKtv, as duas últimas estão cantando. Ao escrever este artigo, a página do editor do Sing Bar passou por uma revisão. O layout da página passou por mudanças tremendas e o estilo é mais semelhante ao de Yinjie. Mas quando o autor imitou a interface do Sing Bar, os antigos usuários deveriam ficar mais claro que a aparência é muito parecida com a do SuperKtv.É uma pena que não consegui restaurar o Sing Bar App com a maior semelhança.

  • Reprodução de áudio O
       software de música K requer reprodução de áudio na página de edição e exige desempenho de alta baixa latência. O objetivo é reproduzir o conteúdo gravado anteriormente e o acompanhamento ao mesmo tempo, o que soa como ouvir o álbum de um cantor. Usar OpenSL ES e AAudio na plataforma Android é a melhor escolha. Para obter um melhor efeito de sincronização, é necessário escolher um Api de baixa latência. Além disso, também é necessário controlar com precisão o tempo de reprodução das duas faixas. A abordagem mais simples é abrir dois jogadores, um para os vocais e outro para o acompanhamento para obter o efeito de reprodução sincronizada. Mais útil é selecionar um jogador e mixar os dados Pcm dos vocais e acompanhamento para tocar. , A sincronização do último é melhor do que o primeiro e a eficiência é maior. O segundo esquema é usado em SuperKtv, e o efeito não é ruim. Antes de jogar, preste atenção ao canal, taxa de amostragem e profundidade de amostragem dos dados Pcm e faça uma nova amostragem, se necessário.

  • Controle de volume
       No processamento de áudio, é difícil processar o áudio codificado, geralmente processando os dados originais. O volume subsequente, os efeitos sonoros e o processamento do tom são todos processando Pcm.
       Como todos sabemos, o som é uma onda, e o volume pode ser entendido como a amplitude da onda, também chamada de intensidade. Alterar o volume significa alterar a amplitude da onda. Do ponto de vista matemático, para aumentar a amplitude de uma onda senoidal, basta multiplicá-la pelo ganho. Da mesma forma, o volume está certo. Os dados Pcm podem ser multiplicados pelo ganho, é claro, você pode usar o FFmpeg para resolvê-lo diretamente. Deve-se observar que os valores máximo e mínimo de cada quadro de dados não podem ser excedidos após o aumento da amplitude. Tomando a precisão de modelagem de 16 bits como exemplo, se o valor final for maior que 32767 ou menor que -32768, a qualidade do som será prejudicada e soa como O mesmo barulho.

  • Controle de
       tom O tom é determinado principalmente pela frequência do som, mas também relacionado à intensidade do som. Para uma certa intensidade de tons puros, o tom aumenta e diminui com o aumento e queda da frequência; para certas frequências de tons puros e tons puros de baixa frequência, o tom diminui com o aumento da intensidade do som, enquanto o tom de tons puros de alta frequência aumenta com o aumento da intensidade. Recomenda-se o uso de SoundTouch (https://sourceforge.net/projects/soundtouch/) para ajuste de pitch.O uso é relativamente simples e também possui funções como velocidade variável.
       O tom é determinado principalmente pela frequência da onda sonora. Está associado a pontos de conhecimento relacionados a ondas em matemática ou física, que podem ser realizados manualmente por você. É simplesmente entendido como uma reamostragem dos dados de áudio para outra frequência, mas o conteúdo dos dados não é reduzido. De acordo com a definição da transformada de Fourier, qualquer onda periódica pode ser decomposta em uma superposição de várias ondas senoidais. A prática comum aqui é transformar os dados Pcm no domínio da frequência pela transformada de Fourier e alterar a frequência da onda fundamental. Como a alteração da frequência pode fazer com que os dados diminuam ou aumentem, é necessário realizar o cálculo de interpolação e, finalmente, fazer o inverso de Fourier A transformação transforma os dados no domínio do tempo, e os dados Pcm com a frequência alterada podem ser obtidos, ou seja, o pitch é alterado.

  • Controle do efeito sonoro
       Como o som é uma onda, o efeito sonoro também é processado de acordo com algumas características da onda, por exemplo, o efeito de eco é realizado de acordo com a refletividade da onda. O professor Xiaokai Zhan deu a realização específica de efeitos de áudio com Sox no livro "Advanced Audio and Video Guide". O FFmpeg também pode realizar o processamento de efeitos de áudio, e o SuperKtv usa ambos para obter o processamento de efeitos de áudio. Sox tem uma função um pouco mais abrangente no processamento de efeitos de áudio. Sox http://sox.sourceforge.net/ é recomendado . É conhecido como o canivete suíço do processamento de áudio. Infelizmente, esta biblioteca parou de ser atualizada antes. Sua função é gradualmente substituída pelo cliente de desktop AudioCity.
       O processamento de efeitos de áudio é dividido em reverberação, equalização e compressão. A reverberação pode ser entendida como o eco de um canto em uma casa. Os fatores que influenciam geralmente incluem o tamanho da sala, a refletividade da parede (materiais de decoração, etc.), a localização do cantor etc., portanto, alterando o tamanho da sala e outros parâmetros, você pode Imitando o efeito de uma sala de estúdio profissional, como são conhecidos os parâmetros de reverberação da sala de estúdio de Viena, a referência a esses parâmetros pode simular o efeito de um concerto na sala de estúdio de Viena. O equalizador pode ajustar separadamente a amplificação de vários sinais do componente de frequência. Geralmente, o equalizador no mixer só pode ajustar os sinais elétricos de alta frequência, intermediária e baixa frequência separadamente. O equalizador também tem filtragem passa-alta e passa-baixa. Por exemplo, o efeito fonógrafo em Sing Bar usa um equalizador. Por um lado, ele filtra os harmônicos de certas frequências e, por outro, altera o ganho de certos componentes do sinal de frequência para obter o efeito do fonógrafo. A definição de compressor na Enciclopédia Baidu é a seguinte: "Compressor é um amplificador cujo ganho diminui à medida que o nível do sinal de entrada aumenta. O que muda essencialmente é a proporção do sinal de entrada para saída. Os compressores são os dois mais comuns Um dos dispositivos usados ​​para processar a faixa dinâmica dos sinais de áudio. ”Esta definição deve ser muito clara.A realização do Sox é baseada principalmente no ajuste de parâmetros. Por meio da sobreposição desses três efeitos, você pode ajustar os efeitos de diferentes estilos, como Ktv, gravador, pop e rap. Os efeitos sonoros personalizados na imagem acima fornecem acesso ajustável a alguns parâmetros importantes dos três efeitos de reverberação, equalização e compressão.Outros efeitos sonoros podem ser entendidos como uma combinação de parâmetros fixos com base na experiência. Os princípios dos três algoritmos acima podem se referir aos três arquivos reverb.c, legado.c e compand.c no código-fonte do Sox.

(4) Página de gravação de vídeo

  As três primeiras imagens são a interface de gravação de vídeo do SuperKtv e as três últimas imagens são a interface de gravação de vídeo do Sing Bar.
  A partir de uma comparação funcional, o painel de beleza do SuperKtv não possui as funções de nitidez, levantamento de rosto e olho grande. Além disso, a função de suporte não está implementada e iremos analisá-la mais tarde.
   A parte do áudio é a mesma de antes, com foco na análise da gravação do vídeo. A gravação de vídeo precisa salvar o vídeo com efeitos de beleza.Claro, você também pode salvar a tela do vídeo original para processamento na página de edição.A primeira é usada no Sing Bar, então a primeira solução também é adotada no SuperKtv.

  • A operação, a beleza e os filtros da câmera
       precisam ter uma certa base OpenGL ES, que pode ser entendida como o processamento de cada pixel em cada quadro da imagem e, em seguida, renderizando-o na tela. Para princípios detalhados, consulte os artigos da série OpenGL ES do blogger
    Android OpenGL ES da entrada ao avançado (1) - cinco minutos para desenvolver uma câmera de beleza
    Android OpenGL ES da entrada ao avançado (6) - Branqueamento e polimento de retrato do OpenGL ES Uma exploração preliminar do
    Android OpenGL ES do início ao avançado (8) - o filtro de pesquisa universal. O
    conteúdo acima pertence à parte básica do OpenGL ES. Este artigo não o descreverá. Se você tiver alguma dúvida, pode deixar uma mensagem para comunicação.

  • Adesivos (adereços)
       Em produtos de câmera de beleza, a função de adesivo deve ser considerada o destaque e é chamada de adereços no Sing Bar. Atualmente, a função de adesivo no Douyin é relativamente poderosa. A realização desse tipo de função depende do reconhecimento de pontos de traços faciais e tem requisitos de tempo real relativamente altos. SenseTime e Megvii Technology, que se saem bem em reconhecimento facial comercial doméstico Sdk, são produtos de beleza para pequenas e médias empresas. Eu comprei o Sdk dessas duas empresas. Douyin e FaceU usaram o reconhecimento facial desenvolvido pela ByteDance, Sdk, até onde eu sei. Devido aos altos requisitos para desempenho em tempo real, algoritmos de aprendizado profundo são geralmente usados ​​e o modelo é identificado após o treinamento. Se os requisitos de tempo real não forem altos, pode-se usar o Dlib http://dlib.net/ , baseado em OpenCV é relativamente simples de usar, isso também é baseado em deep learning, o modelo dado no documento oficial é de cerca de 100Mb, afinal é open source e gratuito. Há uma grande lacuna no desempenho em comparação com o Sdk comercial. De acordo com a medição real, leva cerca de 400-500ms para o Dlib reconhecer uma imagem 1080 x 720 e até 1000ms em alguns telefones celulares de baixo desempenho, enquanto SDKs comerciais podem ser concluídos em 20ms. É por isso que existem códigos abertos e gratuitos, e comerciais. A razão pela qual ele pode vender tão caro também nos ilumina a respeitar os direitos de propriedade intelectual. Devido a essas limitações, não há função de adesivo dinâmico no SuperKtv temporariamente.

   Em relação ao uso de adesivos, você pode consultar outro blog Android OpenGL ES de entrada para avançado (7) -OpenGL ES 2D stickers e mistura de mistura. Este é um artigo sobre adesivos estáticos. Os adesivos dinâmicos são um pouco mais problemáticos e precisam ser baseados no rosto. Mude a posição e o ângulo do adesivo de vez em quando, e alguns precisam mover e aplicar zoom. A regra de alteração do adesivo precisa ser definida com antecedência. Veja Shangtang Sdk como exemplo. A regra de movimento do adesivo é definida em um arquivo json. Use o adesivo para analisá-lo primeiro. conteúdo json e, em seguida, fazer movimentos periódicos ao longo do tempo, este é o princípio geral dos adesivos dinâmicos.

  • A codificação de vídeo é
       diferente de áudio. O vídeo original ocupa muito espaço em disco. É inimaginável se o vídeo gravado for salvo como dados originais. Portanto, depois de gravar o vídeo, ele deve ser codificado e salvo. Existem muitos formatos de codificação de vídeo. H264 e H265 são populares em terminais móveis. , SuperKtv usa a codificação H264, portanto, o artigo também usa o H264 como exemplo para análise.
       Se você não precisar editar a imagem duas vezes depois de salvar o vídeo com o efeito de beleza (por exemplo, cantá-lo), MediaCodec e Surface são preferidos na plataforma Android. Por um lado, a velocidade de codificação do hardware é melhor do que a codificação do software. Por outro lado, o sistema vem com O Api é mais conveniente de usar. Mediacodec pode codificar diretamente os dados na superfície. Você só precisa gravar os dados codificados em um arquivo, que atenda às necessidades do SuperKtv. Porém, a compatibilidade da codificação de hardware não é muito boa, principalmente para milhares de modelos Android.Há sempre vários telefones celulares que apresentam problemas deste e de outros.Neste caso, a codificação de software e a codificação de software às vezes são utilizadas. O X264 é recomendado para H264. O desempenho do algoritmo é melhor do que o algoritmo de codificação H264 que vem com o FFmpeg, mas o uso comum é compilar o X264 no FFmpeg e chamá-lo com uma interface unificada. Este método é um pouco mais problemático. Primeiro, você precisa ligar de volta para a câmera. Os dados são processados ​​para beleza, filtros, etc., e então de acordo com as necessidades para ver se a conversão do formato de dados é necessária, porque existem dois conjuntos de API Android Camera, Camera1 recomenda usar NV21, Camera2 recomenda usar Yuv420p, ao codificar com FFmpeg, devido ao espaço de cor Para maior comodidade de uso, recomenda-se que os dados sejam convertidos uniformemente para o formato Yuv420p e depois codificados. O algoritmo de conversão está disponível na Internet. LibYuv é recomendado aqui, que é muito poderoso. Esta parte do conteúdo requer uma compreensão dos vários espaços de cores da imagem. Especialmente as séries RGBA e YUV.
       Se quiser editar o vídeo original duas vezes na página de edição, você só pode salvar a imagem original. Neste momento, você pode usar MediaCodec ou FFmpeg. Sob essa demanda, os dois não são muito grandes e a velocidade de codificação do hardware é rápida. , Mas a compatibilidade é um pouco pior, a compatibilidade de codificação do software é boa, mas a velocidade é um pouco mais lenta, você pode escolher de forma adequada. É claro que o FFmpeg também oferece suporte à codificação de hardware, mas algum processamento adicional é necessário durante a compilação, mas se for codificação de hardware, por que não usar a API do sistema diretamente.

(5) Página de edição de áudio e vídeo

  As duas primeiras fotos são da realização do SuperKtv, as duas últimas fotos são da realização do Sing Bar.
  Da mesma forma, Sing Bar também passou por uma grande revisão na página de edição de áudio e vídeo. O Sing Bar não implementa a edição de vídeo na função de canto, por isso também segue o estilo do Sing Bar, principalmente para edição de áudio. A implementação da função é a mesma da edição de áudio mencionada acima. O ponto mais importante é a reprodução de vídeo. Para decodificação de vídeo e sincronização de áudio e vídeo. Se você deseja realizar a função de edição de vídeo, existem duas idéias, uma é usar OpenGL ES para processar e salvar em segundo plano, a outra é usar FFmpeg ou OpenCV para salvar os dados após o processamento, é recomendado usar OpenGL ES para edição de vídeo.

  • Decodificação de vídeo A
       plataforma Android recomenda o uso de decodificação MediaCodec, que pode ser decodificada diretamente para o Surface para exibição, o que economiza muitas operações extras (conversão de formato de dados e renderização).
    Claro, você também pode usar X264 ou FFmpeg para decodificar e copiar os dados decodificados para o buffer fornecido por ANative_Window para exibição. Isso é muito mais conveniente do que a codificação FFmpeg. Se você precisar usar OpenGL ES para editar o vídeo, será necessário converter os dados. A textura é carregada no buffer fornecido pelo OpenGL ES para exibição. Sing Bar pode importar vídeo externo para edição, o que pode ser feito com as idéias acima.

  • Sincronização de áudio e vídeo A sincronização de
       áudio e vídeo é uma parte muito importante da reprodução de vídeo, que afeta diretamente os resultados de todos os trabalhos anteriores. A sincronização de áudio e vídeo geralmente usa a sincronização de carimbo de data / hora, que requer que o carimbo de data / hora correto seja adicionado durante a codificação. O retorno de chamada da câmera tem o carimbo de data / hora do quadro atual em microssegundos, o que é consistente com a unidade necessária de MediaCodec, que é mais conveniente de usar durante a codificação. O carimbo de data / hora do FFmpeg é diferente do MediaCodec. É calculado com base na base de tempo. Você só precisa adicionar o índice do quadro atual durante a codificação. O motivo da sincronização é porque a quantidade de dados de reprodução de áudio por unidade de tempo é fixa. Você só precisa preencher os dados para o retorno de chamada da API de reprodução, mas o vídeo não tem um mecanismo correspondente. O conteúdo exibido na tela e quando é exibido são todos do mundo externo. Controle, se a velocidade de decodificação for usada, se a velocidade de decodificação for muito rápida, um vídeo mais longo pode ser reproduzido em um curto espaço de tempo, e se a velocidade de decodificação for muito lenta, isso fará com que a imagem congele. O processo de sincronização pode ser descrito aproximadamente da seguinte forma: se o quadro atual for reproduzido rápido, o próximo quadro continuará a reproduzir o quadro atual, o que é equivalente a esperar. Se o quadro atual for reproduzido muito lentamente, descarte-o e reproduza o próximo quadro ou o próximo, de modo que Pode controlar a velocidade de reprodução do vídeo. Os métodos de sincronização geralmente incluem sincronização de áudio para vídeo, sincronização de vídeo para áudio, os dois são sincronizados com o tempo de referência e o vídeo é sincronizado com áudio para filmes gerais, porque os dados de áudio reproduzidos em uma unidade de tempo são fixos.

(6) Salvar e trabalhar a página da lista

  A primeira imagem é a interface salva e a segunda imagem é a página da lista de trabalho salva. A interface é simples, sem comparação com Sing Bar.

  O objetivo de salvar é fazer com que o resultado salvo seja igual ao efeito ajustado da página de edição, o que equivale a repetir a operação da página de edição, mas se tornar uma operação em segundo plano. A única coisa que o primeiro plano precisa exibir é o progresso do salvamento, e os dados processados ​​em segundo plano são diretamente Apenas codifique.

  • Codificação de áudio
       mencionada anteriormente que, para conveniência de edição, o som gravado é salvo como os dados originais, mas o resultado de áudio deve ser o produto finalizado (codificado), portanto, deve ser codificado antes de salvar. A codificação de áudio móvel geralmente usa o formato Mp3 ou AAC. Lame é recomendado para codificação Mp3, Fdk-aac é recomendado para codificação AAC e o algoritmo de codificação próprio do MediaCodec ou FFmpeg também pode ser usado. Para os requisitos de armazenamento do SuperKtv, a velocidade de codificação não é muito importante, então você pode escolher qualquer um.Depois de entender a diferença entre o formato MP3 e o formato AAC, você pode escolher qualquer um dos métodos para obter bons resultados. Uma diferença é que o AAC codificado pelo MediaCodec é um stream simples sem ADTS. Se este for o arquivo de áudio final, você precisará adicionar o ADTS manualmente e, depois de usar a codificação Fdk-aac, o ADTS será adicionado automaticamente.

  • A mesclagem de áudio e vídeo
       encerra esta etapa. Os arquivos de áudio e vídeo gerados anteriormente são todos separados. Para gravação de áudio, esta etapa foi concluída. Para vídeo, é necessário mesclar áudio e vídeo em um arquivo. Pode ser entendido que os dois arquivos são mesclados em um arquivo e os dois tipos de dados são distinguidos por meio de uma certa regra, e os dados de áudio e vídeo podem ser obtidos separadamente quando usados, o que é um pouco semelhante à sensação de sincronização de áudio e vídeo na página de edição. Você pode usar a API MediaMuxer fornecida pelo Android ou FFmpeg. Ao usar o MediaMuxer para mesclar áudio e vídeo, se o áudio estiver no formato AAC, você precisará fornecer fluxo bruto AAC. Se você usar FFmpeg, não será necessário. Você pode até usar comandos para concluí-lo. Após a mesclagem, será um vídeo no sentido geral. É um trabalho que pode ser publicado diretamente. .

(7) Página de reprodução de obras locais

  A primeira imagem é a interface de reprodução de áudio e a segunda imagem é a interface de reprodução de vídeo. A interface é simples, sem comparação com Sing Bar.

   Muito trabalho foi feito antes, e o resultado final é apenas um arquivo, um é um arquivo de áudio, semelhante a .mp3, e o comumente usado é .m4a, etc.; O outro é um arquivo de vídeo, semelhante a .mp4, e o formato comumente usado é .flv Esperar. Todos devem estar familiarizados com esses arquivos. O telefone celular pode reproduzi-los com suas próprias funções, portanto, não há necessidade de escrever outro conjunto de reprodutores ao desfrutar ou compartilhar trabalhos pessoais no SuperKtv. Você pode usar o já pronto ou até ligar para o sistema diretamente. API MediaPlayer está bem. Quanto ao uso do player, recomenda-se usar EXOPlayer na plataforma Android. Este é um Google player de código aberto baseado em MediaCodec. Ele suporta áudio, vídeo e seus formatos comuns, usa decodificação de hardware e vem com alguns controles básicos, que são altamente personalizáveis. SuperKtv é uma função local de reprodução de trabalho baseada no ExoPlayer.O efeito é mostrado na imagem acima, e a experiência também é muito boa.

Três, resumo

   Este artigo é baseado no "Sing Bar App" como referência, baseado na plataforma Android, resume a estratégia de implementação de tecnologia de áudio e vídeo móvel, adequada para desenvolvedores com uma certa base de áudio e vídeo, pode ser usada como uma referência para soluções técnicas, devido ao tempo e energia limitados, os detalhes de implementação seguirão Ele é publicado na forma de um artigo, se você tiver alguma dúvida, deixe uma mensagem para troca.

Indique a fonte.

Links amigáveis:
1. FFmpeg http://ffmpeg.org/ (Um artefato indispensável para áudio e vídeo)
2. Sox http://sox.sourceforge.net/ (Canivete suíço na indústria de áudio)
3. SoundTouch https://sourceforge.net / projects / soundtouch / (pitch, velocidade variável)
4. Dlib http://dlib.net/ (biblioteca de código aberto de reconhecimento de ponto de recurso facial)
5. Oboe https: // GitHub / Oboe (interface de áudio de baixa latência para plataforma Android)

Acho que você gosta

Origin blog.csdn.net/liuderong0/article/details/109172929
Recomendado
Clasificación