• 欢迎大家分享资料!前往留言板评论即可!

流媒体文档说明

合宙 模组资料网 2年前 (2021-05-15) 285次浏览 0个评论 扫描二维码
文章目录[隐藏]

接口介绍

流录音接口

record.start

介绍流录音接口参数

  • 语法

    record.start(seconds, cbFnc, type, quality, format, streamRptLen)

  • 参数

    参数 类型 取值释义
    seconds number seconds,录音时长,单位:秒
    流录音模式下,如果想长时间录音,可以将此参数设置为0x7FFFFFFF,相当于录音2147483647秒=24855天
    cbFnc function type参数为”STREAM”时,回调函数的调用形式为:
    cbFnc(result,size,tag)
    result:录音结果,true表示成功,false或者nil表示失败
    size:number类型,每次上报的录音数据流的大小,单位是字节,在result为true时才有意义
    tag:string类型,”STREAM”表示录音数据流通知,”END”表示录音结束
    type string type,录音模式
    “STREAM”表示流录音模式,录音数据保存在内存中,每隔一段时间执行一次cbFnc函数去读取录音数据流,录音结束后再执行一次cbFnc函数
    quality number 可选参数,默认为1,quality,录音质量,0:一般质量 1:中等质量 2:高质量 3:无损质量
    format number 可选参数,默认为3,format,录音格式,1:pcm 2:wav 3:amrnb 4:speex
    pcm格式:录音质量参数无效,采样率:8000,单声道,采样精度:16 bit,5秒钟录音80KB左右
    wav格式:录音质量参数无效,比特率:128kbps,5秒钟录音80KB左右
    amrnb格式:录音质量参数有效
    录音质量为0时:比特率:5.15kbps,5秒钟录音3KB多
    录音质量为1时:比特率:6.70kbps,5秒钟录音4KB多
    录音质量为2时:比特率:7.95kbps,5秒钟录音4KB多
    录音质量为3时:比特率:12.2kbps,5秒钟录音7KB多
    speex格式:录音质量参数无效,pcm格式128kbps后的压缩格式,5秒钟6KB左右
    streamRptLen number 可选参数,默认为nil,streamRptLen,流录音时,每次上报的字节阀值
  • 返回值

  • 例子

    -- 流录音模式,录音5秒,一般质量,amrnb格式,每隔一段时间执行一次cbFnc函数,录音结束后再执行一次cbFnc函数:  
    record.start(5,cbFnc,"STREAM")  
    -- 流录音模式,录音5秒,一般质量,amrnb格式,每产生500字节的录音数据执行一次cbFnc函数,录音结束后再执行一次cbFnc函数:  
    record.start(5,cbFnc,"STREAM",nil,nil,500)  
    

流播放接口

audiocore.streamplay

流式播放音频数据,音频数据格式支持:mp3、wav、amr、pcm、spx

  • 语法

    audiocore.streamplay(audioFormat,audioData)

  • 参数

    参数 类型 取值释义
    audioFormat number 音频数据格式;支持audiocore.MP3、audiocore.WAV、audiocore.AMR、audiocore.PCM、audiocore.SPX
    audioData string 音频数据
  • 返回值
    参数 类型 取值释义
    acceptedAudioDataLen number 接收的音频数据长度
  • 例子

    “`
    local tBuffer = {}
    local tStreamType
    local function consumer()
    sys.taskInit(function()
    audio.setVolume(7)
    while true do
    while #tBuffer==0 do
    sys.waitUntil("DATA_STREAM_IND")
    end
    local data = table.remove(tBuffer,1)
    –log.info("testAudioStream.consumer remove",data:len())
    local procLen = audiocore.streamplay(tStreamType,data)
    if procLen<data:len() then
    –log.warn("produce fast")
    table.insert(tBuffer,1,data:sub(procLen+1,-1))
    sys.wait(5)
    end
    end
    end)
    end

    local function producer(streamType)
    sys.taskInit(function()
    while true do
    tStreamType = streamType
    local tAudioFile =
    {
    [audiocore.AMR] = "tip.amr",
    [audiocore.SPX] = "record.spx",
    [audiocore.PCM] = "alarm_door.pcm",
    }
    local fileHandle = io.open("/lua/"..tAudioFile[streamType],"rb")
    if not fileHandle then
    log.error("testAudioStream.producer open file error")
    return
    end
    while true do
    local data = fileHandle:read(streamType<span class="text-highlighted-inline" style="background-color: #fffd38;">audiocore.SPX and 1200 or 1024)
    if not data then
    fileHandle:close()
    return
    end
    table.insert(tBuffer,data)
    if #tBuffer</span>1 then
    sys.publish("DATA_STREAM_IND")
    end
    –log.info("testAudioStream.producer",data:len())
    sys.wait(10)

    <pre><code> end
    end
    end)
    </code></pre>

    end

    sys.timerStart(function()
    –producer(audiocore.AMR)
    –producer(audiocore.SPX)
    producer(audiocore.PCM)
    consumer()
    end,3000)</p></li>
    </ul>

    <h2>
    “`

    异常处理

    流播放填充数据填充问题

    流播放音频数据时,在core中有一个4K字节的缓冲区,用来存放音频数据,调用audiocore.streamplay接口时,音频数据被填充到这个缓冲区内,被填充的最大长度为缓冲区的剩余字节数;
    例如:缓冲区还剩1000字节可以填充,如果此时调用audiocore.streamplay填充3000字节数据,则实际只能将这3000字节数据的前1000字节填充到缓冲区,返回值acceptedAudioDataLen的值为1000,表示填充的字节数,剩余的2000字节被丢弃


    转载请注明原文链接:流媒体文档说明
    喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址