1

我正在尝试在 android 中实现无线电流切换器。我想做的,按照所需的顺序,是这样的:

  1. 开始播放广播电台
  2. 从该电台获取当前播放歌曲的结束时间
  3. 在 endTime - Delta,我想扫描一个电台列表,我想返回一个在区间 [endTime, endTime + Delta'] 中开始有新歌的电台列表
  4. 从[3]中的结果集切换到一个流,然后重复

所以,我可以播放广播电台(没问题)。我可以在歌曲更改时收到通知(使用streamscraper 获取元数据并在元数据更改时生成通知)。但是,我无法找到的是是否可以执行以下操作:

  1. 获取当前播放歌曲的结束时间
  2. 扫描电台列表,并获取大约在同一时间开始的歌曲(因此获取歌曲的 startTime)或可能即将开始的歌曲(如果这些流中当前歌曲的 endTime 接近或者我实际上可以获得流程序提前)。

如果有人能告诉我这是否可能,我将不胜感激。

4

3 回答 3

4

这是不可能的。在停止播放之前,您无法知道正在播放的内容的结束时间。数据不存在,甚至不适用于所有流。(想想现场节目、DJ 混合节目、交叉淡入淡出的开始/结束点等)

于 2012-04-07T19:22:01.367 回答
0

我能够做一些类似于你在 SHOUTcast 中所指的事情。我不确定 Icecast 的日志文件是如何格式化的,但我能够使用 PHP 来基本观察“Song Change”事件的日志。

一旦能够这样做,您就可以根据需要执行代码。如果您想知道标题播放的长度,您可以在歌曲更新时启动计时器,并在歌曲再次更改时停止。

这有点棘手,但它确实有效.. www.soundcheck.xyz - 自动将当前播放的歌曲实时发布到 Twitter。

于 2015-03-30T20:04:02.497 回答
-1

流由无缝的 mp3 流组成,这就是流的作用……它将分离的 mp3 拼接到一个大流中。

但是流中有轨道ID标签......如果您可以找到结束并从它们开始,或者它们是否正好在轨道开始或其他固定位置开始,则不知道。

大多数电台不会提前发送有关下一首曲目的信息只是因为他们不知道,大多数使用自动 dj 播放列表,其中服务器必须在新旧曲目之间的小间隙决定新曲目将是什么,即:它不决定那个在播放旧曲目时。

一些电台确实会发送信息(PHP 到他们的网页)下一首曲目将是什么,但大多数不会......如果他们这样做,那么这些信息肯定不在流本身中。

也许一个技巧可能是为您的听众添加延迟,
即:听众当前听到的
内容是旧的(最多几分钟或 1 个完整的曲目)

不知道如何创建这样的延迟......也许你需要记录(缓冲)它
并延迟播放(在你的应用程序中或通过一些额外的服务器)

您的(未延迟的)应用程序将(希望)通知当前歌曲何时结束
,因为新歌曲以新的 ID2/3 标签开始...当他当前但延迟的歌曲结束时,它将将您的听众切换到新的流.

说不同......在你的应用程序向前看的表面之下(相对于听众)

您需要学习 Shoutcast 和 ID-tag 协议。额外的静音检测也可能有所帮助(不是万无一失的)。

可能并不总是有效..有些电台不发送 ID 标签,其他电台则淡入淡出他们的曲目(没有沉默)......正是为了避免这些技巧。

或者类似的东西......祝我好运,我不会编写任何代码......这只是理论上的,我怀疑一些喊话开膛手使用这个技巧......我想他们使用这个来扫描多个流(并行)以查找某些预设的艺术家曲目。也许您可以通过对这些裂土器进行逆向工程来获得一些想法。因为我自己有一台收音机,所以我不喜欢这些技巧,因为他们在我支付版权费用的同时从我这里偷窃……许多开膛手会扼杀在线收音机。

最后,我不认为你的想法(如果我很好地理解它的目的)有用,无论如何
从一个流切换到另一个流,每个下一首曲目似乎都不是一种享受的体验。
好的广播电台将有一个精心制作(有序)的播放列表
,如果你把它搞砸了,你的听众会在很短的时间内得到很多情绪/风格的变化。

唯一有用的目的可能是构建一个自动开膛手,可以分散预设曲目/艺术家从大量平行观察的流中,并在播放想要的曲目时记录它们......对于许多在线电台来说,这些开膛手是一个大问题已经有 10 个以上的开膛手和在线广播已经死了……结果高质量和独立的音乐将不再可用……我们将只被 Youtube 和其他受金钱侵扰的企业集团所困……我不是期待……好奇你是否有其他有用的目的。

于 2013-04-06T02:50:49.530 回答