我正在写一个iOS应用程序,与Rhapsody music service SDK交互。我被困在那里我需要将音乐文件的RAD和EA部分结合点。根据他们的文档:
该轨迹回放信息已返回后,您现在就可以开始检索狂想曲音频数据。首先,加载从getTrackPlaybackInfos方法到您的客户端返回的媒体URL属性。大多数的允许流狂想曲格式需要通过狂想曲使用的安全方法称为RAD / EA。的RAD / EA安全模型允许通过广大的轨道(也称为音频的RAD部分)的HTTP立即下载。然后,客户端下载文件的一小加密部分(被称为文件的EA部分),每30秒,以构成完整的音乐文件。
如果媒体URL包含RAD,调用getEA方法来获取必要的音频(EA)。使用会话标识符,RAD版本(3,除非你直接狂想曲代表另有告知)从卡到getTrackPlaybackInfos返回,格式和比特率。你必须多次调用该方法getEA回放整个音频轨道。位置参数包含在EA块偏移量,开始检索的音频数据,以及计数参数包含要返回的实际字节数。例如,在第一次调用getEA,您将设置位置参数为0,并可以设置计数参数为4096这将返回4096个字节开始在赛道上的开始音频数据。在第二CAL获得EA,那么您需要设置位置参数为4096和计数参数为4096的第三个电话,位置参数将是8192和计数参数4096继续调用getEA方法,直到整个轨道玩了。
我能找到的RAD文件很容易。但是,我不是我就是再结合RAD和EA文件转换成一个流式传输/播放媒体文件清楚了吗?我想这是第1次谷歌已经让我失望。我甚至不能找到一个关于如何进行提示。
如果你有什么要补充的 - 请随时...我会很高兴的任何新信息。
解:
RadStream rs = new RadStream(getRadSource());
Log.e(TAG, "" + rs.getHeader());
EaStream es = new EaStream(getEaSource());
Log.e(TAG, "" + es.getHeader());
RadEaStream radea = new RadEaStream(rs, es);
int counter = 0;
FileOutputStream out = new FileOutputStream(fileWMA);
for (int c = radea.read(); c >= 0; c = radea.read()) {
out.write(c);
counter += 1;
}
out.close();
对我来说,它的工作原理。