非即時語音辨識(Qwen-Audio-3.0-ASR-Flash-Filetrans/Fun-ASR)
Qwen-Audio-3.0-ASR-Flash-Filetrans/Fun-ASR非即時語音辨識Java SDK
本文介紹Qwen-Audio-3.0-ASR-Flash-Filetrans/Fun-ASR非即時語音辨識Java SDK的參數和介面細節。
使用者指南:非即時語音辨識。關於支援的音頻格式、檔案大小限制、時間長度限制等輸入要求,請參見音頻規格。
前提條件
已開通服務並擷取API Key。請配置API Key到環境變數,而非寫入程式碼在代碼中,防範因代碼泄露導致的安全風險。
當您需要為第三方應用或使用者提供臨時存取權限,或者希望嚴格控制敏感性資料訪問、刪除等高風險操作時,建議使用臨時鑒權Token。與長期有效 API Key 相比,臨時鑒權 Token 具備時效性短(60秒)、安全性高的特點,適用於臨時調用情境,能有效降低API Key泄露的風險。使用方式:在代碼中,將原本用於鑒權的 API Key 替換為擷取到的臨時鑒權 Token 即可。
快速開始
核心類(Transcription)提供了非同步提交任務、同步等待任務結束和非同步查詢任務執行結果的介面。可通過如下兩種調用方式進行非即時語音辨識:
- 非同步提交任務+同步等待任務結束:提交任務後,阻塞當前線程直到任務結束並擷取識別結果。
- 非同步提交任務+非同步查詢任務執行結果:提交任務後,在需要的時候通過調用查詢任務介面擷取任務的執行結果。
非同步提交任務+同步等待任務結束
-
配置請求參數。
-
執行個體化核心類(Transcription)。
-
調用核心類(Transcription)的
asyncCall方法非同步提交任務。
- 檔案轉寫服務對通過API提交的任務採取儘力服務原則進行處理。任務提交後將進入排隊(
PENDING)狀態,排隊時間取決於隊列長度和檔案時間長度,無法明確給出,通常在數分鐘內。任務開始處理後,語音辨識將以數百倍加速完成。
- 每一個任務完成後,識別結果和URL下載連結有效期間為24小時,逾時後無法查詢任務或通過先前查詢結果中的URL下載結果。
-
調用核心類(Transcription)的
wait方法同步等待任務結束。
任務的狀態包括PENDING、RUNNING、SUCCEEDED和FAILED。當任務處於PENDING或RUNNING狀態時,wait介面將被阻塞。當任務處於SUCCEEDED或FAILED狀態時,wait介面不再阻塞並返回任務的執行結果。
wait返回任務執行結果(TranscriptionResult)。
import com.alibaba.dashscope.audio.asr.transcription.*;
import com.alibaba.dashscope.utils.Constants;
import com.google.gson.*;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 以下為新加坡地區的配置,調用時請將"{WorkspaceId}"替換為真實的業務空間ID,各地區的配置不同。
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
// 建立轉寫請求參數
TranscriptionParam param =
TranscriptionParam.builder()
// 新加坡地區和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// 若沒有配置環境變數,請用百鍊API Key將下行替換為:.apiKey("sk-xxx")
//.apiKey("apikey")
.model("qwen-audio-3.0-asr-flash-filetrans") // 此處以qwen-audio-3.0-asr-flash-filetrans為例,可按需更換模型名稱。模型列表:https://www.alibabacloud.com/help/zh/model-studio/models
.fileUrls(
Arrays.asList(
"{YOUR_AUDIO_URL}"))
.build();
try {
Transcription transcription = new Transcription();
// 提交轉寫請求
TranscriptionResult result = transcription.asyncCall(param);
System.out.println("RequestId: " + result.getRequestId());
// 阻塞等待任務完成並擷取結果
result = transcription.wait(
TranscriptionQueryParam.FromTranscriptionParam(param, result.getTaskId()));
// 列印結果
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(result.getOutput()));
} catch (Exception e) {
System.out.println("error: " + e);
}
System.exit(0);
}
}
非同步提交任務+非同步查詢任務執行結果
-
配置請求參數。
-
執行個體化核心類(Transcription)。
-
調用核心類(Transcription)的
asyncCall方法非同步提交任務。
- 檔案轉寫服務對通過API提交的任務採取儘力服務原則進行處理。任務提交後將進入排隊(
PENDING)狀態,排隊時間取決於隊列長度和檔案時間長度,無法明確給出,通常在數分鐘內。任務開始處理後,語音辨識將以數百倍加速完成。
- 每一個任務完成後,識別結果和URL下載連結有效期間為24小時,逾時後無法查詢任務或通過先前查詢結果中的URL下載結果。
-
迴圈調用核心類(Transcription)的
fetch方法直到擷取最終的任務結果。
當任務狀態為SUCCEEDED或FAILED時,停止輪詢並處理結果。
fetch返回任務執行結果(TranscriptionResult)。
import com.alibaba.dashscope.audio.asr.transcription.*;
import com.alibaba.dashscope.common.TaskStatus;
import com.alibaba.dashscope.utils.Constants;
import com.google.gson.*;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 以下為新加坡地區的配置,調用時請將"{WorkspaceId}"替換為真實的業務空間ID,各地區的配置不同。
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
// 建立轉寫請求參數
TranscriptionParam param =
TranscriptionParam.builder()
// 新加坡地區和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// 若沒有配置環境變數,請用百鍊API Key將下行替換為:.apiKey("sk-xxx")
//.apiKey("apikey")
.model("qwen-audio-3.0-asr-flash-filetrans") // 此處以qwen-audio-3.0-asr-flash-filetrans為例,可按需更換模型名稱。模型列表:https://www.alibabacloud.com/help/zh/model-studio/models
.fileUrls(
Arrays.asList(
"{YOUR_AUDIO_URL}"))
.build();
try {
Transcription transcription = new Transcription();
// 提交轉寫請求
TranscriptionResult result = transcription.asyncCall(param);
System.out.println("RequestId: " + result.getRequestId());
// 迴圈擷取任務執行結果,直到任務結束
while (true) {
result = transcription.fetch(TranscriptionQueryParam.FromTranscriptionParam(param, result.getTaskId()));
if (result.getTaskStatus() == TaskStatus.SUCCEEDED || result.getTaskStatus() == TaskStatus.FAILED) {
break;
}
Thread.sleep(1000);
}
// 列印結果
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(result.getOutput()));
} catch (Exception e) {
System.out.println("error: " + e);
}
System.exit(0);
}
}
介面地址
SDK 預設使用北京地區的介面地址。如需切換到其他地區,需在初始化前修改 Constants.baseHttpApiUrl。
https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1調用時請將{WorkspaceId}替換為真實的業務空間ID。https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1調用時請將{WorkspaceId}替換為真實的Workspace ID。
阿里雲百鍊為華北2(北京)、新加坡地區推出了業務空間專屬網域名稱,能夠為推理請求提供卓越的效能和更高的穩定性,建議遷移至新網域名稱:
- 華北2(北京)地區:從
dashscope.aliyuncs.com 遷移至 {WorkspaceId}.cn-beijing.maas.aliyuncs.com
- 新加坡地區:從
dashscope-intl.aliyuncs.com 遷移至 {WorkspaceId}.ap-southeast-1.maas.aliyuncs.com
{WorkspaceId}需要替換為真實的Workspace ID。現有網域名稱仍可正常使用。
切換到新加坡地區:
import com.alibaba.dashscope.utils.Constants;
// 在代碼開頭設定
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
注意:
- 不同地區的 API Key 不同,請確保使用對應地區的 API Key
- 地區配置為全域設定,影響所有 DashScope SDK 的 API 呼叫
請求參數
請求參數通過TranscriptionParam的鏈式方法進行配置。
TranscriptionParam param = TranscriptionParam.builder()
.model("qwen-audio-3.0-asr-flash-filetrans")
.fileUrls(
Arrays.asList(
"{YOUR_AUDIO_URL}"))
.build();
| 參數 | 類型 | 是否必須 | 說明 |
|---|
| model | String | 是 | 指定模型名。支援Qwen-Audio-3.0-ASR-Flash-Filetrans和Fun-ASR系列模型,詳情請參見支援的模型與地區。 |
| fileUrls | List<String> | 是 | 音視頻檔案轉寫的URL列表,支援HTTP / HTTPS協議,單次請求僅支援1個URL。關於支援的音頻格式、檔案大小限制、時間長度限制等輸入要求,請參見音頻規格。若錄音檔案儲存體在阿里雲OSS,使用RESTful API方式支援使用以oss://為首碼的臨時 URL,使用SDK方式不支援使用以 oss://為首碼的臨時 URL。
-
臨時 URL 有效期間48小時,到期後無法使用,請勿用於生產環境。
-
檔案上傳憑證介面限流為 100 QPS 且不支援擴容,請勿用於生產環境、高並發及壓測情境。
-
生產環境建議使用阿里雲OSS 等穩定儲存,確保檔案長期可用並規避限流問題。
-
錄音檔案URL設定成OSS臨時公網訪問不通該如何處理?要求標頭中將
X-DashScope-OssResourceResolve設為enable(不推薦該方式)。
SDK不支援對要求標頭進行配置。
|
| vocabularyId | String | 否 | 先行編譯熱詞列表 ID。需預先調用建立熱詞列表介面產生,識別時傳入該 ID 即可使用列表中的熱詞。適用於詞彙已知且相對穩定、需要跨請求複用同一詞表的情境。使用方法請參見先行編譯熱詞。 |
| vocabulary | Map<String, Integer> | 否 | 即時熱詞。以索引值對形式傳入,鍵為熱詞文本(string),值為熱詞權重(integer),無需預先建立熱詞列表。權重取值範圍為 [1, 5] 或 50:取 [1, 5] 時值越大模型越傾向輸出該詞;取 50 時為超級熱詞,召回率大幅提升,但超級熱詞數量最多不超過 50 個。適用於臨時性、會話層級的熱詞最佳化。與先行編譯熱詞同時配置時,僅即時熱詞生效。使用方法請參見即時熱詞。僅qwen-audio-3.0-asr-flash-filetrans支援即時熱詞。 vocabulary需要通過TranscriptionParam執行個體的parameter方法或者parameters方法進行設定:Map<String, Integer> vocab = new HashMap<>();
vocab.put("張三", 5);
vocab.put("李四", 5);
TranscriptionParam param = TranscriptionParam.builder()
.model("qwen-audio-3.0-asr-flash-filetrans")
.parameter("vocabulary", vocab)
.build();
|
| channelId | List<Integer> | 否 | 指定在多音軌音頻檔案中需要識別的音軌索引,索引從 0 開始。例如,[0] 表示識別第一個音軌,[0, 1] 表示同時識別第一和第二個音軌。如果省略此參數,則預設處理第一個音軌。指定的每一個音軌都將獨立計費。例如,為單個檔案請求 [0, 1] 會產生兩筆獨立的費用。 預設值:[0]。 |
| specialWordFilter | String | 否 | 指定在語音辨識過程中需要處理的敏感詞,並支援對不同敏感詞設定不同的處理方式。詳情請參見敏感詞過濾。 |
| diarizationEnabled | Boolean | 否 | 是否啟用說話人分離,預設關閉。僅適用於單聲道音頻,多頻道音訊不支援說話人分離。啟用該功能後,識別結果中將顯示speaker_id欄位,用於區分不同說話人。如果啟用說話人分離功能,建議音頻時間長度不超過2小時,否則可能導致識別失敗或逾時。 預設值:false。有關speaker_id的樣本,請參見識別結果說明。 |
| speakerCount | Integer | 否 | 僅在開啟說話人分離功能(diarization_enabled設定為true)時生效。 說話人數量參考值。取值範圍為2至100的整數(包含2和100)。預設自動判斷說話人數量,如果配置此項,只能輔助演算法盡量輸出指定人數,無法保證一定會輸出此人數。無預設值。 |
| language_hints | String[] | 否 | 設定待識別語言代碼。如果無法提前確定語種,可不設定,模型會自動識別語種。對於 Qwen-Audio-3.0-ASR-Flash-Filetrans 系列模型,最多支援設定 4 個值,即便設定超出 4 個,也僅前 4 個生效;對於 Fun-ASR 系列模型,僅支援設定 1 個值,即便設定多個,也僅第一個生效。
-
qwen-audio-3.0-asr-flash-filetrans、fun-asr、fun-asr-2025-11-07、fun-asr-mtl、fun-asr-mtl-2025-08-25:
- zh: 中文
- en: 英文
- ja: 日語
- ko:韓語
- vi:越南語
- th:泰語
- id:印尼語
- ms:馬來語
- tl:菲律賓語
- hi:印地語
- ar:阿拉伯語
- fr:法語
- de:德語
- es:西班牙語
- pt:葡萄牙語
- ru:俄語
- it:意大利語
- nl:荷蘭語
- sv:瑞典語
- da:丹麥語
- fi:芬蘭語
- no:挪威語
- el:希臘語
- pl:波蘭語
- cs:捷克語
- hu:匈牙利語
- ro:羅馬尼亞語
- bg:保加利亞語
- hr:克羅地亞語
- sk:斯洛伐克語
-
fun-asr-2025-08-25:
language_hints需要通過TranscriptionParam執行個體的parameter方法或者parameters方法進行設定:TranscriptionParam param = TranscriptionParam.builder()
.model("qwen-audio-3.0-asr-flash-filetrans")
.parameter("language_hints", new String[]{"zh"})
.build();
|
| apiKey | String | 否 | 使用者API Key。如已將API Key配置到環境變數,則無須在代碼中設定。否則一定要在代碼中進行設定。 |
響應結果
任務執行結果(TranscriptionResult)
TranscriptionResult封裝了當前任務執行結果。
| 介面/方法 | 參數 | 傳回值 | 描述 |
|---|
public String getRequestId()
| 無 | requestId | 擷取requestId。 |
public String getTaskId()
| 無 | taskId | 擷取taskId。 |
public TaskStatus getTaskStatus()
| 無 | TaskStatus,任務狀態 | 擷取任務狀態。TaskStatus為枚舉類,只需關注PENDING、RUNNING、SUCCEEDED和FAILED這四個狀態即可。當任務包含多個子任務時,只要存在任一子任務成功,整個任務狀態將標記為SUCCEEDED,需通過subtask_status欄位判斷具體子任務結果。 |
public List<TranscriptionTaskResult> getResults()
| 無 | 子任務執行結果(TranscriptionTaskResult) | 擷取子任務執行結果(TranscriptionTaskResult)。每個任務對一個或多個音頻檔案進行識別,不同音頻檔案在不同的子任務中處理,因此每個任務對應一到多個子任務。 |
public JsonObject getOutput()
| 無 | 任務執行結果,為JSON格式的資料 | 擷取任務執行結果。該結果是一個JSON格式的資料,如果您想通過getOutput介面擷取任務執行結果,請您在擷取結果後自行解析。
正常樣本{
"task_id":"0795ff8c-b666-4e91-bb8b-xxx",
"task_status":"SUCCEEDED",
"submit_time":"2025-02-13 16:12:09.109",
"scheduled_time":"2025-02-13 16:12:09.128",
"end_time":"2025-02-13 16:12:10.189",
"results":[
{
"file_url":"{YOUR_AUDIO_URL}",
"transcription_url":"https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/prod/paraformer-v2/20250213/16%3A12/3baafe5f-d09d-46c6-8b01-724927670edb-1.json?Expires=1739520730&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE",
"subtask_status":"SUCCEEDED"
}
],
"task_metrics":{
"TOTAL":1,
"SUCCEEDED":1,
"FAILED":0
}
}
異常樣本“code”為錯誤碼,“message”為錯誤資訊,只有異常情況才有這兩個欄位,您可以通過這兩個欄位,對照錯誤碼排查問題。{
"task_id": "7bac899c-06ec-4a79-8875-xxxxxxxxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2024-12-16 16:30:59.170",
"scheduled_time": "2024-12-16 16:30:59.204",
"end_time": "2024-12-16 16:31:02.375",
"results": [
{
"file_url": "{YOUR_AUDIO_URL}",
"code": "FILE_DOWNLOAD_FAILED",
"message": "The audio file cannot be downloaded.",
"subtask_status": "FAILED"
}
],
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 0,
"FAILED": 1
}
}
|
子任務執行結果(TranscriptionTaskResult)
TranscriptionTaskResult封裝了子任務執行結果。子任務對單個音頻檔案進行識別。
| 介面/方法 | 參數 | 傳回值 | 描述 |
|---|
public String getFileUrl()
| 無 | 被識別的音頻檔案的連結 | 擷取被識別音頻檔案的連結。 |
public String getTranscriptionUrl()
| 無 | 識別結果對應的連結 | 擷取識別結果對應的連結。該連結有效期間為24小時,逾時後無法查詢任務或通過先前查詢結果中的URL下載結果。識別結果儲存為JSON檔案,您可以通過上述連結下載該檔案或直接通過HTTP請求讀取該檔案中的內容。JSON資料中各欄位含義請參見識別結果說明。 |
public TaskStatus getSubTaskStatus()
| 無 | TaskStatus,子任務狀態 | 擷取子任務狀態。TaskStatus為枚舉類,只需關注PENDING、RUNNING、SUCCEEDED和FAILED這四個狀態即可。 |
public String getMessage()
| 無 | 任務執行過程中關鍵資訊,可能為空白 | 擷取任務執行過程中的關鍵資訊。當任務失敗時,可查看該內容分析原因。 |
識別結果說明
識別結果儲存為JSON檔案。
{
"file_url":"{YOUR_AUDIO_URL}",
"properties":{
"audio_format":"pcm_s16le",
"channels":[
0
],
"original_sampling_rate":16000,
"original_duration_in_milliseconds":3834
},
"transcripts":[
{
"channel_id":0,
"content_duration_in_milliseconds":3720,
"text":"Hello world, 這裡是阿里巴巴語音實驗室。",
"sentences":[
{
"begin_time":100,
"end_time":3820,
"text":"Hello world, 這裡是阿里巴巴語音實驗室。",
"sentence_id":1,
"speaker_id":0, //當開啟自動說話人分離功能時才會顯示該欄位
"words":[
{
"begin_time":100,
"end_time":596,
"text":"Hello ",
"punctuation":""
},
{
"begin_time":596,
"end_time":844,
"text":"world",
"punctuation":", "
}
// 這裡省略其它內容
]
}
]
}
]
}
需要關注的參數如下:
參數 | 類型 | 說明 |
|---|
audio_format | string | 源檔案中音訊格式。 |
channels | array[integer] | 源檔案中音訊音軌索引資訊,對單軌音頻返回[0],對雙軌音頻返回[0, 1],以此類推。 |
original_sampling_rate | integer | 源檔案中音訊採樣率(Hz)。 |
original_duration_in_milliseconds | integer | 源檔案中的原始音頻時間長度(ms)。 |
channel_id | integer | 轉寫結果的音軌索引,以0為起始。 |
content_duration | integer | 音軌中被判定為語音內容的時間長度(ms)。 語音辨識模型服務僅對音軌中被判定為語音內容的時間長度進行語音轉寫,並據此進行計量計費,非語音內容不計量、不計費。通常情況下語音內容時間長度會短於原始音頻時間長度。由於對是否存在語音內容的判定是由AI模型給出的,可能與實際情況存在一定誤差。 |
transcript | string | 段落層級的語音轉寫結果。 |
sentences | array | 句子層級的語音轉寫結果。 |
words | array | 詞層級的語音轉寫結果。 |
begin_time | integer | 開始時間戳(ms)。 |
end_time | integer | 結束時間戳記(ms)。 |
text | string | 語音轉寫結果。 |
speaker_id | integer | 當前說話人的索引,以0為起始,用於區分不同的說話人。 僅在啟用說話人分離功能時,該欄位才會顯示於識別結果中。 |
punctuation | string | 預測出的詞之後的標點符號(如有)。 |
關鍵介面
任務查詢參數配置類(TranscriptionQueryParam)
TranscriptionQueryParam在等待任務完成(調用Transcription的wait方法)或查詢任務執行結果(調用Transcription的fetch方法)時用到。
通過靜態方法FromTranscriptionParam建立TranscriptionQueryParam執行個體。
// 建立轉寫請求參數
TranscriptionParam param =
TranscriptionParam.builder()
// 若沒有將API Key配置到環境變數中,需將apiKey替換為自己的API Key
//.apiKey("apikey")
.model("qwen-audio-3.0-asr-flash-filetrans")
.fileUrls(
Arrays.asList(
"{YOUR_AUDIO_URL}"))
.build();
try {
Transcription transcription = new Transcription();
// 提交轉寫請求
TranscriptionResult result = transcription.asyncCall(param);
System.out.println("RequestId: " + result.getRequestId());
TranscriptionQueryParam queryParam = TranscriptionQueryParam.FromTranscriptionParam(param, result.getTaskId());
} catch (Exception e) {
System.out.println("error: " + e);
}
| 介面/方法 | 參數 | 傳回值 | 描述 |
|---|
public static TranscriptionQueryParam FromTranscriptionParam(TranscriptionParam param, String taskId)
|
param:TranscriptionParam執行個體
taskId:任務ID
| TranscriptionQueryParam執行個體 | 建立TranscriptionQueryParam執行個體。 |
核心類(Transcription)
Transcription可以通過“import com.alibaba.dashscope.audio.asr.transcription.*;”方式引入。它的關鍵介面如下:
| 介面/方法 | 參數 | 傳回值 | 描述 |
|---|
public TranscriptionResult asyncCall(TranscriptionParam param)
| param:語音辨識相關參數,TranscriptionParam執行個體 | 任務執行結果(TranscriptionResult) | 非同步提交語音辨識任務。 |
public TranscriptionResult wait(TranscriptionQueryParam queryParam)
| queryParam:TranscriptionQueryParam執行個體 | 任務執行結果(TranscriptionResult) | 阻塞當前線程直到非同步任務結束(任務狀態為SUCCEEDED或FAILED)。 |
public TranscriptionResult fetch(TranscriptionQueryParam queryParam)
| queryParam:TranscriptionQueryParam執行個體 | 任務執行結果(TranscriptionResult) | 非同步查詢當前任務執行結果。 |
錯誤碼
如遇報錯問題,請參見錯誤碼進行排查。
當任務包含多個子任務時,只要存在任一子任務成功,整個任務狀態將標記為SUCCEEDED,需通過subtask_status欄位判斷具體子任務結果。
錯誤返回樣本:
{
"task_id": "7bac899c-06ec-4a79-8875-xxxxxxxxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2024-12-16 16:30:59.170",
"scheduled_time": "2024-12-16 16:30:59.204",
"end_time": "2024-12-16 16:31:02.375",
"results": [
{
"file_url": "{YOUR_AUDIO_URL}",
"code": "FILE_DOWNLOAD_FAILED",
"message": "The audio file cannot be downloaded.",
"subtask_status": "FAILED"
}
],
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 0,
"FAILED": 1
}
}
常見問題
功能特性
Q:是否支援Base64編碼方式的音頻?
不支援Base64編碼方式的音頻。僅支援可通過公網訪問的 URL 所指向的音訊識別,不支援識別二進位流,也不支援直接識別本地檔案。
Q:如何將音頻檔案以公網可訪問的URL形式提供?
通常遵循以下幾個步驟(這裡為您提供一種思路,具體情況因不同儲存產品而異,推薦將音頻上傳至阿里雲OSS):
如以下這幾種:
-
Object Storage Service服務(推薦):
- 使用雲端服務商的Object Storage Service服務(如阿里雲OSS),將音頻檔案上傳到儲存桶中,並設定為公開訪問。
- 優點:高可用性、支援 CDN 加速、易於管理。
-
Web 服務器:
- 將音頻檔案放置在支援 HTTP/HTTPS 訪問的 Web 服務器上(如 Nginx、Apache)。
- 優點:適合小型專案或本地測試。
-
內容分發網路(CDN):
- 將音頻檔案託管在 CDN 上,通過 CDN 提供的 URL 訪問。
- 優點:加速檔案傳輸,適合高並發情境。
根據選擇的儲存/託管方式,將音頻上傳,如:
-
Object Storage Service服務:
- 登入雲端服務商的控制台,建立儲存桶。
- 上傳音頻檔案,並設定檔案許可權為“公用讀取”或產生臨時訪問連結。
-
Web 服務器:
- 將音頻檔案放置在伺服器指定目錄下(如
/var/www/html/audio/)。
- 確保檔案可以通過 HTTP/HTTPS 訪問。
例如:
-
Object Storage Service服務:
- 檔案上傳後,系統會自動產生一個公網存取 URL(通常格式為
https://<bucket-name>.<region>.aliyuncs.com/<file-name>)。
- 如果需要更友好的網域名稱,可以綁定自訂網域名並開啟 HTTPS。
-
Web 服務器:
- 檔案的存取 URL 通常是伺服器位址加上檔案路徑(如
https://your-domain.com/audio/file.mp3)。
-
CDN:
- 配置 CDN 加速後,使用 CDN 提供的 URL(如
https://cdn.your-domain.com/audio/file.mp3)。
公網環境下,確保產生的 URL 可以正常訪問,例如:
- 在瀏覽器中開啟 URL,檢查是否能播放音頻檔案。
- 使用工具(如
curl 或 Postman)驗證 URL 是否返回正確的 HTTP 響應(狀態代碼 200)。
使用SDK時,若錄音檔案儲存體在阿里雲OSS,不支援使用以 oss://為首碼的臨時 URL。
使用RESTful API時,若錄音檔案儲存體在阿里雲OSS,支援使用以 oss://為首碼的臨時 URL:
- 臨時 URL 有效期間48小時,到期後無法使用,請勿用於生產環境。
- 檔案上傳憑證介面限流為 100 QPS 且不支援擴容,請勿用於生產環境、高並發及壓測情境。
- 生產環境建議使用阿里雲OSS 等穩定儲存,確保檔案長期可用並規避限流問題。
Q:多久能擷取識別結果?
任務提交後將進入排隊(PENDING)狀態,排隊時間取決於隊列長度和檔案時間長度,無法明確給出,通常在數分鐘內,請耐心等待。並且音頻時間長度越長,所需時間越久。
故障排查
如遇代碼報錯問題,請根據錯誤碼中的資訊進行排查。
Q:一直輪詢不到結果?
可能是限流原因,請耐心等待。
Q:無法識別語音(無識別結果)是什麼原因?
請檢查音頻格式和採樣率是否正確且符合參數約束。
可以使用ffprobe工具擷取音訊容器、編碼、採樣率、聲道等資訊:
ffprobe -v error -show_entries format=format_name -show_entries stream=codec_name,sample_rate,channels -of default=noprint_wrappers=1 input.xxx