获取当前播放歌曲的开始和结束时间

时间:2012-04-06 23:10:54

标签: shoutcast internet-radio

我正在尝试在android中实现一个无线电流切换器。按照理想的顺序,我想做的是:

  1. 开始播放广播电台
  2. 从该电台获取当前播放歌曲的结束时间
  3. 在结束时间 - 三角洲,我想要扫描一个电台列表,我想找回一个在区间[endTime,endTime + Delta']
  4. 开始播放新歌的电台列表
  5. 从[3]中的结果集切换到流,然后重复
  6. 所以,我可以流一个广播电台(没问题)。我可以在歌曲更改时收到通知(使用streamscraper获取元数据并在元数据更改时生成通知)。但是,我无法找到的是,是否可以执行以下操作:

    1. 获取当前播放歌曲的结束时间
    2. 扫描一个电台列表,并获取大约在同一时间开始播放的歌曲(因此获取歌曲的开始时间)或可能即将开始的歌曲(如果这些流中的当前歌曲的结束时间接近或者我实际上可以获得流程序提前)。
    3. 如果有人能告诉我这是否可行,我将不得不承担责任。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

我能够做类似于SHOUTcast所指的内容。我不确定Icecast的日志文件是如何格式化的,但是我能够使用PHP基本上查看“Song Change”事件的日志。

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

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

答案 2 :(得分:-1)

流包含无缝的mp3流 这就是一个流做什么...它将单独的mp3分成一个大流。

但是,如果您能找到结束并从它们开始,则会跟踪流中的ID标签...而不是shure 或者如果它们恰好在轨道开始或其他固定位置开始。

大部分电台都没有提前发送有关下一首曲目的信息 只是因为他们不知道,大多数使用服务器必须决定的auto-dj播放列表 在新旧赛道之间的小小突破中,新的赛道将会是什么 即:当旧赛道正在比赛时,它不会决定这一点。

有些电台会向下一首曲目发送信息(PHP到他们的网页) 但是大部分都没有......如果他们这样做,那么信息就不会在流本身中出现。

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

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

当前歌曲结束时,您的(未延迟)申请会(希望)注意到 因为一个新的ID2 / 3标签已经开始...当他的当前但延迟的歌曲结束时,它会将你的听众切换到一个新流。

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

您需要研究Shoutcast和ID标签协议。 额外的静音检测也可能有所帮助(不是万无一失)。

可能并不总是有效..有些电台不发送ID标签 其他人交叉淡出他们的轨道(没有沉默)......完全是为了避免这些伎俩。

或类似的东西......祝你好运我无法编码任何东西......只是理论 我怀疑一些shoutcast rippers使用这个技巧...我想他们使用这个 为某些预设的艺术家 - 轨道扫描多个流(并行)。 也许你可以通过对这些裂土器进行逆向工程来获得一些想法。 因为我自己有一个收音机,所以我不喜欢这些技巧,因为他们偷了我 虽然我为这些权利付出了代价......但是许多裂土器会杀死在线广播。

最后,我认为你的想法(如果我理解其目的很好)无论如何都是有用的 每隔一条轨道从一个流转换到另一个流,看起来不像是一种愉快的体验 好的无线电台将有一个精心制作(订购)的播放列表 如果你搞砸了,你的听众会在很短的时间内获得很多情绪/风格变化。

唯一有用的目的可能是建立一个自动开膛手 这可以分散预设的轨道/艺术家从众多观察到的流中分散注意力 在播放想要的曲目时录制它们......对于许多在线电台而言,这些裂土器已经成为一个大问题,其中10个以上的裂土器和在线电台已经死了......结果质量好,独立音乐不再可用......我们只会被Youtube和其他人困住 金钱肆虐的企业集团......我不期待那个....好奇,如果你有另一个有用的 目的