我必须创建提供在线广播流(icecast)的应用程序,最好是.ogg格式.所以我有下一个问题:
CFNetwork
,CoreAudio
,
AudioToolbox
等(我不看cocos2d的,因为这很可笑),我错了?AVPlayer
,MPMovieMediaController
,AudioSreaming LIB通过MattGallagher和DigitalDJ,以及这些解决方案都不能为我提供了元数据访问.对于AVPlayer:
-(void)playButtonPressed:(id)sender
{
NSURL *grindURL = [NSURL URLWithString:@"http://radio.goha.ru:8000/grind.fm"];
grindFMPlayer = [[AVPlayer alloc] initWithURL:grindURL];
[grindFMPlayer.currentItem addObserver:self forKeyPath:@"status" options:0 context:nil];
AVPlayerItem *item = grindFMPlayer.currentItem;
[grindFMPlayer play];
}
-(void)stopButtonPressed:(id)sender
{
AVURLAsset *ass = grindFMPlayer.currentItem.asset;
NSArray *arr = [ass commonMetadata];
NSArray *it_meta = [grindFMPlayer.currentItem timedMetadata];
[grindFMPlayer pause];
}
Run Code Online (Sandbox Code Playgroud)
arr和it_meta计数总是0,没有歌曲\艺术家\任何元数据.
同样的MPMovieMediaController
,从未调用metadataUpdate
streamAudioPlayer = [[MPMoviePlayerController alloc]
initWithContentURL:[NSURL URLWithString:@"http://radio.goha.ru:8000/grind.fm"];
streamAudioPlayer.movieSourceType = …
Run Code Online (Sandbox Code Playgroud) 我正在使用音频元素从icecast服务器流式传输ogg源.音频元素是否提取了冰冷的元数据,是否有办法通过javascript访问它?
基本上,我想显示我正在播放的广播电台的"当前播放"信息.我有什么选择?
谢谢!
我正在为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)
感谢致敬,
斯登
我制作了一个非常好用的收音机应用程序.我也可以播放广播流并获取元数据.流媒体服务来自shoutcast.
唯一的问题是,我将url作为数据源添加到媒体播放器,然后每隔5秒获取标题和艺术家.
有什么办法,我可以制作一个http请求然后拆分音频和元数据,然后将其发送到媒体播放器?
获取元数据的代码.
private void retreiveMetadata() throws IOException {
int metaDataOffset = 0;
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.addHeader("Icy-MetaData", "1")
.addHeader("Connection", "close")
.addHeader("Accept", "")
.url(streamUrl)
.build();
request.headers("");
Response response = client.newCall(request).execute();
InputStream stream = response.body().byteStream();
//Map<String, List<String>> headers = response..getHeaderFields();
if (!response.headers("icy-metaint").equals("")) {
// Headers are sent via HTTP
String icyMetaInt = response.headers("icy-metaint").toString();
icyMetaInt = icyMetaInt.replace("[", "");
icyMetaInt = icyMetaInt.replace("]", "");
metaDataOffset = Integer.parseInt(icyMetaInt);
} else {
// Headers are sent within a stream …
Run Code Online (Sandbox Code Playgroud) 我找到了一个可以从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) 我正在为广播电台创建一个三星电视应用程序,他们在 Icecast 流中提供“正在播放”信息。是否可以(以及如何)提取此信息?
我喜欢开发一个Windowsphone 8/7互联网广播应用程序,它从shoutcast无线电频道流式传输音频文件.为此我需要从流式传输中提取元数据.现在我想知道如何从流中提取元数据.
我使用JLayer到流在线广播音乐,所以这种简单的代码是在这里:(凡StreamPlayer是一个特殊的实施JLayer)
// Radio Station URL示例是http://radio.flex.ru:8000/radionami
/**
* Plays the Given Online Stream
*
* @param url
* <b> The Specified url you want to connect </b>
* @throws IOException
* @throws JavaLayerException
*/
public void playRadioStream(URL spec) {
try {
// Connection
URLConnection urlConnection = spec.openConnection();
// Connecting
urlConnection.connect();
// Try to play it
StreamPlayer player = new StreamPlayer();
player.open((urlConnection.getInputStream()));
player.play();
} catch (StreamPlayerException | IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
我无法弄清楚如何从这个连接中检索信息,就像现在从这个广播电台播放的歌曲或者电视台的名字等...真的很感谢帮助!! …
我正在制作一个应用程序来使用我的在线广播网站,我正在使用Android 2.2(API 8)进行编码,并且我使用了两个按钮来使用Shoutcast Stream.
这是我主类的代码:
public class GrooveOfMusicRadioActivity extends Activity {
/** Called when the activity is first created. */
MediaPlayer mediaPlayer;
Button start, stop;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (Button) findViewById(R.id.button1);
stop = (Button) findViewById(R.id.button2);
start.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
mediaPlayer.start();
}
});
stop.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
mediaPlayer.pause();
}
});
String url = "http://67.212.165.106:8161"; // your URL …
Run Code Online (Sandbox Code Playgroud) 有没有办法使用 FFMpeg 从shoutcast 流中获取ICY 元数据?一种方法是自己处理连接/流并将自定义 IOStream 发送到 ffmpeg。
还有其他简单的方法吗?或可用的解复用器?
谢谢