是否可以使用HTML5播放shoutcast/icecast流?
如果是这样,我该如何实施呢?
使用jPlayer开发了一个互联网广播流媒体,它使用带有jQuery的html5音频标签,并为不支持的浏览器提供闪回功能.在iPhone(iOS 5.0.1)上测试播放器后,我们遇到了一个非常特殊的问题.
当iPhone连接到WiFi时,它使用HE-AAC V2流@ 64kbps 44.1kHz(苹果产品的首选编解码器)完美地流式传输.然而,当iPhone连接到3G移动网络时,它会"断续续续"或每1-2分钟停止流动1-2秒(不会完全停止流式传输).令人不安的是,当iPhone被迫以相同的比特率使用单独的MP3流时,它没有这个问题并且在3G上运行良好.
更新5
我们最近购买了3G/4G Sprint移动热点设备,并使用该设备测试了这个问题.当iPhone连接到移动热点时,它显示为连接到wifi设备,即使实际连接是通过3G/4G,也不会出现问题.这可能会回到iPhone不通过HTTP直播和直接连接到移动网络处理HE-AAC的问题.
更新4
将iPhone更新到iOS 5.1但问题仍然存在.
更新3
请阅读此处有关连接到移动网络时脚本无法正确呈现的各种问题.手指似乎指向可能插入代理以服务网页的移动网络运营商,例如用于缩小图像尺寸.它也可能会注入一些JavaScript页面.测试页面可以在这里找到 注意:此页面使用HE-AAC,因此它只适用于iPhone ...
UPDATE
根据Apple针对iOS设备的HTTP Live Streaming doc,"仅音频内容可以是MPEG-2传输,也可以是MPEG基本音频流,无论是采用ADTS标头的AAC格式还是MP3格式." 我们的音乐服务器使用OddcastV3编码器向icecastV2服务器发送三个流(MP3,HE-AAC V2和Oggvorbis).不确定编码器是否正在插入HE-AAC V2流的ADTS标头.有没有办法检查这个?
我需要编写一个Icecast 2客户端,它能够将来自计算机的音频(mp3文件,声卡录音等)传输到服务器.我决定在C#上写这样一个客户端.
两个问题:
1)了解我可能/应该/必须使用的通用指南(最佳实践,可能是技巧)非常有用,以便在C#中无缝地使用流式音频(当然是通过网络流式传输).一些关于TCP/IP流通用的一般技术文档,特别是ICY,关于应用程序整体架构的建议和注释将非常受欢迎.
2)是否有关于Icecast 2流媒体协议的良好文档?我在Icecast的官方网站上找不到那些文档.我不想直接从它的源代码中提取协议描述.如果协议真的很简单,那么有人可以在这里提供它的摘要吗?
我正在使用音频元素从icecast服务器流式传输ogg源.音频元素是否提取了冰冷的元数据,是否有办法通过javascript访问它?
基本上,我想显示我正在播放的广播电台的"当前播放"信息.我有什么选择?
谢谢!
我已经成功地在我的ubuntu机器上安装了icecast和darkice,并能够在我的局域网上直播.但令我失望的是它有15秒到20秒的延迟.这是非常糟糕的表现.我不认为这是因为我的局域网连接,因为即使我试图在同一台ubuntu机器上听也有延迟!
我试图将icecast配置为没有突发大小,这意味着没有缓冲,这有助于我将延迟减少到大约6秒到8秒.所以,如果您有任何建议或非常好的配置值,那将对我有很大的帮助.
PS我正在播放的格式是mp3.有人建议我应该使用opus编解码器,但我不认为icecast或darkice支持它.
我正在为icecast服务器开发客户端(www.icecast.org).任何人都可以告诉我,他们用于流媒体内容的格式是什么?
我正在查看他们的页面,但根本没有关于流格式的信息.
然后我检查了Wireshark跟踪,由于我的理解,我在200 OK响应GET请求时收到的音频数据的格式,它只是一个没有包含任何元数据的普通二进制音频数据,因此与SHOUTcast或HTTP相比较直播(HLS)它是相对简单的方法.
是对的吗?有经验吗?
Wireshark跟踪片段:
GET /bonton-128.mp3 HTTP/1.1
Host: icecast3.play.cz
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-US
Accept-Encoding: gzip, deflate
Connection: keep-alive
HTTP/1.0 200 OK
Content-Type: audio/mpeg
icy-br:128
ice-audio-info: ice-samplerate=44100;ice-bitrate=128;ice-channels=2
icy-br:128
icy-description:Radio Bonton
icy-genre:Pop / Rock
icy-name:Radio Bonton
icy-pub:0
icy-url:http://www.radiobonton.cz
Server: Icecast 2.3.2
Cache-Control: no-cache
Here are then aac or MPEG data
Run Code Online (Sandbox Code Playgroud)
感谢致敬,
斯登
我无法获取由Icecast服务器提供的静态内容(mp3文件)以及使用HTML5在Google Chrome浏览器中播放.我们通过Icecast服务mp3的原因是政策:CPB要求它们"流式传输"而不是"下载",因为我们是公共广播.我们的现场音频流在Chrome中播放得很好.
如果您将我的Icecast 2.4.3服务器提供的MP3的URL直接放入谷歌浏览器的网址栏中,则无法播放.在Firefox,IE,Safari等中做同样的事情.它播放!试试吧:
https://streaming.kansaspublicradio.org:8001/mp3/First_0713886.mp3
(我使用的临时解决方案是Flash,但Chrome的最新更新(v60.0)默认情况下阻止Flash,"始终允许此网站"选项似乎不起作用,并且显示Flash的小图标被阻止的更加离散.请在此处尝试:http://kansaspublicradio.org/kpr-news/midwest-farmers-hope-boost-online-grocery-shopping)
我最好猜测为什么会发生这种情况是因为它与此有关:https://developers.google.com/web/updates/2016/03/play-returns-promise?hl = en
因此,我尝试重现他们的代码示例,其中他们使用HTML5 Media Capture来播放音频,而无需用户交互.但是有了这个音频的URL,它就无法播放并抛出这个错误:Uncaught (in promise) DOMException: The element has no supported sources.尝试一下:https://jsfiddle.net/wo94xohr/2/它只能在Chrome中失败而不是Firefox或其他.
我再次尝试但没有HTML5 Media Capture的东西.仍然没有骰子.试试吧:https://jsfiddle.net/yrhets74/
此外,如果你看一下响应标题,你会看到"内容范围:字节0-0/0"......这是否意味着什么?
更新:我正在测试这是否是CORS(跨源资源共享)问题.我已经将jsfiddle更新为:
var audioElement = document.querySelector('#music');
audioElement.crossOrigin = "anonymous"; // CORS access restriction. Worth a shot but no dice
audioElement.type = "audio/mpeg"; // just in case? idk
audioElement.src = "https://streaming.kansaspublicradio.org:8001/mp3/First_0713886.mp3";
function startPlayback() {
// .play() …Run Code Online (Sandbox Code Playgroud) 我想在不使用自己的广播公司的情况下向SHOUTcast或Icecast服务器提供音频数据,因为我将在包括移动设备在内的各种平台上使用它.
我需要协议描述,开源项目或样本,以便能够使用Objective-C,C或C++将音频数据(从麦克风或文件)发送到SHOUTcast和Icecast服务器.
在哪里可以找到构建正确的SHOUTcast/Icecast源客户端所需的信息?
我在使用PHP查看统计数据(观众,当前歌曲播放等)时遇到了一些麻烦,我找不到任何有关如何执行此操作的信息.
Icecast2附带了几个XLS文件,我可以将这些文件与PHP一起包含在我的网站中,但是我不想每隔5秒更新一次包含的DIV,这对于XLS文件不起作用.
谢谢!
我找到了一个可以从Icecast或Shoutcast流中提取艺术家和标题名称的脚本.我希望脚本在歌曲改变时自动更新,此时它只在我执行它时工作.我是PHP的新手,所以任何帮助将不胜感激.谢谢!
define('CRLF', "\r\n");
class streaminfo{
public $valid = false;
public $useragent = 'Winamp 2.81';
protected $headers = array();
protected $metadata = array();
public function __construct($location){
$errno = $errstr = '';
$t = parse_url($location);
$sock = fsockopen($t['host'], $t['port'], $errno, $errstr, 5);
$path = isset($t['path'])?$t['path']:'/';
if ($sock){
$request = 'GET '.$path.' HTTP/1.0' . CRLF .
'Host: ' . $t['host'] . CRLF .
'Connection: Close' . CRLF .
'User-Agent: ' . $this->useragent . CRLF .
'Accept: */*' . CRLF .
'icy-metadata: 1'.CRLF.
'icy-prebuffer: …Run Code Online (Sandbox Code Playgroud)