使用 VLC 从其他计算机上的 ffmpeg 接收 rtp (opus) 流

Posted

技术标签:

【中文标题】使用 VLC 从其他计算机上的 ffmpeg 接收 rtp (opus) 流【英文标题】:Receive rtp (opus) stream from ffmpeg on other computer with VLC 【发布时间】:2013-04-06 01:32:24 【问题描述】:

我目前正在尝试使用 VLC 在单独的计算机上播放作品流。

目前设置如下:

运行 ffmpeg 的 Odroid-U2 捕获音频并作为 rtp opus 流发送到远程计算机.... 使用的命令:ffmpeg -f alsa -ac 1 -i hw:0 -acodec libopus -ab 32k -ac 1 -f rtp rtp://192.168.0.115:2032

远程计算机(在同一本地网络上)位于 192.168.0.115 Odroid 位于 192.168.0.124

如果我在 libopus 的位置使用 libmp3lame,那么流将毫无问题地运行,并且不会提示它需要 sdp....

远程计算机上的 VLC 输出:

SDP required: A description in SDP format is required to receive the RTP stream. Note that rtp:// URIs cannot work with dynamic RTP payload format (97).

如果我使用放入 vlc 的 *.sdp 文件来播放流,它什么也不做(没有错误也没有播放)

使用的 SDP 文件:

    SDP:
    v=0
    o=- 0 0 IN IP4 127.0.0.1
    s=No Name
    c=IN IP4 192.168.0.115
    t=0 0
    a=tool:libavformat 55.2.100
    m=audio 2032 RTP/AVP 97
    b=AS:32
    a=rtpmap:97 opus/48000

Odroid 上的 ffmpeg 输出:

    linaro@linaro-ubuntu-desktop:~$ ffmpeg -f alsa -ac 1 -i hw:0 -acodec libopus -ab 32k -ac 1         -f rtp rtp://192.168.0.115:2032
    ffmpeg version git-2013-04-13-87dd62e Copyright (c) 2000-2013 the FFmpeg developers
      built on Apr 13 2013 09:47:34 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
      configuration: --enable-gpl --enable-libmp3lame --enable-libopencore-amrnb --enable-        libopencore-amrwb --enable-libspeex --enable-librtmp --enable-libtheora --enable-libvorbis         --enable-libvpx --enable-x11grab --enable-libx264 --enable-nonfree --enable-version3         --enable-libopus
      libavutil      52. 26.100 / 52. 26.100
      libavcodec     55.  2.100 / 55.  2.100
      libavformat    55.  2.100 / 55.  2.100
      libavdevice    55.  0.100 / 55.  0.100
      libavfilter     3. 53.101 /  3. 53.101
      libswscale      2.  2.100 /  2.  2.100
      libswresample   0. 17.102 /  0. 17.102
      libpostproc    52.  3.100 / 52.  3.100
    Guessed Channel Layout for  Input Stream #0.0 : mono
    Input #0, alsa, from 'hw:0':
      Duration: N/A, start: 1365868129.196234, bitrate: 768 kb/s
        Stream #0:0: Audio: pcm_s16le, 48000 Hz, mono, s16, 768 kb/s
    Output #0, rtp, to 'rtp://192.168.0.115:2032':
      Metadata:
        encoder         : Lavf55.2.100
        Stream #0:0: Audio: opus, 48000 Hz, mono, s16, 32 kb/s
    Stream mapping:
      Stream #0:0 -> #0:0 (pcm_s16le -> libopus)
    SDP:
    v=0
    o=- 0 0 IN IP4 127.0.0.1
    s=No Name
    c=IN IP4 192.168.0.115
    t=0 0
    a=tool:libavformat 55.2.100
    m=audio 2032 RTP/AVP 97
    b=AS:32
    a=rtpmap:97 opus/48000

非常感谢任何帮助....

问候

【问题讨论】:

【参考方案1】:

只需删除“SDP:”行,以便您的 sdp 文件仅包含:

v=0 o=- 0 0 IN IP4 127.0.0.1 s=没有名字 c=IN IP4 192.168.0.115 t=0 0 a=工具:libavformat 55.2.100 m=音频 2032 RTP/AVP 97 b=AS:32 a=rtpmap:97 opus/48000

【讨论】:

以上是关于使用 VLC 从其他计算机上的 ffmpeg 接收 rtp (opus) 流的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 VLC 或 FFMPEG 命令行将外部音轨添加到视频文件

VLC_SDK的调用

linux系统中Nginx+FFmPeg+vlc实现网页视频播放配置过程

如何利用VLC或FFMPEG将HTTP的串流转换成RTMP

如何利用VLC或FFMPEG将HTTP的串流转换成RTMP

如何利用VLC或FFMPEG将HTTP的串流转换成RTMP