2017-02-15 113 views
5

我运行此命令可以将udp实时流传输到可使用正在构建的移动应用程序播放的http实时流。 它只是一个只有音频流的流。ffmpeg从具有多个通道的输入输出单独通道

的ffmpeg -i UDP:// @本地:1111 -map 0:一个http://localhost:8090/feed1.ffm

Input #0, mpegts, from 'udp://@localhost:1111': 
    Duration: N/A, start: 54616.264622, bitrate: 768 kb/s 
    Program 1 
    Metadata: 
    service_name : Service 1 
    service_provider: TLK 
    Stream #0:0[0x101]: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, s16p, 96 kb/s 
    Program 2 
Metadata: 
    service_name : Service 2 
    service_provider: TLK 
Stream #0:1[0x111]: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, s16p, 96 kb/s 
Program 3 
Metadata: 
    service_name : Service 3 
    service_provider: TLK 
Stream #0:2[0x121]: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, s16p, 96 kb/s 
Program 4 
Metadata: 
    service_name : Service 4 
    service_provider: TLK 
Stream #0:3[0x131]: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, s16p, 96 kb/s 
    Program 5 
Metadata: 
    service_name : Service 5 
    service_provider: TLK 
Stream #0:4[0x141]: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, s16p, 96 kb/s 
    Program 6 
Metadata: 
    service_name : Service 6 
    service_provider: TLK 
Stream #0:5[0x151]: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, s16p, 96 kb/s 
    Program 7 
Metadata: 
    service_name : Service 7 
    service_provider: TLK 
Stream #0:6[0x161]: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, s16p, 96 kb/s 
Program 8 
Metadata: 
    service_name : Service 1 
    service_provider: TLK 
Stream #0:7[0x171]: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, s16p, 96 kb/s 

我得到这个输出

Stream mapping: 
    Stream #0:0 -> #0:0 (mp2 (native) -> mp2 (native)) 
    Stream #0:0 -> #0:1 (mp2 (native) -> mp2 (native)) 
Press [q] to stop, [?] for help 
size=  100kB time=00:00:07.19 bitrate= 113.8kbits/s speed=3.01x 
video:0kB audio:84kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 18.358242% 

我真的想要一个方法可以让我能够映射每个输入流有一个输出流,可以从另一个可以分开访问,也许如果我需要第一个流也许我只会

ffplay http://localhost:8090/feed1.ffm 

,如果我需要第7流我只是

ffplay http://localhost:8090/feed7.ffm 

请谁能帮我破解这个问题。对于我目前的情况,FFmpeg没有复杂的例子。

这是我的头信息

[email protected]:~$ \ 
ffmpeg -i udp://@localhost:4000 \ 
    -map 0:a:0  http://localhost:8090/feed1.ffm 
    -map 0:a:1 http://localhost:8090/feed2.ffm 
    -map 0:a:2 http://localhost:8090/feed3.ffm 
    -map 0:a:3 http://localhost:8090/feed4.ffm 
    -map 0:a:4 http://localhost:8090/feed5.ffm 
    -map 0:a:5 http://localhost:8090/feed6.ffm 
    -map 0:a:6 http://localhost:8090/feed7.ffm 
    -map 0:a:7 http://localhost:8090/feed8.ffm 

的ffmpeg版本3.2.4-1〜16.04.york0版权所有(C)2000-2017 FFmpeg的开发人员使用GCC 5.4.1内置(Ubuntu的5.4.1-5ubuntu2 〜16.04.york1)20170210 配置:--prefix =/usr --extra-version ='1〜16.04.york0' - toolchain =硬化--libdir =/usr/lib/x86_64-linux-gnu --incdir =/usr/include/x86_64-linux-gnu --enable-gpl --disable -s剥离--enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable- libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enab le-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy - enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 - enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint - 使-frei0r --enable-libopencv --enable-libx264 --enable共享 libavutil 55. 34.101/34.101 55. libavcodec的 57. 64.101/64.101 57. 了libavformat 57. 56.101/56.101 57. libavdevice 57. 1.100/57. 1.100 libavfilter 6. 65.100/6. 65.100 libavresample 3.1.0/3. 1. 0 libswscale 4 2.100/2.100 4. libswresample 2. 3.100/2 3.100 libpostproc 54 1.100/1.100 54.

Input #0, mpegts, from 'udp://@localhost:1111': 
    Duration: N/A, start: 60047.944622, bitrate: 768 kb/s 
    Program 1 
    Metadata: 
    service_name : Service 1 
    service_provider: TKL 
Stream #0:0[0x101]: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, s16p, 96 kb/s 
Program 2 
Metadata: 
    service_name : Service 2 
    service_provider: TKL 
Stream #0:1[0x111]: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, s16p, 96 kb/s 
Program 3 
Metadata: 
    service_name : Service 3 
    service_provider: TKL 
Stream #0:2[0x121]: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, s16p, 96 kb/s 
Program 4 
Metadata: 
    service_name : Service 4 
    service_provider: TKL 
Stream #0:3[0x131]: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, s16p, 96 kb/s 
Program 5 
Metadata: 
    service_name : Service 5 
    service_provider: TKL 
Stream #0:4[0x141]: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, s16p, 96 kb/s 
Program 6 
Metadata: 
    service_name : Service 6 
    service_provider: TKL 
Stream #0:5[0x151]: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, s16p, 96 kb/s 
Program 7 
Metadata: 
    service_name : Service 7 
    service_provider: TKL 
Stream #0:6[0x161]: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, s16p, 96 kb/s 
Program 8 
Metadata: 
    service_name : Service 8 
    service_provider: TKL 
Stream #0:7[0x171]: Audio: mp2 ([3][0][0][0]/0x0003), 48000 Hz, stereo, s16p, 96 kb/s 
Output #0, ffm, to 'http://localhost:8090/feed1.ffm': 
Metadata: 
creation_time : now 
encoder   : Lavf57.56.101 
Stream #0:0: Audio: mp2, 44100 Hz, mono, s16, 32 kb/s 
Metadata: 
    encoder   : Lavc57.64.101 mp2 
Stream #0:1: Audio: mp2, 44100 Hz, stereo, s16, 64 kb/s 
Metadata: 
    encoder   : Lavc57.64.101 mp2 
Output #1, ffm, to 'http://localhost:8090/feed2.ffm': 
Metadata: 
creation_time : now 
encoder   : Lavf57.56.101 
Stream #1:0: Audio: mp2, 44100 Hz, stereo, s16, 64 kb/s 
Metadata: 
    encoder   : Lavc57.64.101 mp2 
Output #2, ffm, to 'http://localhost:8090/feed3.ffm': 
Metadata: 
creation_time : now 
encoder   : Lavf57.56.101 
Stream #2:0: Audio: mp2, 44100 Hz, stereo, s16, 64 kb/s 
Metadata: 
    encoder   : Lavc57.64.101 mp2 
Output #3, ffm, to 'http://localhost:8090/feed4.ffm': 
Metadata: 
creation_time : now 
encoder   : Lavf57.56.101 
Stream #3:0: Audio: mp2, 44100 Hz, stereo, s16, 64 kb/s 
Metadata: 
    encoder   : Lavc57.64.101 mp2 
Output #4, ffm, to 'http://localhost:8090/feed5.ffm': 
Metadata: 
creation_time : now 
encoder   : Lavf57.56.101 
Stream #4:0: Audio: mp2, 44100 Hz, stereo, s16, 64 kb/s 
Metadata: 
    encoder   : Lavc57.64.101 mp2 
Output #5, ffm, to 'http://localhost:8090/feed6.ffm': 
Metadata: 
creation_time : now 
encoder   : Lavf57.56.101 
Stream #5:0: Audio: mp2, 44100 Hz, stereo, s16, 64 kb/s 
Metadata: 
    encoder   : Lavc57.64.101 mp2 
Output #6, ffm, to 'http://localhost:8090/feed7.ffm': 
Metadata: 
creation_time : now 
encoder   : Lavf57.56.101 
Stream #6:0: Audio: mp2, 44100 Hz, stereo, s16, 64 kb/s 
Metadata: 
    encoder   : Lavc57.64.101 mp2 
Output #7, ffm, to 'http://localhost:8090/feed8.ffm': 
Metadata: 
creation_time : now 
encoder   : Lavf57.56.101 
Stream #7:0: Audio: mp2, 44100 Hz, stereo, s16, 64 kb/s 
Metadata: 
    encoder   : Lavc57.64.101 mp2 
Stream mapping: 
Stream #0:0 -> #0:0 (mp2 (native) -> mp2 (native)) 
Stream #0:0 -> #0:1 (mp2 (native) -> mp2 (native)) 
Stream #0:0 -> #1:0 (mp2 (native) -> mp2 (native)) 
Stream #0:0 -> #2:0 (mp2 (native) -> mp2 (native)) 
Stream #0:0 -> #3:0 (mp2 (native) -> mp2 (native)) 
Stream #0:0 -> #4:0 (mp2 (native) -> mp2 (native)) 
Stream #0:0 -> #5:0 (mp2 (native) -> mp2 (native)) 
Stream #0:0 -> #6:0 (mp2 (native) -> mp2 (native)) 
Stream #0:0 -> #7:0 (mp2 (native) -> mp2 (native)) 
Press [q] to stop, [?] for help 

这就是我的全控制台。

回答

0

基本语法ffmpeg -i input1 -i input2 {switches} output1 {switches} output2...,所以

ffmpeg -i udp://@localhost:1111 -map 0:a:0 http://localhost:8090/feed1.ffm 
           -map 0:a:1 http://localhost:8090/feed2.ffm 
           -map 0:a:2 http://localhost:8090/feed3.ffm 
           ... 
+0

我试过了,它将第一个流复制到所有其他流 流映射:流#0:0 - >#0:0(mp2(native) - > mp2(native)) Stream#0:0 - > #0:1(mp2(native)) - > mp2(native)) Stream#0:0 - >#2 :0(mp2(native) - > mp2(native)) Stream#0:0 - >#4:0(mp2(native)) - > mp2(native)) Stream#0:0 - >#3:0 (mp2(native) - > mp2(native)) Stream#0:0 - >#6:0(mp2(native)) - > mp2(native)) Stream#0: (native) - > mp2(native)) Stream#0:0 - >#7:0(mp2(native) - > mp2(native)) 按[q]停止,[?]寻求帮助 –

+0

显示完整的控制台输出。 – Mulvya

+0

这是短样本的链接。它拥有全部8个流媒体频道。请下载并尝试模拟我的情况。 http://drive.google.com/open?id=0B12_TxWYu6LzMlBsTDVMN2RjZ1E –

2

你可以做到这一点的同时并行进程运行的ffmpeg的7种不同的情况;如果你愿意的话。

让每个ffmpeg实例解复用单个音频流并输出到相应的端口。

会去有点像这样:

(ffmpeg -i udp://@localhost:1111 -map 0:a:0 http://localhost:8090/feed1.ffm) & (ffmpeg -i udp://@localhost:1111 -map 0:a:1 http://localhost:8090/feed2.ffm) & (ffmpeg -i udp://@localhost:1111 -map 0:a:2 http://localhost:8090/feed3.ffm) & and so on.

不会推荐它虽然会吃了你的CPU的能力。