java - FFMpeg - 将多个 rtmp 流输入合并到单个 rtmp 输出

标签 java ffmpeg video-streaming audio-streaming wowza

我正在尝试组合/合并两个 rtmp 流,然后将它们发布到另一个流

例如:

ffmpeg -i rtmp://ip:1935/live/micMyStream7 -i rtmp://ip:1935/live/MyStream7  -strict -2  -f flv rtmp://ip:1935/live/bcove7

场景如下,我得到了来自用户麦克风的流 是第一个 (micMyStream7),我还从另一个用户那里获得了一个流,但这个有音频和视频 (MyStream7)。

由于当用户说话时他们正在互相交谈,因此另一个人只能听,反之亦然。

我的想法是建立一个名为(bcove)的第三个流,它将“合并”它们两个,这样我就可以让观众只听他们之间的整个对话。

这是 ffmpeg 打印的日志,尽管我无法识别任何帮助我的消息。

paulo@paulo-desktop:~$ ffmpeg -re -i rtmp://ip:1935/live/micMyStream7 -i rtmp://ip:1935/live/MyStream7  -strict -2  -f flv rtmp://ip:1935/live/bcove7
ffmpeg version N-56029-g2ffead9 Copyright (c) 2000-2013 the FFmpeg developers
  built on Sep  4 2013 11:05:57 with gcc 4.7 (Ubuntu/Linaro 4.7.3-1ubuntu1)
  configuration: 
  libavutil      52. 43.100 / 52. 43.100
  libavcodec     55. 31.100 / 55. 31.100
  libavformat    55. 16.100 / 55. 16.100
  libavdevice    55.  3.100 / 55.  3.100
  libavfilter     3. 83.102 /  3. 83.102
  libswscale      2.  5.100 /  2.  5.100
  libswresample   0. 17.103 /  0. 17.103
Input #0, flv, from 'rtmp://ip:1935/live/micMyStream7':
  Metadata:
    author          : 
    copyright       : 
    description     : 
    keywords        : 
    rating          : 
    title           : 
    presetname      : Medium Bandwidth (300 Kbps) - VP6
    creationdate    : Wed Sep  4 16:41:52 2013
                    : 
    videodevice     : Built-in iSight
    videokeyframe_frequency: 5
    audiodevice     : External microphone
    audiochannels   : 1
    audioinputvolume: 75
  Duration: N/A, start: 0.000000, bitrate: 253 kb/s
    Stream #0:0: Video: vp6f, yuv420p, 320x240, 204 kb/s, 44.83 tbr, 1k tbn, 1k tbc
    Stream #0:1: Audio: mp3, 22050 Hz, mono, s16p, 49 kb/s
Input #1, flv, from 'rtmp://ip:1935/live/MyStream7':
  Metadata:
    author          : 
    copyright       : 
    description     : 
    keywords        : 
    rating          : 
    title           : 
    presetname      : Custom
    creationdate    : Wed Sep  4 12:02:24 2013
                    : 
    videodevice     : FaceTime HD Camera (Built-in)
    videokeyframe_frequency: 5
    audiodevice     : Internal microphone
    audiochannels   : 1
    audioinputvolume: 75
  Duration: N/A, start: 0.000000, bitrate: 253 kb/s
    Stream #1:0: Video: vp6f, yuv420p, 320x240, 204 kb/s, 45.08 tbr, 1k tbn, 1k tbc
    Stream #1:1: Audio: mp3, 22050 Hz, mono, s16p, 49 kb/s
Output #0, flv, to 'rtmp://ip:1935/live/bcove7':
  Metadata:
    author          : 
    copyright       : 
    description     : 
    keywords        : 
    rating          : 
    title           : 
    presetname      : Medium Bandwidth (300 Kbps) - VP6
    creationdate    : Wed Sep  4 16:41:52 2013
                    : 
    videodevice     : Built-in iSight
    videokeyframe_frequency: 5
    audiodevice     : External microphone
    audiochannels   : 1
    audioinputvolume: 75
    encoder         : Lavf55.16.100
    Stream #0:0: Video: flv1 (flv) ([2][0][0][0] / 0x0002), yuv420p, 320x240, q=2-31, 200 kb/s, 1k tbn, 44.83 tbc
    Stream #0:1: Audio: adpcm_swf ([1][0][0][0] / 0x0001), 22050 Hz, mono, s16, 88 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (vp6f -> flv)
  Stream #0:1 -> #0:1 (mp3 -> adpcm_swf)
Press [q] to stop, [?] for help
[mp3 @ 0x3625ec0] overread, skip -9 enddists: -3 -300:14.44 bitrate= 224.0kbits/s    
[mp3 @ 0x3625ec0] overread, skip -7 enddists: -3 -30:26.39 bitrate= 203.5kbits/s  

提前致谢

最佳答案

复制视频流并混合两个单声道流

使用amixamerge音频过滤器。

对于两个 RTMP 输入:

ffmpeg -i rtmp://ip:1935/live/micMyStream7 -i rtmp://ip:1935/live/MyStream7 -filter_complex "[0:a][1:a]amix[a]" -map 0:v -map "[a]" -c:v copy -f flv rtmp://ip:1935/live/bcove7

对于 RTMP 输入和附加循环音频文件:

ffmpeg -i rtmp://ip:1935/live/micMyStream7 -re -stream_loop -1 -i input.mp3 -filter_complex "[0:a][1:a]amix[a]" -map 0:v -map "[a]" -c:v copy -c:a aac -f flv rtmp://ip:1935/live/bcove7
  • -c:v copystream copy视频而不是重新编码。

关于java - FFMpeg - 将多个 rtmp 流输入合并到单个 rtmp 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18618191/

相关文章:

java - 在泛型方法中传递类型时,使用 TypeReference 的 ObjectMapper 不起作用

java - 什么时候在 Java 中使用可变参数?

node.js - 使用 Node js 将 S3 视频转换为音频文件(Lambda 函数)

python - 提取音频特征

amazon-s3 - 从托管连接到 Amazon S3

java - 使用 SAX 从行集架构中获取列名

php - 在php的目录中查找特定的文件类型,并在转换后将其发送到不同的目录

html - MP4 视频无法在移动设备和 Chrome 上播放?

ios - 无法在 WebRTC 上设置 session 描述

java - Selenium IE 驱动程序无法在 VPN 上运行