testHttpPlayMp3.lua 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. --- 模块功能:音频功能测试.
  2. -- @author openLuat
  3. -- @module audio.testAudio
  4. -- @license MIT
  5. -- @copyright openLuat
  6. -- @release 2018.03.19
  7. module(...,package.seeall)
  8. --require"record"
  9. require"audio"
  10. require"common"
  11. require"http"
  12. local tBuffer = {}
  13. local tStreamType = audiocore.MP3
  14. --每次通过http下载的数据长度
  15. local PRODUCE_STEP_LEN = 200*1024
  16. --触发http再次下载的本地播放剩余数据长度
  17. local CONSUME_THRESHOLD_LEN = 100*1024
  18. --本地播放剩余的数据总长度
  19. local remainDataLen = 0
  20. local function consumer()
  21. sys.taskInit(function()
  22. audio.setVolume(4)
  23. while true do
  24. while #tBuffer==0 do
  25. sys.waitUntil("DATA_STREAM_IND")
  26. end
  27. local data = table.remove(tBuffer,1)
  28. remainDataLen = remainDataLen-data:len()
  29. if remainDataLen<=CONSUME_THRESHOLD_LEN then sys.publish("HTTP_DOWNLOAD_REQUEST") end
  30. --log.info("testAudioStream.consumer remove",data:len())
  31. local procLen = audiocore.streamplay(tStreamType,data)
  32. if procLen<data:len() then
  33. --log.warn("produce fast")
  34. table.insert(tBuffer,1,data:sub(procLen+1,-1))
  35. remainDataLen = remainDataLen+data:len()-procLen
  36. --sys.wait(20)
  37. end
  38. end
  39. end)
  40. end
  41. local function httpDownloadCbFnc(result,statusCode,head)
  42. log.info("update.httpDownloadCbFnc",result,statusCode,head,sCbFnc,sPeriod)
  43. sys.publish("UPDATE_DOWNLOAD",result,statusCode,head)
  44. end
  45. local function processData(stepData,totalLen,statusCode)
  46. if stepData:len()>0 then
  47. sProcessedLen = sProcessedLen+stepData:len()
  48. remainDataLen = remainDataLen+stepData:len()
  49. table.insert(tBuffer,stepData)
  50. if #tBuffer==1 then sys.publish("DATA_STREAM_IND") end
  51. if sProcessedLen>=totalLen then
  52. sProcessedLen = -1
  53. end
  54. end
  55. end
  56. sys.taskInit(function()
  57. while not socket.isReady() do sys.waitUntil("IP_READY_IND") end
  58. sProcessedLen = 0
  59. while true do
  60. http.request("GET",
  61. "http://openluat-luatcommunity.oss-cn-hangzhou.aliyuncs.com/attachment/20201215162756457_1601182321002.mp3",
  62. nil,
  63. {["Range"]="bytes="..sProcessedLen.."-"..(sProcessedLen+PRODUCE_STEP_LEN-1)},
  64. nil,
  65. 60000,
  66. httpDownloadCbFnc,
  67. processData)
  68. sys.waitUntil("UPDATE_DOWNLOAD")
  69. if sProcessedLen==-1 then
  70. return
  71. end
  72. if remainDataLen<=CONSUME_THRESHOLD_LEN then
  73. sys.wait(200)
  74. else
  75. sys.waitUntil("HTTP_DOWNLOAD_REQUEST")
  76. end
  77. end
  78. end)
  79. consumer()
  80. --sys.timerLoopStart(print,1000,"test")