【问题标题】:SoundCloud API iOS, no sharing - only listeningSoundCloud API iOS,不共享 - 只听
【发布时间】:2023-04-04 11:40:01
【问题描述】:

我有一个网站,可以在其中使用 SoundCloud 制作播放列表。现在我想为 iPhone 做一个应用程序,这样用户也可以在那里听歌。

http://developers.soundcloud.com/docs/api/ios-quickstart 在链接中的示例中,用户必须登录才能收听和分享,但我希望我的用户只收听。有没有办法让他们不必登录?

【问题讨论】:

  • 我也在努力解决这个问题。如果我找到任何东西,我一定会回来的。

标签: objective-c ios xcode soundcloud


【解决方案1】:

创建一个以 JSON 格式输出播放列表的页面,然后在 xcode 中创建一个类,为曲目词典下载 JSON 并使用 AVPlayer(或 AVQueuePlayer,如果您正在播放整个列表)播放下载的内容。

这是一些抽象代码:

playlistDownloader.m
- (void)downloadPlaylist{
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_sync(concurrentQueue, ^{
    NSURL *url = [NSURL URLWithString:@"http://www.yourwebsite.com/playlist.json?id=1"];
    NSData *data = [NSData dataWithContentsOfURL:url];
    NSError *error;

    id trackData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];

    if (!error) {
        tempTrackArray = trackData;
    } else {
        NSLog(@"Playlist wasn't able to download");
    }
});
}

tempTrackArray 将是类中声明的属性。

然后在你的播放器中,你会做这样的事情:

audioPlayer.m
- (void)instanciateAudioPlayer
{
NSDictionary *trackDictionary = [playListDownloader.tempTrackArray objectAtIndex:0];
NSString *urlString = [trackDictionary objectForKey:@"stream_url"];

AVAsset *asset = [AVAsset assetWithURL:streamURL];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];

[avPlayer initWithPlayerItem:playerItem];
}

这是一些非常粗略的代码,但它是您正在尝试做的事情的一般要点。应该让你朝着正确的方向前进。

【讨论】:

  • 你不能使用没有认证头的stream_url。
【解决方案2】:

尝试 soundcloud 快速入门后,我意识到您的流 url 需要以 https 而不是 http 开头。您还需要将您的客户端 ID 从您的声音云应用程序添加到流 url:

NSDictionary *trackDictionary = [playListDownloader.tempTrackArray objectAtIndex:0];

NSString *streamURL = [trackDictionary objectForKey:@"stream_url"]; 
streamURL = [streamURL stringByReplacingOccurrencesOfString:@"http" withString:@"https"];

NSString *urlString = [NSString stringWithFormat:@"%@?client_id=%@", streamURL, @"a8e117d3fa2121067e0b29105b0543ef"];

从那里您只需设置 AVPlayer:

self._avPlayer = [AVPlayer playerWithURL:[NSURL URLWithString:urlString]];
[self setupLayer:clayer];
[self._avPlayer play];

一切都应该正常。希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多