Eu tenho o FFmpeg compilado (libffmpeg.so) no Android. Agora eu tenho que criar um aplicativo como o RockPlayer ou usar a estrutura multimídia existente do Android para chamar o FFmpeg.
Você tem etapas / procedimentos / código / exemplo para integrar o FFmpeg no Android / StageFright?
Você pode me orientar sobre como posso usar esta biblioteca para reprodução de multimídia?
Eu tenho um requisito em que já tenho fluxos de transporte de áudio e vídeo, que eu preciso alimentar no FFmpeg e decodificá-lo / renderizado. Como posso fazer isso no Android, já que as APIs IOMX são baseadas em OMX e não podem conectar o FFmpeg aqui?
Também não consegui encontrar documentação nas APIs do FFmpeg que precisam ser usadas para reprodução.
android
ffmpeg
stagefright
android-ffmpeg
Entalhe
fonte
fonte
Respostas:
Aqui estão as etapas que eu fiz para que o ffmpeg funcione no Android:
make
afastadas. Você também precisará extrair biônico (libc) e zlib (libz) da versão do Android, pois as bibliotecas ffmpeg dependem delas.Crie uma funcionalidade dinâmica ffmpeg de agrupamento de biblioteca usando o NDK do Android . Existe muita documentação disponível sobre como trabalhar com o NDK. Basicamente, você precisará escrever algum código C / C ++ para exportar a funcionalidade necessária do ffmpeg para uma biblioteca na qual o Java possa interagir através do JNI. O NDK permite que você se vincule facilmente às bibliotecas estáticas que você gerou na etapa 1, basta adicionar uma linha semelhante a esta ao Android.mk:
LOCAL_STATIC_LIBRARIES := libavcodec libavformat libavutil libc libz
Use a biblioteca dinâmica ffmpeg-wrapping de suas fontes java. Há documentação suficiente no JNI por aí, você deve ficar bem.
Quanto ao uso do ffmpeg para reprodução, existem muitos exemplos (o próprio binário do ffmpeg é um bom exemplo), aqui está um tutorial básico. A melhor documentação pode ser encontrada nos cabeçalhos.
Boa sorte :)
fonte
Por várias razões, a multimídia nunca foi fácil em termos de realização da tarefa sem comprometer a eficiência. ffmpeg é um esforço para melhorá-lo dia a dia. Ele suporta diferentes formatos de codecs e contêineres.
Agora, para responder à pergunta de como usar esta biblioteca , eu diria que não é tão simples escrever aqui. Mas eu posso guiá-lo das seguintes maneiras .
1) Dentro do diretório ffmpeg do código fonte, você tem output_example.c ou api_example.c . Aqui, você pode ver o código onde a codificação / decodificação é feita. Você terá uma idéia de quais APIs dentro do ffmpeg você deve chamar. Este seria o seu primeiro passo.
2) O Dolphin player é um projeto de código aberto para o Android. Atualmente, ele está com erros, mas os desenvolvedores estão trabalhando continuamente. Nesse projeto, você tem toda a configuração pronta, que pode ser usada para continuar sua investigação. Aqui está um link para o projeto em code.google.com ou execute o comando " git clone https://code.google.com/p/dolphin-player/ " em um terminal. Você pode ver dois projetos chamados P e P86. Você pode usar qualquer um deles.
Dica adicional que eu gostaria de oferecer é que, quando você estiver criando o código ffmpeg, dentro do build.sh, você precisará ativar os muxers / desmuxers / codificadores / decodificadores dos formatos que deseja usar. Senão, o código correspondente não será incluído nas bibliotecas. Demorou muito tempo para eu perceber isso. Então, pensei em compartilhar com você.
Alguns princípios básicos: quando dizemos que um arquivo de vídeo, por exemplo: avi, é uma combinação de áudio e vídeo
Arquivo de vídeo = Vídeo + Áudio
Vídeo = Codec + Muxer + Demuxer
codec = codificador + decodificador
=> Vídeo = codificador + decodificador + Muxer + Demuxer (Mpeg4 + Mpeg4 + avi + avi - Exemplo para contêiner avi)
Áudio = Codec + Muxer + Demuxer
codec = codificador + decodificador
=> Áudio = codificador + decodificador + Muxer + Demuxer (mp2 + mp2 + avi + avi - Exemplo para contêiner avi)
Codec (o nome é derivado de uma combinação de en * co * der / * dec * oder) é apenas uma parte do formato que define os algoritmos usados para codificar / decodificar um quadro. AVI não é um codec, é um contêiner que usa o codec de vídeo Mpeg4 e o codec de áudio do mp2.
O Muxer / desmuxer é usado para combinar / separar os quadros de um arquivo usado durante a codificação / decodificação.
Portanto, se você deseja usar o formato avi, precisa ativar os componentes de vídeo + componentes de áudio.
Por exemplo, para avi, é necessário ativar o seguinte. codificador mpeg4, decodificador mpeg4, codificador mp2, decodificador mp2, avi muxer, avi demuxer.
phewwwwwww ...
Programaticamente build.sh deve conter o seguinte código:
Espero não ter te confundido mais depois de tudo isso ...
Obrigado, qualquer assistência necessária, por favor me avise.
fonte
A implementação mais fácil de construir e de usar que encontrei foi feita pela equipe do projeto guardian: https://github.com/guardianproject/android-ffmpeg
fonte
Fiz um pequeno projeto para configurar e construir o X264 e o FFMPEG usando o NDK do Android. A principal coisa que falta é uma interface JNI decente para torná-la acessível via Java, mas essa é a parte mais fácil (relativamente). Quando eu tentar melhorar a interface JNI para meus próprios usos, eu insistirei nisso.
O benefício do sistema de compilação do olvaffe é que ele não requer arquivos Android.mk para criar as bibliotecas, apenas usa os makefiles regulares e o conjunto de ferramentas. Isso torna muito menos provável que pare de funcionar quando você obtém novas alterações do FFMPEG ou X264.
https://github.com/halfninja/android-ffmpeg-x264
fonte
x264_param_parse': common.c:(.text+0x2864): undefined reference to
_DefaultRuneLocale 'collect2: ld retornou 1 status de saída make: *** [x264] Erro 1Depois de muita pesquisa, agora é a biblioteca compilada mais atualizada para Android que encontrei:
https://github.com/bravobit/FFmpeg-Android
FFmpeg release n4.0-39-gda39990
fonte
Para fazer meu aplicativo FFMPEG, usei este projeto ( https://github.com/hiteshsondhi88/ffmpeg-android-java ), portanto, não preciso compilar nada. Eu acho que é a maneira mais fácil de usar o FFMPEG em nossos aplicativos Android.
Mais informações em http://hiteshsondhi88.github.io/ffmpeg-android-java/
fonte
Inspirado por muitas outras implementações do FFmpeg em Android por aí (principalmente o projeto guadiano ), encontrei uma solução (com suporte para o Lame também).
(lame e FFmpeg: https://github.com/intervigilium/liblame e http://bambuser.com/opensource )
chamar FFmpeg:
e para lidar com a saída do console:
fonte
Estranho que este projeto não tenha sido mencionado: AndroidFFmpeg from Appunite
Possui instruções passo a passo bastante detalhadas para copiar / colar na linha de comando, para pessoas preguiçosas como eu))
fonte
Eu tive o mesmo problema, encontrei a maioria das respostas aqui fora datadas. Acabei escrevendo um wrapper no FFMPEG para acessar do Android com uma única linha de código.
https://github.com/madhavanmalolan/ffmpegandroidlibrary
fonte
Primeiro, adicione a dependência da biblioteca FFmpeg
Então carregue na atividade
Use também outro recurso do FFmpeg
fonte