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語音文件播放的時間要比下載的時間長.在第一次下載後開始播放的這段時間中,就
可以下載比第一次下載大的文件了,這樣能減少網絡開銷”