Streaming de vídeo da câmera Android para o servidor

286

Eu já vi muitas informações sobre como transmitir vídeo do servidor para um dispositivo Android, mas não muito sobre o outro lado, ala Qik. Alguém poderia me indicar a direção certa aqui ou me dar alguns conselhos sobre como abordar isso?

JCL
fonte
9
Eu gostaria de ver uma resposta para isso também. Você já inventou alguma coisa?
Jeremy White
Não, desistiu de streaming. Apenas submeter a API MediaRecorder à submissão foi bastante difícil. Você pode verificar o código sipdroid, porém, eles parecem ter conseguido funcionar.
JCL
O código de vídeo não está na fonte Sipdroid on-line :(
Donal Rafferty
1
Você pode procurar no ffserver um componente no ffmpeg.
Vinay
1
Eu tenho uma pergunta relacionada a esta que também pode ser do seu interesse. Trata-se de empurrar o fluxo de vídeo acima de 3G depois que você tiver feito a captura de vídeo e a parte do contêiner. bit.ly/vYpWGy
michael

Respostas:

123

Eu hospedei um projeto de código aberto para habilitar o telefone Android para a câmera IP:

http://code.google.com/p/ipcamera-for-android

Os dados brutos de vídeo são buscados no LocalSocket, e o MDAT MOOV do MP4 foi verificado primeiro antes da transmissão. O vídeo ao vivo é compactado no formato FLV e pode ser reproduzido através do player de vídeo Flash com uma compilação no servidor da web :)

Zhou Chang
fonte
26
Clique no botão "Fonte". Além disso, quem votou contra esse cara é uma ferramenta.
Nicholi 10/03
3
Isso me dá erros .. como, java.lang.UnsatisfiedLinkError: Não foi possível carregar o teaonly: findLibrary retornou nulo .. Se alguém tiver uma solução, compartilhe-a. Graças
anddev
1
@mpp: o aplicativo possui código NDK. Você pode compilá-lo sozinho ou pegar os arquivos .so do apk que está nesse projeto do Google Code em "Downloads".
Turnsole 23/07
1
Também estou recebendo o erro java.lang.UnsatisfiedLinkError. Mencione brevemente as etapas para remover esse erro.
1
Para aqueles que não entendem o UnsatisfiedLinkError: é necessário criar o código C com o NDK. Simplificando, corra ndk-build. Para mais informações, leia a documentação do NDK .
Paul Lammertsma
70

Levei algum tempo, mas finalmente consegui criar um aplicativo que faça exatamente isso. Confira a página de código do Google, se estiver interessado: http://code.google.com/p/spydroid-ipcamera/ Adicionei muitos comentários no meu código (principalmente, olhe CameraStreamer.java), então deve ser bastante auto-explicativo. A parte difícil foi realmente entender o RFC 3984 e implementar um algoritmo adequado para o processo de empacotamento. (Na verdade, esse algoritmo transforma o fluxo mpeg4 / h.264 produzido pelo MediaRecorder em um bom fluxo rtp, de acordo com o rfc)

Tchau

Simon
fonte
2
Muito obrigado! Atualmente, não posso fazer o trabalho direito com o h264 .. e não posso alterá-lo para h263 (não tenho idéia de como fazer isso). de qualquer forma, obrigado cara!
Yotes
1
Estou usando o mesmo, mas quando se trata de transmitir no Android com rtsp, ele diz que o vídeo não pode ser reproduzido. Estou usando o VideoView. Você pode por favor ajudar?
Rohit Mandiwal
1
Funciona muito bem (até agora!) Estou usando-o para transmitir vídeo do Glass (depois de um pouco de trabalho / edição / descoberta), mas até agora só consigo conectá-lo a partir de um navegador baseado no Windows (Chrome) com o plugin vlc. O VLC no Android / iPad ou em qualquer outro player rtsp não capta o fluxo (um deles parecia bom, mas estava tentando obter um fluxo com base no nome do dispositivo, cujo código retornou como 0 e, portanto, não pode ser ligado). Ainda assim, obtendo resultados após um dia de codificação graças a você, então parabéns!
MacD 23/04
@ MacD Você usa o código spydroid-ipcamera (todo o projeto ou apenas algumas classes? Pode me dizer?) Ou esta biblioteca github.com/fyhertz/libstreaming para transmitir no Google Glass? Muito obrigado!!
Bae
Oi você poderia explicar como implementar esse projeto no estúdio android Eu não posso fazê-lo funcionar
utdev
24

Também estou investigando isso e, embora não tenha uma boa solução para você, consegui desenterrar o código de vídeo do SIPDroid:

http://code.google.com/p/sipdroid/source/browse/trunk/src/org/sipdroid/sipua/ui/VideoCamera.java

ObsidianX
fonte
O que eles fizeram lá é transmitir usando pacotes RTP para um servidor. Agora, a pergunta é o que está sendo feito no servidor? o que faz a
transcodificação
Nope .. eu não ir para a abordagem Sipdroid, era complexo demais .. Então eu fiz algo com um MJPEGServer
Azlam
19

Criei um SDK de código aberto chamado Kickflip para tornar a transmissão de vídeo do Android uma experiência indolor.

O SDK demonstra o uso da API MediaCodec do Android 4.3 para direcionar os pacotes do codificador de hardware do dispositivo diretamente ao FFmpeg para RTMP (com librtmp) ou streaming HLS do H.264 / AAC. Também demonstra os efeitos OpenGL em tempo real (titulação, chroma key, desvanece-se) e gravação em segundo plano.

Obrigado SO, e especialmente, fadden .

dbro
fonte
ele pode transmitir para qualquer cliente compatível com HLS (não apenas para o servidor)?
4ntoine
4
@dbro Tento aprender sobre o seu serviço, mas você precisa das minhas informações de login antes que eu possa ver seus preços. É como se vocês estivessem coletando endereços de e-mail. Se essa não é sua intenção, você deve disponibilizar informações sobre preços: da mesma forma que o Parse e o App Engine e muitos outros fizeram.
aluno
É possível que uma câmera de vídeo envie um vídeo para o Kickflip e depois para o telefone Android? Se es qual tipo de câmera de vídeo é adequado para este
Lutaaya Huzaifah Idris
11

Aqui está o artigo completo sobre como transmitir vídeo da câmera Android para uma página da Web.

Android Streaming de vídeo da câmera ao vivo para página da Web

  1. Libstreaming usado no app Android
  2. No lado do servidor, o Wowza Media Engine é usado para decodificar o fluxo de vídeo
  3. Finalmente, o jWplayer é usado para reproduzir o vídeo em uma página da web.
Minion
fonte
Isso usa componentes de código fechado. Alguma alternativa de código aberto?
Raj
Você pode usar JavaCV para isso eu usei no meu projeto para fazer streaming ao vivo de dispositivo Android para servidor de mídia wowza também você pode usar github.com/begeekmyfriend/yasea
Chinthaka Devinda
libs é streaming gratuito?
Akrramo 23/01
podemos usar o dispositivo da placa de som como fonte de áudio de entrada e não o microfone na libstreaming.
user2980181
5

Posso enviar o vídeo da câmera ao vivo do celular para o meu servidor. Usando este link, consulte o link

Consulte o link acima. Há um aplicativo de amostra nesse link. Você só precisa definir o URL do serviço em RecordActivity.class.

Exemplo como: ffmpeg_link = "rtmp: // endereço do servidor: 1935 / live / venkat";

podemos enviar vídeos do tipo H263 e H264 usando esse link.

Venkat
fonte
Eu usei o código usando o link acima, mas não consegui nem começar a gravar. recebendo uma exceção "No Video to Stream". Você tem alguma idéia sobre isso?
Akhilesh Sk
@AkhileshSk usando o código acima, você pode enviar o vídeo ao vivo através de rtmp url para o seu servidor. não é para fins de gravação. se você quiser gravar o vídeo, você precisa gravá-lo no servidor.
Venkat
Hey @ Venkat é possível enviar um vídeo ao vivo de uma câmara para telefone Android, você tem alguns links de código, como o uso de Youtube ao vivo etc
Lutaaya Huzaifah Idris
@LutaayaHuzaifahIdris sim, é possível. Eu trabalhei anteriormente nisso.
Venkat
Oi @Venkat, você pode me ajudar com isso, não é possível encontrar o arquivo
RecordActivity.class
1

Verifique a biblioteca Yasea

Yasea é um cliente de streaming Android. Ele codifica dados YUV e PCM da câmera e microfone para H.264 / AAC, encapsula em FLV e transmite por RTMP.

Característica:

  1. Mini API do Android 16.
  2. Codificação rígida H.264 / AAC.
  3. Codificação flexível H.264.
  4. Streaming RTMP com manipulador de retorno de chamada de estado.
  5. Orientação dinâmica retrato e paisagem.
  6. Interruptor quente das câmeras frontal e traseira.
  7. Gravação em MP4 durante a transmissão.
Hamed Ghadirian
fonte
0

O Mux (minha empresa) possui um aplicativo Android de código aberto que transmite RTMP para um servidor, incluindo a configuração da câmera e as interações do usuário. Ele foi desenvolvido para transmitir para a API de transmissão ao vivo do Mux, mas pode ser transmitido facilmente para qualquer ponto de entrada RTMP.

heff
fonte
-7

Dependendo do seu orçamento, você pode usar uma câmera Raspberry Pi que pode enviar imagens para um servidor. Eu adiciono aqui dois tutoriais onde você pode encontrar muitos mais detalhes:

Este tutorial mostra como usar uma câmera Raspberry Pi e exibir imagens no dispositivo Android

Este é o segundo tutorial em que você pode encontrar uma série de tutoriais sobre streaming de vídeo em tempo real entre a câmera e o dispositivo Android

Ezu
fonte
fora do contexto
Vikas Kandari