1

I was just started to use ffmpeg recently and stumbled on this streaming problem. Scenario: i want to live stream a webcam in local network. Both server and client will be using windows platform.

Current feasible solution: using ffmpeg simple command line

to test it quickly i tried to locally stream it (the input doesn't really matter btw in this question).

 On server -> ffmpeg -f dshow -i video="cam1":audio="mic1" -r 30 -g 0 -vcodec h264 -acodec libmp3lame -tune zerolatency -preset ultrafast -f mpegts udp://localhost:6789
 On client(the same computer) -> ffplay udp://localhost:6789

The above works just fine, except for the latency, which i'm getting at about 1-2 second delay.

Now i want to try to change the encoder to use libvpx (vp8) for video and vorbis for audio (i changed the input to a pre-recorded h264 video, but it really doesn't matter)

 On server 
    >ffmpeg -i "suits.mp4" -r 30 -g 0 -vcodec libvpx -acodec vorbis -strict -2 -f webm -f mpegts udp://localhost:6789
     On client(the same computer) -> ffplay udp://localhost:6789
However this doesn't work... And below are console outputs:
    > onserver ->
    > ffmpeg version N-56165-gae12d65 Copyright (c) 2000-2013 the FFmpeg
    > developers   built on Sep 10 2013 19:42:46 with gcc 4.7.3 (GCC)  
    > configuration: --enable-gpl --enable-version3 --disable-w32threads
    > --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib   libavutil      52. 43.100 / 52. 43.100   libavcodec     55. 31.101 / 55. 31.101   libavformat    55. 16.102 / 55. 16.102   libavdevice    55.  3.100 / 55.  3.100   libavfilter     3. 84.100 /  3. 84.100   libswscale      2.  5.100 / 
    > 2.  5.100   libswresample   0. 17.103 /  0. 17.103   libpostproc    52.  3.100 / 52.  3.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Suits.mp4':   Metadata:
    >     major_brand     : isom
    >     minor_version   : 1
    >     compatible_brands: isom
    >     creation_time   : 2011-09-08 11:43:25   Duration: 00:42:14.87, start: 0.000000, bitrate: 882 kb/s
    >     Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 720x402 [SAR 1:1 DAR 120:67], 750 kb/s, 23.98 fps,
    > 23.98 tbr, 24k tbn, 47.95 tbc (default)
    >     Metadata:
    >       creation_time   : 2011-09-08 11:43:25
    >     Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 126 kb/s (default)
    >     Metadata:
    >       creation_time   : 2011-09-08 11:43:25 [libvpx @ 05392a80] v1.2.0 Output #0, mpegts, to 'udp://localhost:6789':   Metadata:
    >     major_brand     : isom
    >     minor_version   : 1
    >     compatible_brands: isom
    >     encoder         : Lavf55.16.102
    >     Stream #0:0(und): Video: vp8 (libvpx), yuv420p, 720x402 [SAR 1:1 DAR 120:67], q=-1--1, 200 kb/s, 90k tbn, 30 tbc (default)
    >     Metadata:
    >       creation_time   : 2011-09-08 11:43:25
    >     Stream #0:1(und): Audio: vorbis, 48000 Hz, stereo, fltp (default)
    >     Metadata:
    >       creation_time   : 2011-09-08 11:43:25 Stream mapping:   Stream #0:0 -> #0:0 (h264 -> libvpx)   Stream #0:1 -> #0:1 (aac -> vorbis) Press [q] to stop, [?] for help frame=42535 fps= 51 q=0.0 Lsize= 
    > 143539kB time=00:23:38.28 bitrate= 829.1kbits/s dup=8541 drop=0    
    > video:99155kB audio:28125kB subtitle:0 global headers:3kB muxing
    > overhead 12.772155% Received signal 2: terminating.

> on client    
> ffplay version N-56165-gae12d65 Copyright (c) 2003-2013 the FFmpeg
> developers   built on Sep 10 2013 19:42:46 with gcc 4.7.3 (GCC)  
> configuration: --enable-gpl --enable-version3 --disable-w32threads
> --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib   libavutil      52. 43.100 / 52. 43.100   libavcodec     55. 31.101 / 55. 31.101   libavformat    55. 16.102 / 55. 16.102   libavdevice    55.  3.100 / 55.  3.100   libavfilter     3. 84.100 /  3. 84.100   libswscale      2.  5.100 / 
> 2.  5.100   libswresample   0. 17.103 /  0. 17.103   libpostproc    52.  3.100 / 52.  3.100
>     nan    :  0.000 fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0   [mpegts @ 02eb8620] probed stream 0 failed
>     nan    :  0.000 fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0   [mp3 @ 02ed75a0] Header missing
>     Last message repeated 1 times [mp3 @ 02ed75a0] Header missing
>     La    Last message repeated 13 times
>     nan    :  0.000 fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0   [mp3 @ 02ed75a0] Header missing  Last message repeated 13 times
>     nan    :  0.000 fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0   [mp3 @ 02ed75a0] Header missing    Last message repeated 9 times
>     nan    :  0.000 fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0   [mp3 @ 02ed75a0] Header missing [mpegts @ 02eb8620] decoding for
> stream 1 failed [mpegts @ 02eb8620] Could not find codec parameters
> for stream 0 (Unknown: none ([6][0][0][0] / 0x0006)): unknown codec
> Consider increasing the value for the 'analyzeduration' and
> 'probesize' options [mpegts @ 02eb8620] Could not find codec
> parameters for stream 1 (Audio: mp3 ([6][0][0][0] / 0x0006), 0
> channels, s16p): unspecified frame size Consider increasing the value
> for the 'analyzeduration' and 'probesize' options
> udp://localhost:6789: could not find codec parameters

So does the point to point streaming for ffmpeg just doesn't work for vp8 or am i missing something? Btw, the end goal is to create a similar video chat based framework and i'll appreciate any suggestion. I'm reading up on webRTC now.

siniv
  • 11
  • 1
  • 3
  • Complete console outputs for each command are missing. Try `-f webm` for your ffmpeg and ffplay commands. You may need to start ffplay before ffmpeg. – llogan Sep 15 '13 at 18:42
  • adding -f webm for both ffmpeg and ffplay don't help. Output from the ffmpeg is still the same. Output from ffplay slightly different `nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0 [matroska,webm @ 02ef8220] Unknown entry 0x4741 [matroska,webm @ 02ef8220] Read error at pos. 3 (0x3) [matroska,webm @ 02ef8220] EBML header using unsupported features (EBML version 0, doctype (null), doc version 0) udp://localhost:6789: Not yet implemented in FFmpeg, patches welcome` with all the standard ffplay build information on the top (the same as what i have in the previous log) – siniv Sep 16 '13 at 01:51
  • are you wanting to switch codecs so that you can...get lower latency? – rogerdpack Nov 16 '13 at 23:41

0 Answers0