我正在尝试创建一个网络广播服务器来一次流式传输 3 个源。我正在使用 python 使用 python-shout 库为 icecast2 创建一个源客户端。我对语言(python)不太熟悉。但是,我得到了一个示例程序,它可以满足我的需要,而且我已经根据需要对其进行了调整。但是,我只能创建两个流,之后,我收到如下所示的错误消息。我不知道我做错了什么,所以我希望你们能帮我弄清楚。
hostname ="localhost"
port= 8000
password = "password"
import shout
import sys
import threading
from glob import glob
from random import shuffle,choice
class RunStream (threading.Thread):
def __init__ (self, channel_mount, music_directory, station_url, genre,name, description, bitrate="128", samplerate="44100", channels="5",music_format="mp3", ogv=0):
#connection to icecast
global hostname,port,password
self.song_conter= 0
self.s = shout.Shout()
self.s.audio_info = {shout.SHOUT_AI_BITRATE:bitrate, shout.SHOUT_AI_SAMPLERATE:samplerate, shout.SHOUT_AI_CHANNELS:channels}
self.s.name = name
self.s.url = station_url
self.s.mount = channel_mount
self.s.port = port
self.ogv = ogv
self.s.password = password
self.s.genre = …Run Code Online (Sandbox Code Playgroud) 我需要向Icecast流添加额外的元数据(超出艺术家和歌曲标题).我尝试过很多想法,但似乎没有任何想法.情况变得更加复杂,因为元数据也通过Wowza,它重新流式传输Icecast流.是否有Icecast支持的规范元数据字段列表,是否有人将自定义元数据作为Icecast流的一部分传递给Wowza?
通过HTML5 / Javascript(无Flash)捕获麦克风音频流然后将其发送到已经设置好的icecast服务器的步骤和方法是什么?
解决方案必须完全基于浏览器/网络,没有附加软件。服务器在 Rails 5.0.0.1 上。
我应该从哪里开始?
我正在努力在网上找到任何相关信息,因为一切都在谈论将音频文件上传/录制为完整文件,而不是流。
有没有办法将webrtc的getUserMedia(视频和音频)创建的本地blob流式传输到Icecast服务器,从而可以使用HTML5进行直播?
特别是在下面的例子中(来自Justin Uberti的2012年Google I/O视频),我可以捕获音频/视频并在视频元素中本地播放:
<script type="text/javascript">
var onGotStream = function(stream) {
var url = webkitURL.createObjectURL(stream);
video.src = url; //
}
navigator.webkitGetUserMedia({video: true, audio: true}, onGotStream, null);
<script>
<video = id='video' autoplay='autoplay'/>
Run Code Online (Sandbox Code Playgroud)
但是,我没有将视频src设置为本地blob,而是将流发送到Icecast服务器,然后使用指向Icecast服务器的视频元素播放该直播流.
这可能吗?我该怎么办呢?
谢谢!!
我正在为广播电台创建一个三星电视应用程序,他们在 Icecast 流中提供“正在播放”信息。是否可以(以及如何)提取此信息?
我正在开发一个应用程序,它需要将来自iOS设备的实时音频流式传输到icecast服务器,并同时在正在收听该录制音频流的其他iOS设备中播放该音频.
问题是:
这是我的icecast.xml配置文件:
<icecast>
<!-- location and admin are two arbitrary strings that are e.g. visible
on the server info page of the icecast web interface
(server_version.xsl). -->
<location>Earth</location>
<admin>admin@localhost</admin>
<limits>
<clients>100</clients>
<sources>2</sources>
<threadpool>5</threadpool>
<queue-size>524288</queue-size>
<client-timeout>30</client-timeout>
<header-timeout>15</header-timeout>
<source-timeout>10</source-timeout>
<!-- If enabled, this will provide a burst of data when a client
first connects, thereby significantly reducing the startup
time for listeners that do substantial buffering. However,
it also significantly increases latency between the source
client and listening client. …Run Code Online (Sandbox Code Playgroud) 我试图将两种液体与liquidsoap混合在一起,然后在左侧混合,在右侧混合,然后将其混合到冰播服务器中。我已经用Darkice串流了这两个流
这是我的伪代码
stream1 = 'localhost/stream1' " streamed with darkice on my localmachine
stream2 = 'localhost/stream2' " streamed with darkice on my localmachine
stream3 = mix(stream1[on the left], stream2[on the right])
output.icecast(stream3)
Run Code Online (Sandbox Code Playgroud)
有人知道吗 我是这种问题的新手。
在使用Ubuntu 14.04 LTS的服务器上安装了支持SSL的Icecast2 2.4.1.此外,在此服务器上工作的HTTPS网站.我想在页面上插入HTML5播放器,它也会通过SSL获取流(否则 - 混合内容错误).该网站有一个商业SSL证书,Icecast - 一个自签名的.Icecast配置文件:
<icecast>
<location>****</location>
<admin>admin@*************</admin>
<limits>
<clients>1000</clients>
<sources>2</sources>
<threadpool>5</threadpool>
<queue-size>524288</queue-size>
<source-timeout>10</source-timeout>
<burst-on-connect>0</burst-on-connect>
<burst-size>65535</burst-size>
</limits>
<authentication>
<source-password>*****</source-password>
<relay-password>*****</relay-password>
<admin-user>*****</admin-user>
<admin-password>*****</admin-password>
</authentication>
<hostname>************</hostname>
<listen-socket>
<port>8000</port>
<ssl>1</ssl>
</listen-socket>
<mount>
<mount-name>/stream</mount-name>
<charset>utf-8</charset>
</mount>
<mount>
<mount-name>/ogg</mount-name>
<charset>utf-8</charset>
</mount>
<fileserve>1</fileserve>
<paths>
<basedir>/usr/share/icecast2</basedir>
<logdir>/var/log/icecast2</logdir>
<webroot>/usr/share/icecast2/web</webroot>
<adminroot>/usr/share/icecast2/admin</adminroot>
<alias source="/" dest="/status.xsl"/>
<ssl-certificate>/etc/icecast2/icecast2.pem</ssl-certificate>
</paths>
<logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<loglevel>4</loglevel>
</logging>
<security>
<chroot>0</chroot>
<changeowner>
<user>icecast2</user>
<group>icecast</group>
</changeowner>
</security>
</icecast>
Run Code Online (Sandbox Code Playgroud)
Icecast证书(/etc/icecast2/icecast2.pem)由以下人员生成:
openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout icecast2.pem -out icecast2.pem
我希望从地址https://domain.name:8000/stream https://domain.name:8000/ogg …
我有一个正在运行的 nginx 服务器,它允许我从我们的移动制作系统流式传输实时视频。我们还在单独的服务器上有一个广播电台,并且希望向这两个服务器传输内容。但我无法使其工作,也无法获得任何日志或错误信息来解释原因。我尝试过 nginx 配置和 FFMPEG 来尝试解决这个问题。
我尝试了各种尝试,使用我认为我从在线其他页面理解的内容:
exec_push FFREPORT=file=ffreport.log:level=48 ffmpeg -i $basename.flv -vn -acodec mp3 rtmp://source:********!!@xxx.xxx.xxx.180:8000/live;
Run Code Online (Sandbox Code Playgroud)
还尝试在 nginx conf 中使用简单的重新流:
application restream {
live on;
exec_push ffmpeg -i $basename.flv -vn -acodec mp3 rtmp://source:***********@xxx.xxx.xxx.180:8000/live;
# push server2:1935
}
Run Code Online (Sandbox Code Playgroud)
我在Mixxx Live Broadcast Connection上使用了相同的信息来获取详细信息,以为我在icecast2服务器上问了同样的事情。只是源头是nginx服务器。
这是 nginx 上的完整配置
rtmp {
server {
listen 1935;
chunk_size 4000;
application live {
live on;
allow publish 127.0.0.1;
allow publish all;
allow play all;
record all;
record_path /usr/local/nginx/flv-streams;
record_unique on;
exec_record_done ffmpeg -i $basename.flv /usr/local/nginx/html/streams/$basename.mp4;
hls on; …Run Code Online (Sandbox Code Playgroud) 我一直试图找出实现我已经有一段时间的想法的最佳方法。
目前,我有一个无线电扫描仪的 icecast mp3 流,其中“正在播放”元数据会根据扫描仪登陆的频道实时更新。当使用 VLC 等专用媒体播放器时,元数据与接收到的音频完美对齐,它的功能完全符合我的要求——本质上是一个远程无线电扫描仪。我想通过网页实现类似的东西,从表面上看,这似乎是一项简单的任务。
如果我只想流式传输音频,使用简单的<audio>标签就足够了。然而,HTML5 音频播放器没有嵌入的 in-stream 元数据的概念,icecast 与 mp3 音频数据一起编码。虽然我可以从 icecast 服务器状态 json 查询当前的“正在播放”元数据,但由于客户端和服务器端缓冲,以这种方式完成时,音频和元数据之间可能会有超过 20 秒的延迟。在某些情况下,当扫描仪每秒都在更改其“正在播放”元数据时,这完全不适合我的应用程序。
有一个非常有趣的 Node.JS 解决方案就是为了这个确切的目标而开发的 - 无线电扫描仪应用程序中的实时元数据:icecast-metadata-js。这表明确实可以处理来自单个 icecast 流的音频和元数据。现场演示特别令人印象深刻:https : //eshaz.github.io/icecast-metadata-js/
但是,我正在寻找一种可以完全在客户端运行而无需安装 Node.JS 的解决方案,而且看起来这应该是相对简单的。
今天搜索了一天的大部分时间,似乎在这个站点和其他地方有几个类似的问题,没有任何有凝聚力、精心设计的答案或建议。从我到目前为止能够收集到的信息来看,我相信我的解决方案是使用 Javascript 流功能(例如fetch)从 icecast 服务器中提取原始 mp3 和元数据,通过 Web Audio API 播放音频并处理元数据当他们到达时阻止。类似于下图:

我想知道是否有人有任何好的阅读和/或示例来通过 Web Audio API 播放 mp3 流。我在大多数 JS 方面仍然是一个相对新手,但我了解 API 的基本概念以及它如何处理音频数据。我正在努力实现的正确方法是实现 a) 实时处理来自 mp3 流的数据,以及 b) 检测嵌入在流中的元数据块并相应地处理它们。
如果这是一个冗长的问题,我深表歉意,但我想提供足够的背景故事来解释为什么我想以我所做的特定方式处理事情。
在此先感谢您的建议和帮助!
icecast ×10
javascript ×3
audio ×2
metadata ×2
core-audio ×1
ffmpeg ×1
html ×1
html5-video ×1
ios ×1
ipad ×1
liquidsoap ×1
nginx ×1
objective-c ×1
python ×1
shoutcast ×1
ssl ×1
streaming ×1
ubuntu-14.04 ×1
webrtc ×1
wowza ×1