如何使从的Icecast接力ffmpeg的MP3流的元数据?

问题描述

我试图中继一个互联网广播流与所述命令:

ffmpeg -re -i 'http://interneTradIoUrl'-vn -acodec copy -f tee -map 0:a "[f=mp3]icecast://source:pass@icecast:8000/a|[f=mp3]icecast://source:pass@icecast:8000/b"

输出流具有所有的元数据:

Output #0,tee,to '[f=mp3]icecast://source:pass@icecast:8000/a|[f=mp3]icecast://source:pass@icecast:8000/b':
  Metadata:
    audiocodec      : MP3
    audiodevice     : IN  1+2 (Digigram LoLa280)
    audiodeviceid   : e08a462b-2944-4abf-894a-5d5e8649452d
    type            : event
    encoderMachineName: ERAdio
    hasAudio        : true
    hasCuePoints    : true
    hasKeyframes    : true
    hasVideo        : false
    source          : MediaProxy 4.4.13.6
    name            : ad
    ad_type         : endbreak
    cue_id          : b6c7ff39-2103-4442-bdc8-35f8ba2bb97d
    cue_time_duration: 44.365
    cue_time_start  : 1610035039552
    cue_title       : PSA - Danny - Parking (Jun 2020)
    encoder         : Lavf58.45.100
    Stream #0:0: Audio: mp3,44100 Hz,stereo,fltp,98304 kb/s
Stream mapping:
  Stream #0:1 -> #0:0 (copy)

但是,如果客户端连接到icecast服务,元数据被丢失: ffprobe https://icecasturl/a

Input #0,mp3,from 'https://icecasturl/a':
  Metadata:
    icy-pub         : 0
    icy-Metadata    : 1
    StreamTitle     :
  Duration: N/A,start: 0.000000,bitrate: 96 kb/s
    Stream #0:0: Audio: mp3,96 kb/s

如何配置的Icecast使得其转发所有源数据流的元数据?

解决方法

请考虑直接使用 Icecast 进行中继。

相关文档在这里:https://icecast.org/docs/icecast-2.4.1/relaying.html

在这个用例中没有特别的理由使用 ffmpeg。

,

如果您希望带内转发元数据,那么您的初始请求必须包含标头:

Icy-MetaData: 1

服务器随后会将元数据插入到流中。您选择如何解析它取决于您。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...