关于[Audio]不能正常播放(解码)的问题

  • Creator 版本:2.1.0/2.0.5

  • 目标平台: Android

  • 详细报错信息,包含调用堆栈:decode error - res/import/a0/a097820d-2635-45bb-999c-3989e0ef6819.mp3

  • 重现方式:必现

  • 之前哪个版本是正常的 :之前使用过creator1.8.0,没遇到过类似问题.

  • 手机型号 :Vivo

  • 手机浏览器 :自带浏览器

==============================================================

==============================================================

在部分机型上面,目前发现是Vivo,出现不能正常解码音频的问题…
decode error - res/import/a0/a097820d-2635-45bb-999c-3989e0ef6819.mp3

尝试过2.0.5/2.1.0版本,都有这个问题.之前1.8.0并没有发现此问题.
顺带一提,1.8.0LoadRes拿到的音频是一个string类型.更新2.0+以后拿到的是cc_AudioClip…不确定是否有关.

补充 :
只有在系统自带的默认浏览器出现这个问题…如果手机下载QQ浏览器,可以正常运行…

目前不确定是mp3的文件格式有问题,还是部分手机对mp3不是很友好.

一样遇到了这个问题,也是在vivo自带浏览器上出现音频解码错误。。。。。

顺便Po下我的解决方案吧 :
(题外话)
因为我没用cocos的自动加载功能,也就是我的场景一直是空场景,没任何依赖.
然后我自己通过cc.Loader.LoadRes接口,实现了一套自己的资源管理.

(正文)
我尝试过几种方式,发现去掉我自己的加载机制,一样是报错.空场景单挂载一个audio播放,还是报错…wtf???
那就实在是没办法啦???

幸好我有自己的加载机制,播放音效我不是从cc拿的,是从自己的加载机制里面取出对应资源(包括预制体,图集,图片,配置文件等等)…所以只要取到是空,就干脆不播放音效.
(噗嗤…没音效总比影响游戏流程好…毕竟只有部分机型的原生浏览器有问题,换个浏览器就可以正常使用)

但是听说有人是没做任何处理的,默认遇到有问题的地方就不播放音效…虽然我不清楚他们具体怎么实现…

最后…感觉真的是自己做个管理机制是挺有好处的,空场景不用cc的预加载,直接进入自身机制,整个流程都牢牢把控在自己手里.

哈喽…因为我自己很早就做了一套资源加载机制,所以我把音效都剥离到一个文件夹里,不影响我的其他资源和流程.
然后有问题的机型都是可以正常游戏,只是没有音效.

之前遇到过一次这样的问题不过是在 ios 上, vivo 还是少见,遇到这种问题,一般是因为你选择的音频无法通过浏览器解码,我之前的解决方案是手动的将资源解码,使用工具是 Audacity
你可以上网找一下教程试一下:slightly_smiling:

1赞

好的.谢谢大佬

这个问题我1.10.1同样遇到, 就是Vivo自带的浏览器会出现decode error.
不管是自己透过cc.Loader.LoadRes加载或是挂在场景物件上面都一样, 载入之后解码错误.
只要加载mp3并解码就会出错.

手动将资源解码是什么意思不懂? 所以是放弃使用mp3? 还是如果是Vivo的浏览器就改用wav?
感觉上都不是太好的解决方式.

目前查过的有人说是128k流量以下(例如64k)就不会有问题, 等会试试.

我用Vivo的浏览器开启这个页面测试, mp3是有声音能播放的,它的mp3是可以下载下来的.
http://hpr.dogphilosophy.net/test/
证明Vivo的浏览器能够解码mp3.

但是下载下来在Cocos Creator(1.10.1)里用cc.Loader.LoadRes加载就会decode error.

补充一下, 把mp3音档从webaudio改成dom, 加载不会有错误, 但播放会错误.

mp3 在浏览器传输下载的时候解码是 mp3 格式本身做了加密格式的处理,浏览器本身应该是有自己的解码器的,解码失败很有可能是 mp3 文件当前的加密格式浏览器无法正常解码,所以你手动的解码 mp3 是让你将自己的资源去除加密格式或者替换为可解码格式,同样是 mp3 格式,mp3 格式是指音频文件的编码格式而不是加密内容。(我对音频这个也不是很专业,大概的内容你可以上网查一下):slightly_smiling:

顺便那个报错信息你可以提供一下嘛,我看下是什么原因。

@crazypad 我也遇到了这个问题,在vivo浏览器里面报decode error,试过在Audacity重新转换成mp3也无法播放,转换成ogg才能播放,不知道是操作出了什么问题,求助大佬

目前的推论是, vivo浏览器是拿开源的chromium来改的, 而mp3格式有些专利问题, 所以Chrome能解码的, chromium解不了. 在mp3的专利失效了之后, chromium就有mp3解码能力了,不过这个也得要vivo更新才行.

Chromium to Get MP3 Support After MP3 Becomes Patent-Free

看起来唯一的解法是转换两套版本的音乐音效, 放在resources里, 用cc.loader.loadRes()载入, 遇到vivo就用ogg版本, 其它就用mp3版本.