国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【FreeSwitch開發(fā)實(shí)踐】media bug獲取通話語(yǔ)音流

這篇具有很好參考價(jià)值的文章主要介紹了【FreeSwitch開發(fā)實(shí)踐】media bug獲取通話語(yǔ)音流。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?? 博客主頁(yè):小小馬車夫的主頁(yè)
?? 所屬專欄:FreeSwitch開發(fā)實(shí)踐
?? 專欄介紹:主要介紹博主在實(shí)際項(xiàng)目中使用FreeSwitch開發(fā)外呼類項(xiàng)目的一些經(jīng)驗(yàn)心得,主要涉及FreeSwitch的基本安裝編譯、基本配置、ESL、WSS、錄音、自定義模塊、media bug、語(yǔ)音播放、MRCP及對(duì)接AI機(jī)器人等內(nèi)容。內(nèi)容在持續(xù)更新中,如果感興趣可以對(duì)專欄進(jìn)行訂閱~

????想對(duì)未來的自己說的話????
?? ?? 間歇性的努力和蒙混過日子,都是對(duì)之前努力的清零?? ??

【FreeSwitch開發(fā)實(shí)踐】media bug獲取通話語(yǔ)音流


前言

上一篇介紹創(chuàng)建和使用自定義模塊,創(chuàng)建一個(gè)自己的app嵌入到FreeSwitch;這一篇介紹運(yùn)用“media bug”,獲取通話語(yǔ)音流。首先,看到這兒,應(yīng)該會(huì)有兩個(gè)問題:

  • 什么是media bug
  • media bug有什么用,能干什么
    第一個(gè)問題我們放到后面詳細(xì)介紹,第二個(gè)問題media bug能干什么,media bug主要用來監(jiān)聽通話語(yǔ)音數(shù)據(jù),而拿到通話語(yǔ)音流了可以做很多事情,可以加不少業(yè)務(wù):
  • 通話監(jiān)聽
  • 分析語(yǔ)音,即通常說的ASR(語(yǔ)音識(shí)別)

一、什么是media bug

media bug中的bug并不是軟件缺陷的意思,它的作用是在FreeSwitch媒體通話數(shù)據(jù)流(語(yǔ)音或視頻)中截取這部分?jǐn)?shù)據(jù)流,達(dá)到監(jiān)聽的作用,類似從一個(gè)管道安插一個(gè)管道,這個(gè)管道就是“media bug”, 相當(dāng)于打一個(gè)“洞”,所以media bug的bug應(yīng)該稱為“盜取”、“截取”的意思。

二、如何使用media bug獲取通話語(yǔ)音流

首先,看一段media bug創(chuàng)建和獲取通話語(yǔ)音流的例子:

2.1 media bug創(chuàng)建

switch_status_t status;
switch_media_bug_t *bug;
//添加media bug
status = switch_core_media_bug_add(session, "mymedia", 0, mymediabug_callback, (void*)robot_id, 0, SMBF_READ_STREAM | SMBF_NO_PAUSE, &bug);

我們看一下switch_core_media_bug_add的聲明:

SWITCH_DECLARE(switch_status_t) switch_core_media_bug_add(_In_ switch_core_session_t *session,
														  _In_ const char *function,
														  _In_ const char *target,
														  _In_ switch_media_bug_callback_t callback,
														  _In_opt_ void *user_data,
														  _In_ time_t stop_time, 
														  _In_ switch_media_bug_flag_t flags, _Out_ switch_media_bug_t **new_bug);

函數(shù)說明:

參數(shù) 解釋
session 會(huì)話session
function media bug函數(shù)名稱,可以作為唯一key,一個(gè)key對(duì)應(yīng)一個(gè)media bug, 對(duì)應(yīng)Media-Bug-Function
target 目標(biāo),對(duì)應(yīng)Media-Bug-Taget
callback media bug回調(diào)函數(shù)
user_data 回調(diào)函數(shù)的傳入數(shù)據(jù)
stop_time 停止時(shí)間
flags 標(biāo)志,不標(biāo)志,回調(diào)函數(shù)中監(jiān)聽不通的功能
new_bug 傳出參數(shù), 新創(chuàng)建media bug

2.2 media bug回調(diào)函數(shù)

static switch_bool_t mymediabug_callback(switch_media_bug_t *bug, void *user_data, switch_abc_type_t type)
{
	switch_core_session_t* session = switch_core_media_bug_get_session(bug);
    uint8_t data[SWITCH_RECOMMENDED_BUFFER_SIZE];
    switch_frame_t frame = { 0 };
    frame.data = data;
    frame.buflen = sizeof(data);

    const char*robot_id = (const char *) user_data;
    if (robot_id == NULL) {
        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "mymedia user data is null!");
        return SWITCH_FALSE;
    }
    
    switch (type) {
            
        case SWITCH_ABC_TYPE_INIT:
        {
			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "mymediabug init, user_data[%s]\n", robot_id);
        }
        break;
    
        case SWITCH_ABC_TYPE_READ:
        {
            if (switch_core_media_bug_read(bug, &frame, SWITCH_FALSE) != SWITCH_STATUS_FALSE) {
				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "read frame: data_len=[%d], rate[%d], channels[%d], samples[%d] \n",
					frame.datalen, frame.rate, frame.channels, frame.samples);
             }
        }
	
		break;
        case SWITCH_ABC_TYPE_CLOSE:
			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "mymediabug close, user_data[%s]\n", robot_id);
            break;
        default:
            break;
    }
    
    return SWITCH_TRUE;
}

說明:

SWITCH_ABC_TYPE_READ這里就是語(yǔ)音流獲取的地方,switch_core_media_bug_read即獲取語(yǔ)音數(shù)據(jù)的接口,下面看下這個(gè)接口的聲明:

SWITCH_DECLARE(switch_status_t) switch_core_media_bug_read(_In_ switch_media_bug_t *bug, _In_ switch_frame_t *frame, switch_bool_t fill);

這個(gè)接口參數(shù)比較簡(jiǎn)單, bug就是media bug指針, frame是語(yǔ)音數(shù)據(jù)結(jié)構(gòu)體

2.3 media bug的原理

這里不展開說明media bug的底層實(shí)現(xiàn),只是簡(jiǎn)要說一下media bug 的實(shí)現(xiàn)。要想了解media bug可以從接口switch_core_media_bug_add入手,其實(shí)media bug并沒有開起新線程, 從源碼得知只是視頻video會(huì)開線程,而音頻不會(huì),那它是如何監(jiān)聽音頻流呢,答案是switch_core_session_read_frame接口,此接口是讀取原始語(yǔ)音流的,在核心中使用,這就是語(yǔ)音流沒有單獨(dú)開線程的原因。

三、media bug相關(guān)接口

上一節(jié)知道m(xù)edia bug創(chuàng)建,和在media bug回調(diào)函數(shù)中獲取語(yǔ)音流的方法,下面列舉一下和media bug相關(guān)的一些接口:

  • switch_core_media_bug_add --創(chuàng)建media bug
  • switch_core_media_bug_remove – 刪除media bug
  • switch_core_media_bug_get_session – 獲取media bug所屬的通話session
  • switch_core_media_bug_read – 從media bug中讀取語(yǔ)音數(shù)據(jù)

四、完整例子

由于代碼比較多,完整例子見:https://download.csdn.net/download/xxm524/86261083
(代碼示例象征性收取5個(gè)積分,如果沒有積分可以私信博主即可以免費(fèi)獲取)
自定義模塊的使用方法和撥號(hào)計(jì)劃配置見:【FreeSwitch開發(fā)實(shí)踐】自定義模塊創(chuàng)建與使用
命令:

originate user/1000 123

輸出:
【FreeSwitch開發(fā)實(shí)踐】media bug獲取通話語(yǔ)音流【FreeSwitch開發(fā)實(shí)踐】media bug獲取通話語(yǔ)音流


總結(jié)

本文主要介紹了media bug相關(guān)的知識(shí),分別有如下幾3點(diǎn):

  • 說明了什么是media bug
  • 如何使用media bug獲取通話語(yǔ)音流
  • media bug相關(guān)接口說明

如果覺得有些幫助或覺得文章還不錯(cuò),請(qǐng)關(guān)注一下博主,你的關(guān)注是我持續(xù)寫作的動(dòng)力。另外,如果有什么問題,可以在評(píng)論區(qū)留言,或者私信博主,博主看到后會(huì)第一時(shí)間回復(fù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-440099.html

到了這里,關(guān)于【FreeSwitch開發(fā)實(shí)踐】media bug獲取通話語(yǔ)音流的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • uniapp Vue 使用 sip.js進(jìn)行語(yǔ)音通話視頻通話

    下載或者安裝 sip.js 到 uniapp 項(xiàng)目,APP 端在 menifest.json 中配置麥克風(fēng)權(quán)限 menifest.json 中 app 權(quán)限配置選中: android.permission.RECORD_AUDIO android.permission.MODIFY_AUDIO_SETTINGS sip.js 低版本 如 V0.13.0 版本的寫法 sip.js 高版本如 V0.21.2 用法 (參數(shù)同上,只列出 methods 里的部分) APP模式下檢測(cè)麥

    2024年02月13日
    瀏覽(104)
  • whatsapp 語(yǔ)音通話 音頻編碼(五)

    whatsapp 語(yǔ)音通話 音頻編碼(五)

    客戶端通過websocket連接到服務(wù)器,客戶端發(fā)起語(yǔ)音通話請(qǐng)求,并且完成必要的協(xié)商之后,就可以直接將語(yǔ)音數(shù)據(jù)發(fā)送給服務(wù)器,服務(wù)器接收到對(duì)方的語(yǔ)音數(shù)據(jù)之后也會(huì)通過websocket將語(yǔ)音數(shù)據(jù)轉(zhuǎn)發(fā)給客戶端 XMPP 在發(fā)起語(yǔ)音通話請(qǐng)求的時(shí)候,需要帶上一個(gè)秘鑰,這個(gè)秘鑰長(zhǎng)32字節(jié)

    2024年04月17日
    瀏覽(27)
  • WebSocket+Vue+SpringBoot實(shí)現(xiàn)語(yǔ)音通話

    WebSocket+Vue+SpringBoot實(shí)現(xiàn)語(yǔ)音通話

    參考文章 整體思路 前端點(diǎn)擊開始對(duì)話按鈕后,將監(jiān)聽麥克風(fēng),獲取到當(dāng)前的音頻,將其裝化為二進(jìn)制數(shù)據(jù),通過websocket發(fā)送到webscoket服務(wù)端,服務(wù)端在接收后,將消息寫入給指定客戶端,客戶端拿到發(fā)送過來的二進(jìn)制音頻后再轉(zhuǎn)化播放 注意事項(xiàng) 由于音頻轉(zhuǎn)化后的二進(jìn)制數(shù)據(jù)

    2024年02月06日
    瀏覽(17)
  • 智能手表上的音頻(四):語(yǔ)音通話

    智能手表上的音頻(四):語(yǔ)音通話

    上篇講了智能手表上音頻文件播放。本篇開始講語(yǔ)音通話。同音頻播放一樣有兩種case:內(nèi)置codec和BT。先看這兩種case下audio data path,分別如下圖: ??????????????????????????????????????? 內(nèi)置codec下的語(yǔ)音通話audio data path ??????????????????????

    2024年02月03日
    瀏覽(19)
  • webRCT實(shí)時(shí)語(yǔ)音視頻通話 結(jié)合 vue使用

    前言:最近項(xiàng)目遇到了一個(gè)推送視頻對(duì)話的需求,本身項(xiàng)目就用到了websocket推送,所以直接使用webRCT就行 封裝了一個(gè)socket.js mounted的中調(diào)用connection 就可以了

    2024年02月13日
    瀏覽(15)
  • unity 使用聲網(wǎng)(Agora)實(shí)現(xiàn)語(yǔ)音通話

    unity 使用聲網(wǎng)(Agora)實(shí)現(xiàn)語(yǔ)音通話

    第一步、先申請(qǐng)一個(gè)聲網(wǎng)賬號(hào) [Agora官網(wǎng)鏈接](https://console.shengwang.cn/) 第二步在官網(wǎng)創(chuàng)建項(xiàng)目 ,選擇無證書模式,證書模式需要tokenh和Appld才能通話 第三步 官網(wǎng)下載SDK 然后導(dǎo)入到unity,也可以直接在unity商店里下載,Agora官網(wǎng)下載鏈接 第四步 運(yùn)行官方Demo 1、導(dǎo)入后會(huì)有這些

    2024年04月25日
    瀏覽(24)
  • SIP/VoIP之常見的語(yǔ)音通話問題

    ??語(yǔ)音通話是SIP或VoIP應(yīng)用中最重要的功能,一旦語(yǔ)音方面出現(xiàn)問題,將極大的降低產(chǎn)品的口碑,很容易被市場(chǎng)和用戶淘汰。 ??主叫方聽不到被叫方聲音,被叫方也聽不到主叫方聲音,即雙方互相聽不見 ??其中一方能聽見另一方聲音 ??聽見對(duì)方的聲音語(yǔ)調(diào)不對(duì),聲音

    2023年04月18日
    瀏覽(19)
  • ICASSP 2023 | 解密實(shí)時(shí)通話中基于 AI 的一些語(yǔ)音增強(qiáng)技術(shù)

    ICASSP 2023 | 解密實(shí)時(shí)通話中基于 AI 的一些語(yǔ)音增強(qiáng)技術(shù)

    ? 動(dòng)手點(diǎn)關(guān)注 干貨不迷路 實(shí)時(shí)音視頻通信 RTC 在成為人們生活和工作中不可或缺的基礎(chǔ)設(shè)施后,其中所涉及的各類技術(shù)也在不斷演進(jìn)以應(yīng)對(duì)處理復(fù)雜多場(chǎng)景問題,比如音頻場(chǎng)景中,如何在多設(shè)備、多人、多噪音場(chǎng)景下,為用戶提供聽得清、聽得真的體驗(yàn)。作為 RTC 方案中不可

    2024年02月16日
    瀏覽(93)
  • python使用VOSK實(shí)現(xiàn)離線語(yǔ)音識(shí)別(中文普通話)

    python使用VOSK實(shí)現(xiàn)離線語(yǔ)音識(shí)別(中文普通話)

    目標(biāo):一個(gè)代碼簡(jiǎn)單,離線,可直接使用,常用語(yǔ)句準(zhǔn)確率還不錯(cuò),免費(fèi)的,普通話語(yǔ)音轉(zhuǎn)文本的工具 幾番對(duì)比下來,VSOK基本滿足我的需求,記錄一下。 環(huán)境 windows 10 / python3.8.10 s1 安裝 vosk s2 下載模型 兩個(gè)模型,一個(gè)很小,文件名中帶有small字樣,另一個(gè)就很大了,就我自

    2024年02月11日
    瀏覽(24)
  • AI智能電話語(yǔ)音通話銷售機(jī)器人源碼,附帶系統(tǒng)搭建教程

    AI智能電話語(yǔ)音通話銷售機(jī)器人源碼,附帶系統(tǒng)搭建教程

    智能電話語(yǔ)音銷售機(jī)器人——高效篩選與跟進(jìn)客戶的利器 在快節(jié)奏的商業(yè)戰(zhàn)場(chǎng)上,迅速準(zhǔn)確地把握每一個(gè)潛在客戶是企業(yè)制勝的關(guān)鍵。我們的智能電話語(yǔ)音銷售機(jī)器人正是這樣一款能夠助力企業(yè)輕松應(yīng)對(duì)海量客戶數(shù)據(jù),實(shí)現(xiàn)高效篩選與跟進(jìn)的利器。 通過簡(jiǎn)單的資料接入,您

    2024年02月21日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包