我读过一些问题,但没有一个解决我的问题。我制作了一个简单的客户端,通过icecast2服务器读取soundstream。我读声音的时候:
a = new WMPLib.WindowsMediaPlayer();
a.URL = "http://radiolink:8000/music";
a.controls.play();这是工作,我听音乐。现在我想读一下这首歌的标题。我在这里发现,我必须创建一个请求,比如:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://radiolink:8000/music");
request.Headers.Clear();
request.Headers.Add("GET", " HTTP/1.0");
request.UserAgent = "WinampMPEG/5.09";
request.Headers.Add("Icy-MetaData", "1");
request.KeepAlive = true;
WebResponse fifo = request.GetResponse();
Console.WriteLine(fifo.Headers);这个代码控制台只写输出(content-type=audio-mpg)。能帮我,让我用正确的方式正确读取数据吗?
//解决了第一部分。现在我接受了这一切:
冰-br:128冰-音频-信息: ice-samplerate=44100;ice-bitrate=128;ice-channels=2冰-描述:无线电fff冰-类型:各种冰-名称:无线电冰-酒吧:0冰-url:http://url.com冰-metaint: 16000高速缓存-控制:无缓存内容-类型:音频/mpeg
如何读取其他元数据?
发布于 2013-01-26 19:44:00
SHOUTcast/Icecast流的元数据不是在标头中,而是在实际流本身中。
您拥有的icy-metaint: 16000头是关键。每隔16,000个字节,您就会得到一个元数据块。该块中的第一个字节表示元数据长度。将其值乘以16,得到长度(以字节为单位)。一旦你这样做了,你就会得到这样的结果:
StreamTitle='Awesome Trance Mix - DI.fm';StreamUrl=''它将在末尾由空字节填充,直到达到块的长度为止。
对于PHP,我已经回答了同样的问题,但是无论哪种语言:Pulling Track Info From an Audio Stream Using PHP,概念都是一样的。
https://stackoverflow.com/questions/14540380
复制相似问题