Cleverpig said:“其實,感覺上可以自己編寫一套流媒體規範的實現,比如將源檔案指定為wav格式或者其它的raw格式,然後分段發送到mobile。。
但是這樣做確實效率低,而且浪費頻寬。本人研究了一下Tea Vui Huang的mobilecast實現有些心得,在此與大家討論一下:
1。使用MMS發送radiocast:由於MMS服務可以使用圖片、音樂等多媒體元素,而且技術比較成熟,所以將它作為radiocast的載體是方便的選擇。而對於mobile使用者來講,cast的使用方式可以採用請求和訂閱兩種模式;
2。radio檔案格式的選擇:對於某些手機不能支援mp3格式檔案,即使支援mp3也受到memory size的限制,所以採用更為普遍、壓縮比更大的amr格式是比較好的choice;
3。amr檔案的分割:由於目前大多數手機僅能支援100KB左右的多媒體訊息,所以最佳的cast長度應該是50秒。比如將大約5分鐘的mp3檔案分割為6個amr章節檔案,每個章節檔案所包含的audio長度為45-50秒。而每個amr格式的壓縮比將是普通mp3格式3-6倍。按照播放率為600KB/min的mp3格式計算,保守地假定amr格式壓縮比為mp3格式的6倍,amr格式的播放率為100KB/min,而45秒的amr檔案大小為75KB。
所以Tea Vui Huang的做法是很clever的。”
我實驗過了,利用ffmpeg的這兩個參數,可以控制讓ffmpeg來將一個大mp3劈分成許多小段的獨立播放的amr檔案。
-ss time_off set the start time offset
-t duration set the recording time
比如你寫這麼個perl檔案,然後運行:
@inputFilename = "C:\\opt\\media\\changjin.wma";
@outputFilename = "C:\\opt\\media\\changjin";
for($i=1,$j=1;$i<=1000;$i+=10,$j++)
{
system("C:\\software\\ffmpeg.exe -i @inputFilename -ac 1 -acodec amr_nb -t 10 -ss $i @outputFilename.$j.\".amr\"");
}
就把一個大檔案拆分成許多小amr了,每一個amr檔案只有17KB。
Qinjiwy said:“提一個最佳化的小建議
如果分段太小,播放的間斷太多的話,使用者感覺上和系統開銷都不是很合適.
可以考慮多開幾個線程, 另外,每個檔案不一定要一樣大,可以考慮
檔案逐漸增大,從目前移動網速計算,
壓縮比高的amr語音檔案播放的時間要比下載的時間長.在第一次下載後開始播放的這段時間中,就
可以下載比第一次下載大的檔案了,這樣能減少網路開銷”