延續前兩篇討論,本文聚焦於行動裝置播放語音串流的實務最佳化:採用 MMS 為傳輸載體、AMR 格式編碼、檔案分段策略與多執行緒預載。
| 參數 | 數值 |
|---|---|
| MMS 單檔上限 | ~100 KB |
| 目標段長 | 45-50 秒 |
| MP3 位率 | 600 KB/min |
| AMR 壓縮比 | 假設 6× |
| AMR 位率 | 100 KB/min |
| 單段檔案大小 | ~75 KB (含 MMS 封裝頭) |
5 分鐘節目切 6 段,每段 45-50 秒,完美符合 MMS 大小限制。
# Perl 腳本批次切割
@inputFilename = "C:\\opt\\media\\changjin.wma";
@outputFilename = "C:\\opt\\media\\changjin";
for ($i=1, $j=1; $i<=1000; $i+=10, $j++) {
system("ffmpeg.exe -i @inputFilename -ac 1 -acodec amr_nb -t 10 -ss $i @outputFilename.$j.amr");
}
-ss:起始時間偏移(秒)-t:擷取長度(秒)-ac 1:單聲道-acodec amr_nb:AMR 窄頻編碼器實測每段 10 秒 AMR 僅 17 KB,極為節省頻寬。
Qinjiwy:分段過小會增加播放間隙與系統開銷。建議:
1. 多執行緒並行下載。
2. 段長漸增策略:首段小(快速首播),後段漸大(利用播放時間預載更多)。
3. AMR 播放時間 > 下載時間,首段播放期間可下載更大後段,減少連線數與封裝開銷。
END_OF_MEDIA 事件 → 釋放 Player → 啟動下一段 Player(雙緩衝切換)。pauseApp() 暫停播放執行緒與下載執行緒;startApp() 恢復。此架構已於 Nokia 6260 (S60 2.1, MIDP 2.0) 實測可行,藍牙與 GPRS 均正常播放。