【问题标题】:Streaming media length流媒体长度
【发布时间】:2012-04-12 11:33:30
【问题描述】:

我想从 url 播放媒体文件 (mp3)。而且我想得到那个mp3文件的长度。 我成功播放文件,但我也想显示 SeekBar。为此,我需要知道媒体文件的长度(以秒为单位)。

我怎样才能做到这一点?

我找到了一种方法,但使用它我认为它不会在几秒钟内给我长度。

 URLConnection cn = new URL(mediaUrl).openConnection();
 cn.connect();
 int length =  cn.getContentLength();

我认为它返回字节。那么我可以将其转换为秒吗? 或者有谁知道其他方式?

【问题讨论】:

  • 尝试与here相同的方式,它是为视频完成的。
  • @LalitPoptani 感谢您的回复,但我认为视频不是从 url 播放的。所以当我尝试 getDuration() 方法时,它给了我缓冲的持续时间,但是当它缓冲满时,它的值发生了变化。比如第一个 400,567,1234,最后是 4000。所以我的 Seekbar 是波动的......希望你能理解。

标签: android media-player android-mediaplayer live-streaming


【解决方案1】:

查看 getHeaderFields() 方法,然后检查是否有包含长度的响应头。如果没有,您可以获取内容,从流中读取 mp3 元数据并计算 kbps。一旦你有了它,你就可以使用以字节为单位的长度来获取时间长度。

【讨论】:

    【解决方案2】:

    您发布的代码是从 URL 中提取任何数据所需的代码。

    实际上,您可能正在从 url 中提取 MP3 文件,但您调用的 getContentLength() 正在作用于 URLConnection 对象 - 它返回的是文件的 大小您正在下载(字节、千字节、兆字节)。

    如果您想检查 MP3 的播放时间,您必须将数据压缩到一个有效的媒体对象中,然后该对象应该有自己的访问器,例如 getDuration()

    【讨论】:

      【解决方案3】:

      媒体流式传输开始后,您可以使用mediaplayer.getDuration 获取媒体文件的总时长。然后可以在 runnable 中使用此值来定期更新您的搜索栏。

      【讨论】:

      • mediaplayer.getDuration 返回我只缓冲了多少而不是总持续时间...... :(
      猜你喜欢
      • 2014-04-12
      • 1970-01-01
      • 2012-06-16
      • 2010-12-28
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      相关资源
      最近更新 更多