【发布时间】:2018-10-12 10:44:53
【问题描述】:
我们正在Android手机上录制一些音频,根据vlc信息具有以下格式:
Codec: MPEG AAC Audio (mp4a)
Language: English
Type: Audio
Channels: Stereo
Sample rate: 32000 Hz
Bits per sample: 32
上述文件在 mime 类型为audio/mpeg 的 safari 浏览器上无法播放,但是一旦我们将 mime 更改为 audio/mp4,它就开始在 safari 浏览器上播放。
对于 Android,我们使用 API 使用 api 资源流式传输此文件,如下所示:
@GET
@UnitOfWork
@Produces("audio/mpeg")
@Path("/getaudiofile/{fileId}")
public Response getPart(@Auth AuthUser authUser, @PathParam("fileId") Long fileId) {
File audioFile = new File(filesTableDAO.getFilePathById(fileId));
if(audioFile.exists()) {
return Response.ok().entity(audioFile).build();
} else {
// ... Return 404 here
}
}
但是使用上面的 API,有些文件可以播放而有些则不能播放,类似于之前的 Safari 案例。但是 safari 问题很快就消失了,我们将 mime 更改为 "audio/mp4" 或 "video/mp4" 两种 mime 类型都可以工作。
但对于 API /getaudiofile/{fileId},以下 MIME 类型均不适用于 javax.ws.rs @Produces 注释:
audio/mp4
video/mp4
audio/mpeg
audio/m4a
audio/mpeg-4
audio/mp4a
但是使用audio/mpeg,有些文件可以播放,但有些则不能。
什么可能是正确的 mime 类型,或者在从 API 返回时可以文件设置编解码器或 mime 信息本身吗?
或者有什么方法可以让Android Media Player MIME 类型感知?喜欢 html tag。
我们已经流式传输了 mime“音频/mpeg”的文件内容,媒体播放器可以轻松播放较小的文件。但是更大的流媒体内容无法播放,例如10 - 20 MB。
播放器的流 URL 问题没有得到任何 mime 扩展,例如mp3 或 mp4。因此,我们希望媒体播放器提前知道正在流式传输的内容类型。
MediaPlayer API 是否支持在播放前将 mime 类型设置为播放器实例?
更新
1] 大尺寸文件会出现这种情况,小文件播放效果很好,播放几秒钟(1-50 秒)的录音没有问题,播放长度超过一分钟的录音文件无法播放。
2] 从经过身份验证的 URL 播放时,如果同一文件在本地文件系统上播放失败。
【问题讨论】:
标签: java android rest audio mpeg-4