如何播放SoundCloud RTMP流

How to play SoundCloud RTMP stream?

本文关键字:SoundCloud RTMP 播放 何播放      更新时间:2023-09-26

我使用SoundCloud公共API在带有JavaScript SDK 3.0.0的SC服务器的浏览器中播放音频。初始化后,我设法用SC.stream方法获得了一个带有特定音轨的流URL的JSON。

{  
   "http_mp3_128_url":"https://cf-media.sndcdn.com/a6QC6Zg3YpKz.128.mp3...” ,
   "hls_mp3_128_url":"htt...//ec-hls-media.soundcloud.com/playlist/a6QC6Zg3YpKz.128.mp3/...” ,
   "rtmp_mp3_128_url":"rtmp://ec-rtmp-media.soundcloud.com/mp3:a6QC6Zg3YpKz.128?...",
   "preview_mp3_128_url":"htt....../ec-preview-media.sndcdn.com/preview/0/90/a6QC6Zg3YpKz.128.mp3?..."
}

其中有一个HTTP、一个HLS和一个RTMP URL。我可以处理HTTP,但无法使RTMP正常工作。有人知道是如何决定播放哪个流的吗?我该如何操作?或者我如何访问RTMP流?

几周前,我向WireShark查询了SoundCloud通过RTMP提供的流,但现在我似乎无法捕获任何RTMP流,我也不知道如何搜索。

通常RTMP流用于Flash Media Server、Wowza Media Server和Red5服务器。您可以使用网页中的flash对象播放这种类型的流,如下所示:在此处输入链接描述

或者对于应用程序-您可以使用ffplay播放,并使用ffmpeg

转换为其他类型的流

我一直在做同样的事情。它在开发模式下使用HTTP协议,然后恢复到在正常浏览模式下尝试使用RTMP协议(至少在chrome中是这样)。以下是我解决问题的方法。。当您使用sc.stream请求时,它将返回要播放的对象。您可以在将此对象发送给玩家之前对其进行编辑。例如:

SC.stream('/tracks/'+playr.currentTrack.id).then(function (x) {
x.options.protocols=["http"];
x.play();}

如上所述设置协议对象参数会强制它使用正确的协议,如果你通过尝试在非开发模式下播放曲目来首先登录控制台,你会看到它也包含["rtmp"]协议,然后无法在chrome中播放。