Egret社区

关于MP3播放的问题搜集贴

2014-11-25 01:02
793517
1银子
本帖最后由 月之轮回2009 于 2014-11-27 02:02 编辑

看到有同学说不能同时播放两个或多个MP3,刚才做了个页面试了试在微信webview里是可以播放的啊,所以特开此贴搜集关于同时播放多个MP3的问题。

测试链接:http://roryluo.info/h5/multi-audio-test.html

设计了两个测试用例:
【用例1】
1、点击“播放 sound1”按钮等待背景音乐播放;
2、背景音乐开始播放之后点“播放 sound2”(可点击多次);
3、此时应该听到背景音乐跟人声音效同时播放;
【用例2】
1、点击“播放 sound1 + sound2”按钮等待背景音乐跟音效播放,此时应该听到背景音乐跟人声音效同时播放;(备注:由于我服务器在墙外,声音加载不了先多试几次哈!)

如果有同学跑不通以上两个用例中的任意一个,请在跟帖把运行环境贴出来,格式类似这样:
未通过的用例:1,2
机型:华为荣耀 6
系统:安卓4.4.2
浏览器:安卓微信6.0
(以上环境经测试是可以同时播放两个sound的)


=======================我是分割线===========================
其他的一些想法,跟大家探讨一下:
1、一般客户端webview内的媒体播放是需要响应真实用户操作才行,例如:click、touch事件,所以音乐播放必须放在用户点击操作的回调内
2、不能直接隐藏媒体标签,否则可能造成媒体无法通过js操作播放,不过可以通过遮挡等方式绕过webview限制;
3、提供一种思路:
     a、在游戏首页,当用户第一次点击屏幕时即可以此事件作为契机播放背景音乐;
     b、游戏中不少音效都是需要用户操作之后才会触发,例如点击按钮令飞机发射子弹点击菜单等等,那么可以利用这个契机播放音效;
     c、如果需要播放音效时又取不到用户操作事件,那么可以做一个或多个由很多音效拼接起来的MP3,并且在MP3前留一段空白,在游戏开始就触发这个sound的play,然后立刻pause,再制作一个json文件标识哪些时间段有哪些音效,这个已经播放起来的MP3是可以通过js随意控制播放跟暂停以及从何处开始播放的;demo的链接:http://roryluo.info/h5/audio-with-config.html soundconfig.png
    d、为了不让声音播放出现延迟或者失效,需要将audio数据全部load下来才行,但是注意:audio的preload在移动端webview里实际上不能预加载(PC端可以),也需要用户触发play才开始加载数据,跟上面一样借用某个用户操作来调audio.play()然后监听其网络以及meta信息判断数据加载情况,同时监听到audio开始播放时就把它pause起来备用;
     e、注意,如何让audio一直处于你javascript的逻辑控制之下?最重要的一点就是千万不让让audio自然结束,也就是在audio播完前一定要pause住,否则等他播完了你再想用js让其play就得等下次的用户操作了。

    QQ截图20141126095859.png

=======================我是分割线===========================
两个测试页面的截图:

audiotest.jpg

PS:以上使用的是HTML5原生的audio标签作为测试,如果以上测试能通过,引擎肯定没问题的。
=======================我是分割线===========================

结论:audio需要一个用户操作引起的Event来触发play,只要audio没有自然播放结束,在此期间都可以由javascript随意控制播放、暂停、播放位置等等。

=======================我是分割线===========================
想法3.C 的DEMO补充测试:详情见7楼


最佳答案

查看完整内容

感谢这么精彩的帖子,引擎团队会考虑其中的功能,看看有没有跟egret core整合的可能
分享到 :
12 人收藏

17 个回复

倒序浏览
7yue  官方团队 | 2014-11-25 01:02:18
感谢这么精彩的帖子,引擎团队会考虑其中的功能,看看有没有跟egret core整合的可能
xsstomy  斑竹 | 2014-11-25 08:58:43
本帖最后由 xsstomy 于 2014-11-25 11:13 编辑

顶顶,思路很好额魅族3试了没有问题,看来官方可以跟进一下,@7yue
张宇  官方团队 | 2014-11-25 09:54:41
本帖最后由 张宇 于 2014-11-25 09:59 编辑

iphone5播放没问题,晚上回家试试安卓手机
jimchen  登堂入室 | 2014-11-25 14:02:30
HUAWEI MT2-L01
4.4.2
都正常
change  斑竹 | 2014-11-25 19:46:41
发贴不易,特来顶贴!感谢分享!
月之轮回2009  登堂入室 | 2014-11-26 09:34:42
本帖最后由 月之轮回2009 于 2014-11-27 09:34 编辑

我在1楼提到的思路3.C的测试方法(因为直接点击按钮不够严谨,就补充了以下测试用例)

1、分别打开调试页面跟被调试页面:
在PC端打开调试页面: http://roryluo.info:60000/client/#yuezhilunhui2009
在移动端打开被调试页面: http://roryluo.info/h5/audio-with-config.html
2、在PC端控制台输入命令控制移动端页面行为:
     a、在pc浏览器上看到Targets(图中1处)为绿色时点击(图中2处)控制台;
QQ截图20141127003755.png

     b、在移动端页面上点击“加载Sound”按钮;
     c、等待按钮显示“音效已加载”;
     d、回到PC控制台输入以下方法:   
                /**
                * 播放audio
                * @param  {Number} i              第i段音效
                * @param  {Number} interval    循环播放音效时的播放间隔,单位ms
                * @param  {Number} loop        循环次数,为非正数时无限循环
                * @return {Null}
                */
                function playSound(i, interval, loop)
QQ截图20141127015900.png

     e、此时移动设备应有对应sound片段播放循环播放时务必让屏幕保持发光状态,屏幕背光灭了之后影响js定时器的逻辑


stevenisgreat  登堂入室 | 2014-11-26 23:36:09
红米Note
MIUI6(android 4.4.2)
正常
stevenisgreat  登堂入室 | 2014-11-26 23:47:04
stevenisgreat 发表于 2014-11-26 23:36
红米Note
MIUI6(android 4.4.2)
正常

手机自带浏览器+微信6.0
stevenisgreat  登堂入室 | 2014-11-26 23:54:03
什么时候可以把源码放出来
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

月之轮回2009

登堂入室

积分: 47 帖子: 48 精华: 1

楼主热帖

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部