web-dev-qa-db-fra.com

Android - Diffuser la caméra en flux RTMP

Je souhaite capturer le flux de la caméra depuis un appareil Android et le diffuser sur un serveur avec RTMP (le serveur est out de mon contrôle) .Je n'ai pas encore compris comment créer un flux de données à partir de la caméra elle-même, mais c'est pour une préoccupation ultérieure.

Pour le moment, il y a deux problèmes: je souhaite prendre en charge l'API 9+ et RTMP n'est pas nativement pris en charge par Android.

J'ai jeté un coup d'œil et j'ai trouvé ce SO post Convertir le flux d'entrée vidéo en RTMP et https://github.com/yixia/VitamioBundle . Le premier a suggéré ne bibliothèque qui a peu ou pas de documentation. Le dernier probablement le supporte (?), Mais il nécessite l'API 14+.

Existe-t-il des exemples décents ou des bibliothèques qui prennent en charge le streaming RTMP à partir d'un appareil Android? J'ai également lu quelque chose sur la conversion de RTSP ou FFMPEG, si c'est un moyen viable, je suppose que c'est le cas suffira aussi.

Modifier 1:

J'ai trouvé cette bibliothèque (elle a beaucoup de ressemblance avec celle mentionnée ci-dessus) et j'ai essayé de travailler avec. Je l'ai importé dans Android Studio et j'ai écrit du code, mais il semble planter en interne avec un Java.lang.NoClassDefFoundError RTSP Codec Factory Erreur. Donc, apparemment, cela ne fonctionne pas trop bien sur Android.

De plus, j'ai rencontré plusieurs fois Adobe air. Je ne veux pas coder dans Action Script 3 (AS3) car cette bibliothèque ne sera qu'une (petite) partie d'une application native. Si Adobe Air possède une bibliothèque que je ne connais pas, je serais heureuse de l'intégrer si cela est possible.

10
Gooey

Dans la réponse acceptée à la question que vous avez liée quelqu'un suggère d'utiliser JavaCV.

Il nécessite l'API 8 ou une version plus récente et comporte une classe FFmpegFrameRecorder .

Lien vers github:

https://github.com/bytedeco/javacv

Ils ont même un échantillon complet de capture de flv (c'est assez grand donc je ne le collerai pas ici): https://github.com/bytedeco/javacv/blob/master/samples/RecordActivity.Java =

Dans votre cas, vous devrez probablement remplacer:

private String ffmpeg_link = "/mnt/sdcard/stream.flv";

avec

private String ffmpeg_link = "rtmp://<server>:<port>/stream";
17
aergistal

Vous devriez jeter un œil à spydroid; il fait exactement ce que vous recherchez. Leur site Web peut être trouvé ici: https://code.google.com/p/spydroid-ipcamera/

Ils fournissent une bibliothèque que vous pouvez utiliser, ainsi qu'une explication des différentes options de streaming et quelques exemples de code. Ces informations peuvent être trouvées ici: https://github.com/fyhertz/libstreaming

2
Willis

Si vous pouvez publier à partir de votre Android utilisant un protocole pris en charge par ffmpeg (voir la liste des protocoles pris en charge ), vous pouvez utiliser la commande suivante pour transmettre la vidéo à votre serveur:

ffmpeg -re -i <input link> -vcodec h264 -ar 44100 -f flv "rtmp://<Host>/<publication>"
1
thomas