windows - Sådan genereres SDP-fil fra FFMPEG

Indlæg af Hanne Mølgaard Plasc

Problem



Så jeg har arbejdet med FFMPEG på et projekt, der involverer streaming video fra en computer til en anden på internettet med RTP. Jeg vil tage det til ffmpeg og bruge ffserver til at vise det på et lokalt netværk.


Som jeg forstår det, skal du have en SDP-information, så den modtagende ffmpeg-instans kan fortolke RTP-strømmen. På trods af hvilke websider der står, kan jeg ikke finde SDP-oplysningerne i de oplysninger, der er trykt på konsollen.


Hvordan kan jeg tvinge den transmitterende ffmpeg-forekomst til at udlæse SDP-oplysningerne, så jeg kan bruge den til at konfigurere min modtagende ende?


I øjeblikket tester jeg på Windows 7, men den endelige løsning vil være på linux.


Kommandoen jeg kører til test er


ffmpeg -fflags +genpts -i files2005-SFSD-sample-mpeg1.mpg -threads 0 -r 10 -g 45
-s 352x240 -deinterlace -y 2005.mp4 -an -threads 0 -r 10 -g 45 -s 352x240 
-deinterlace -f rtp rtp://192.168.200.198:9008


Min ffmpeg information er ...


ffmpeg version 0.8, Copyright (c) 2000-2011 the FFmpeg developers built on Jun 23 2011 14:22:23 with gcc 4.5.3 
configuration: 
--disable-static  
--enable-shared 
--enable-gpl  
--enable-version3 
--enable-memalign-hack  
--enable-runtime-cpudetect 
--enable-avisynth 
--enable-bzlib 
--enable-frei0r 
--enable-libopencore-amrnb 
--enable-libopencore-amrwb 
--enable-libfreetype 
--enable-libgsm 
--enable-libmp3lame 
--enable-libopenjpeg 
--enable-librtmp 
--enable-libschroedinger 
--enable-libspeex 
--enable-libtheora 
--enable-libvorbis 
--enable-libvpx 
--enable-libx264 
--enable-libxavs 
--enable-libxvid 
--enable-zlib 
--disable-outdev=sdl 
  libavutil    51.  9. 1 / 51.  9. 1 
  libavcodec   53.  7. 0 / 53.  7. 0 
  libavformat  53.  4. 0 / 53.  4. 0 
  libavdevice  53.  1. 1 / 53.  1. 1 
  libavfilter   2. 23. 0 /  2. 23. 0 
  libswscale    2.  0. 0 /  2.  0. 0 
  libpostproc  51.  2. 0 / 51.  2. 0 

Bedste reference


https://stackoverflow.com/a/16469378/2097284 forklarer mere detaljeret, hvordan man laver filen .sdp, og hvordan man overfører den til ffplay.

Andre referencer 1


Normalt når udgangen er en rtp-strøm, udskriver ffmpeg sdp-oplysningerne i konsollen, så du skal bare omdirigere den (og derefter bruge sdp'en):


ffmpeg -fflags +genpts -i files2005-SFSD-sample-mpeg1.mpg  -an -threads 0 -r 10 -g 45 -s 352x240 -deinterlace -f rtp rtp://192.168.200.198:9008 > config.sdp


Men fra din kommando ser det ud til at du vil gøre en kodning til to udgange ...
hvis de to udgange er rtp (hjælpsomme til video + lyd) fungerer det fint, men jeg kunne ikke
få det til at udskrive sdp når 1 output er rtp og den anden mp4 ... ikke sikker, hvis det er muligt


Uanset hvad du kan gøre, er at generere sdp filen for første gang, og så længe du ikke ændrer videoegenskaberne (opløsningsformat ...) eller rtp-adressen, vil denne sdp-fil være gyldig, og din tidligere kommando ville arbejde med det !!


Håber dette hjælper

Andre referencer 2


Bare hvis nogen søgte at finde ud af, hvordan man gør dette med ffmpeg C-kode, kan du bruge av\_sdp\_create til at generere en sdp-streng [10]

Andre referencer 3


FFMPG genererer en SDP-fil, når den er angivet med -sdp\_file path/to/file [11]


Dokumentationsuddrag:


-sdp\_file file (global) Print sdp information for an output stream to file. This allows dumping sdp information when at least one output isn’t an rtp stream. (Requires at least one of the output formats to be rtp).