我正在尝试在android中实现一个无线电流切换器。按照理想的顺序,我想做的是:
所以,我可以流一个广播电台(没问题)。我可以在歌曲更改时收到通知(使用streamscraper获取元数据并在元数据更改时生成通知)。但是,我无法找到的是,是否可以执行以下操作:
如果有人能告诉我这是否可行,我将不得不承担责任。
答案 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和其他人困住 金钱肆虐的企业集团......我不期待那个....好奇,如果你有另一个有用的 目的