如何流式传输Rhapsody RAD / EA音乐文件?

时间:2012-09-10 15:43:54

标签: mp3 audio-streaming aac rhapsody

我正在编写一个与Rhapsody music service SDK互动的iOS应用。我陷入了需要组合音乐文件的RAD和EA部分的地步。根据他们的文档:

  

返回曲目播放信息后,您现在可以   开始检索Rhapsody音频数据。首先,加载媒体URL   属性从getTrackPlaybackInfos方法返回到你的   客户。大多数允许流式传输的Rhapsody格式都需要   Rhapsody使用的安全方法称为RAD / EA。 RAD / EA安全性   model允许通过HTTP直接下载大部分内容   轨道(称为音频的RAD部分)。然后是客户   下载文件的一小部分加密部分(称为EA)   文件的一部分)每隔30秒构成整个音乐   文件。

     

如果媒体网址包含RAD,请调用getEA方法获取   基本音频(EA)。使用会话标识符,RAD版本(3,   除非您的Rhapsody Direct代表另有说明,格式,   和比特率从cal返回到getTrackPlaybackInfos。你必须   多次调用getEA方法来播放整个音频   跟踪。 position参数包含EA块中的偏移量   哪个开始检索音频数据,以及计数参数   包含要返回的实际字节数。例如,开启   第一次调用getEA时,你会将position参数设置为0和   可以将count参数设置为4096.这将返回4096个字节   音频数据从音轨的开头开始。在第二个cal   要获得EA,您可以将position参数设置为4096和   count参数为4096.在第三次调用时,position参数   将是8192和计数参数4096.继续调用getEA   直到整个曲目播放的方法。

我可以轻松找到RAD文件。但我不清楚的是我如何将RAD和EA文件重新组合成可流媒体/可播放的媒体文件?我认为这是谷歌第一次让我失望。我甚至无法找到关于如何继续的提示。

1 个答案:

答案 0 :(得分:0)

  1. 关于RAD / EA:在Rhapsody网站上有一些示例如何从输入的RAD和EA文件中获取可播放的音乐文件(Java和C ++中的示例)

  2. RAD文件我们可以直接下载

  3. EA文件问题 - 如何创建?在文档中写道,我们需要每30秒调用一次getEA方法,但接下来的问题出现在这里:

    • 如何根据从WS getEA方法字节收到的EA文件创建一个EA文件(据我所知,应该有一个带有特殊文件头的特殊结构)?
    • 如果我们需要每隔30秒调用一次getEA方法来解码RAD文件,如何处理离线模式?
  4. 如果你有什么需要补充 - 请随意... 我会很高兴任何新的信息。

    <强>解决方案:

    1. 下载RAD文件。

    2. 调用getEA - 我们在这里得到一些ASCII码的数组。请参阅此处如何在Java中的bytes数组中转换它:ASCII codes => string of characters

    3.         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();
      
    4. 对我而言,它有效。