Page 1 sur 1
[Streamer son bureau] FFmpeg (abandon)
Publié : sam. 22 avr. 2017, 17:46
par CamilleCoc
Bonjour,
J'aimerais streamer l'écran de mon pc et envoyé le flux de ce stream vers un serveur web afin qu'une application externe récupère ce flux.
Après avoir fais des recherche, je pense que la meilleur solution est FFmpeg (qu'en pensez-vous) ?
J'ai donc tenté de streamer mon écran et d'envoyer le flux vers un serveur web.
Donc voilà mon petit serveur web en C :
Code : Tout sélectionner
int main(void)
{
int sock, clientlen, n, port = 12345;
char buf[1024], *host;
sock = socket(AF_INET, SOCK_DGRAM, 0);
if(bind(sock, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) < 0)
clientlen = sizeof(clientaddr);
while (;;)
{
bzero(buf, 1024);
n = recvfrom(sock, buf, 1024, 0, (struct sockaddr *) &clientaddr, &clientlen);
}
return 0;
}
Et voilà la commande que j'utilise pour streamer mon écran :
Code : Tout sélectionner
ffmpeg -f x11grab -vcodec libx264 -f mpegts udp://192.168.1.67:12546
Sauf que FFmpeg me renvoie une erreur :
Code : Tout sélectionner
Output #0, mpegts, to 'tcp://192.168.1.12:12546':
Output file #0 does not contain any stream
Pourtant j'ai bien lancé mon serveur web sur le port 12546, mon adresse IP local est bonne et mon pare-feu est désactivé.
Re: [Streamer son bureau] FFmpeg
Publié : sam. 22 avr. 2017, 18:31
par benjarobin
Ta ligne de commande ffmeg est invalide, essaye quelque chose comme :
Code : Tout sélectionner
ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+0,0 -vcodec libx264 -tune zerolatency -b:v 900k -f mpegts udp://127.0.0.1:12345
Pour rappel en UDP il n'y a pas de connexion, donc pas besoin d'avoir un serveur qui écoute sur ce port pour que ffmeg soit content
PS: Ce que tu as codé peut difficilement être appelé un serveur Web (écoute sur un port UDP et ne gère encore moins le HTTP)
Re: [Streamer son bureau] FFmpeg
Publié : sam. 22 avr. 2017, 19:18
par CamilleCoc
Merci pour ta réponse.
benjarobin a écrit : ↑sam. 22 avr. 2017, 18:31
Ta ligne de commande ffmeg est invalide
Mais je l'ai trouvé ici :
https://trac.ffmpeg.org/wiki/StreamingGuide
Originale :
Code : Tout sélectionner
ffmpeg -f dshow -i video="Virtual-Camera" -vcodec libx264 -tune zerolatency -b 900k -f mpegts udp://10.1.0.102:1234
Ta commande marche, mais le recv retourne -1 4 fois sur 5
Et ensuite, si je veux récupérer du flux mp4, je fais comment ?
Parce que sur mon serveur, je voulais un truc du genre :
Code : Tout sélectionner
FILE *file = open("out.mp4", "wb");
while(1)
{
n = recvfrom(sock, buf, 1024, 0, (struct sockaddr *) &clientaddr, &clientlen);
fwrite(buf, n, 1, file);
}
Afin de pouvoir jouer le stream mp4.
Re: [Streamer son bureau] FFmpeg
Publié : sam. 22 avr. 2017, 19:52
par benjarobin
Voir le errno, mais je penche pour un ENOMEM. Ton buffer est très certainement trop petit.
Sinon ce que tu comptes faire ne marchera pas
Re: [Streamer son bureau] FFmpeg
Publié : sam. 22 avr. 2017, 20:05
par CamilleCoc
benjarobin a écrit : ↑sam. 22 avr. 2017, 19:52
Voir le errno, mais je penche pour un ENOMEM. Ton buffer est très certainement trop petit.
Errno me dit Invalid argument (la valeur de errno vaut 22 : EINVAL).
Mais ca ne me le fais pas tout le temps (4 fois sur 5 environ)...
benjarobin a écrit : ↑sam. 22 avr. 2017, 19:52
Sinon ce que tu comptes faire ne marchera pas
A zut ! Et pourquoi ?
Du coup comment faire si je veux récupérer le stream de mon écran en mp4 ?
J'aimerais pouvoir récupérer sur une adresse locale et un port Y : 192.168.X.X:Y , une vidéo mp4 de mon stream de mon bureau (donc la vidéo mp4 grossit sans cesse)...
Re: [Streamer son bureau] FFmpeg
Publié : sam. 22 avr. 2017, 20:23
par benjarobin
Pourquoi développer quelque chose, tu mets 2 VLC de chaque côté et cela fonctionnera. Pour information VLC a été développé à la base pour faire ceci
Re: [Streamer son bureau] FFmpeg
Publié : sam. 22 avr. 2017, 21:17
par CamilleCoc
2 VLC ? C'est à dire ?
Re: [Streamer son bureau] FFmpeg
Publié : sam. 22 avr. 2017, 22:02
par benjarobin
Un VLC qui envoi et un qui reçoit le flux vidéo. Je ne comprends pas pourquoi tu veux réinventer la roue ?
Re: [Streamer son bureau] FFmpeg
Publié : sam. 22 avr. 2017, 22:08
par CamilleCoc
Je ne veux pas réinventer la roue, mais pour moi, VLC c'est le lecteur vidéo pour visionner des films avec le plot orange et blanc

Re: [Streamer son bureau] FFmpeg
Publié : sam. 22 avr. 2017, 22:21
par benjarobin
Euh, oui sauf qu'à la base il n'a pas été conçu pour cela... À la base son but était de faire ce que tu veux faire
Re: [Streamer son bureau] FFmpeg
Publié : sam. 22 avr. 2017, 22:32
par CamilleCoc
Effectivement :
https://wiki.videolan.org/LibVLC/
Je vais regarder ça. Merci
Re: [Streamer son bureau] FFmpeg
Publié : dim. 23 avr. 2017, 08:22
par benjarobin
Pourquoi tu pointes vers libvlc ? Pourquoi ne pas utiliser VLC tout simplement....
Le mieux est de faire un serveur rtsp avec VLC, il y a un article ici
http://techno.firenode.net/article.sh?i ... 5410822197
Re: [Streamer son bureau] FFmpeg
Publié : dim. 23 avr. 2017, 08:40
par CamilleCoc
Merci pour le lien

Quand je lance la commande
Code : Tout sélectionner
vlc dshow:// --sout=#transcode{fps=30,vcodec=mp4v,vb=1024,width=640,height=480,acodec=mp4a,ab=64,channels=1}
:rtp{mux=ts,ttl=10,name="Webcam",description="Webcam au format MPEG-4",port=1234,sdp=rtsp://192.168.1.12:8080/test.sdp}
il me met comme erreur :
Code : Tout sélectionner
[00007f8804000b98] core stream output error: stream chain failed for `transcodechannels=1:rtpsdp=rtsp://192.168.1.12:8080/test.sdp'
Re: [Streamer son bureau] FFmpeg
Publié : dim. 23 avr. 2017, 14:43
par CamilleCoc
Bon, j'ai enfin réussi à faire marcher la ligne de commande et d'envoyer le flux de stream vers mon adresse locale.
Code : Tout sélectionner
cvlc screen:// --sout '#transcode{fps=30,vcodec=mp4v,vb=1024,width=1920,height=1080,acodec=mp4a,ab=128,channels=2}:rtp{mux=ts,ttl=10s,port=12546,sdp=http://192.168.1.12:12546}'
.
Mais ensuite côté serveur, je fais comment pour le récupérer ? Parce qu'avec mon server qui écoute sur le port 12546 en udp, il ne recoit rien

Re: [Streamer son bureau] FFmpeg
Publié : lun. 24 avr. 2017, 08:39
par CamilleCoc
Personne ?
Re: [Streamer son bureau] FFmpeg
Publié : mar. 25 avr. 2017, 10:30
par CamilleCoc
Bon, en regardant de plus près chez ffmpeg, j'ai trouvé plusieurs articles intéressant.
J'ai donc cette commande pour streamer mon bureau :
Code : Tout sélectionner
ffmpeg -f x11grab -i :0.0 -rtsp_transport tcp -i rtsp://127.0.0.1:12345
mais ca marche pas