Tenho pesquisado na internet há dias sobre como implementar um recurso de streaming de vídeo de um telefone Android para outro telefone Android por meio de uma conexão WiFi, mas não consigo encontrar nada útil. Procurei nos desenvolvedores do Android um código de amostra, stackoverflow, google, blogs do Android, mas nada. Tudo o que posso encontrar é algum tipo de solução de telefone para desktop ou desktop para telefone para streaming, mas nada que eu possa emprestar em minha implementação.
Preciso controlar um robô usando um arduino ADK, então estou usando 2 telefones, um que será montado no robô e outro que receberá o stream de vídeo do robô. Estou mencionando isso porque estou tentando alcançar o menor atraso entre o tempo de transmissão e o tempo de exibição.
Estou escrevendo 2 aplicativos, um aplicativo mestre para controlar o robô (do telefone portátil) que controlará o aplicativo escravo e receberá o fluxo, e o segundo aplicativo escravo que será executado no telefone amarrado ao robô, controlando os motores / atuadores / streaming para o aplicativo mestre. Não posso usar aplicativos de terceiros, infelizmente. Eu preciso integrar o código de fluxo de vídeo em meus 2 aplicativos.
Que opções existem para conseguir isso? Também é muito difícil de fazer porque nunca trabalhei com videostreaming, mas estou me saindo muito bem tanto no desenvolvimento Java quanto no Android. Como devo codificar / decodificar o stream, como inicio a conexão, precisarei trabalhar com UDP em vez de TCP / IP? Eu realmente não sei por onde começar, sem nenhum código de amostra em lugar nenhum. Tenho certeza de que isso pode ser alcançado. Eu simplesmente não consigo encontrar nada útil para me ajudar a começar na direção certa.
Me deparei com o spydroid, mas ele está usando o VLC em um desktop, então não é bom para mim.
EDIT: Confira o blog de Cagney Moreau . Ele entra em detalhes sobre como implementar isso.
fonte
Respostas:
Se você não precisa da funcionalidade de gravação e reprodução em seu aplicativo, usar o player e o aplicativo de streaming de prateleira é uma escolha razoável.
Se você precisar que eles estejam em seu aplicativo, no entanto, você terá que olhar a API MediaRecorder (para o aplicativo de servidor / câmera) e o MediaPlayer (para o aplicativo cliente / player).
Código de amostra rápida para o servidor:
No lado do jogador, é um pouco complicado, você pode tentar isto:
Infelizmente, o mediaplayer tende a não gostar disso, então você tem algumas opções: (a) salvar dados do soquete para o arquivo e (depois de ter um pouco de dados) jogar com o mediaplayer do arquivo ou (b) fazer um pequeno http proxy que é executado localmente e pode aceitar a solicitação GET do mediaplayer, responder com cabeçalhos HTTP e copiar dados do servidor remoto para ele. Para (a) você criaria o mediaplayer com um caminho de arquivo ou url de arquivo, para (b) forneça a ele um url http apontando para seu proxy.
Veja também:
Transmita vídeo ao vivo de um telefone para outro usando o socket fd
MediaPlayer falha no início da reprodução de mp3
fonte
setDataSource(MediaDataSource)
vez deFileDescriptor
. A implementaçãoMediaDataSource
permitiria que você fizesse sua própria leitura e armazenamento em buffer na rede, sem gravar em um arquivo temporário.Eu trabalhei em algo assim uma vez, mas enviar um vídeo e reproduzi-lo em tempo real é uma coisa muito complexa. Eu sugiro que você trabalhe apenas com PNGs. Na minha implementação, o que fiz foi capturar PNGs usando a câmera host e depois enviá-los pela rede ao cliente, que exibirá a imagem assim que for recebida e solicitará a próxima imagem do host. Como você está usando wi-fi, a comunicação será rápida o suficiente para obter cerca de 8 a 10 imagens por segundo (apenas aproximação, trabalhei no Bluetooth). Portanto, este será um vídeo contínuo, mas com muito menos esforço. Para comunicação, você pode usar soquetes UDP (mais rápido e menos complexo) ou DLNA (não tenho certeza de como isso funciona).
fonte
Você pode usar a webcam IP ou talvez usar DLNA. Por exemplo, os dispositivos Samsung vêm com um aplicativo chamado AllShare, que pode compartilhar e acessar dispositivos habilitados para DLNA na rede. Mas acho que a webcam IP é sua melhor aposta. Você deve conseguir abrir o stream que ele cria usando o MX Video player ou algo parecido.
fonte
Você pode verificar o VLC do Android, ele pode transmitir e reproduzir vídeo, se você quiser indagar mais, pode verificar o GIT deles para analisar o que eles fazem. Boa sorte!
fonte