web flash推流錄製測試研究

用flash as3寫了一段推流測試demo,參考srs_publisher和simplest_as3_rtmp_streamer。
推流到srs2服務器,錄製爲flv文件。
測試一輪結果以下:ios

Web Flash推上來的流,通過srs錄製爲flv。
srs設置jitter_time full; dvr_plan segment; dvr_duration 180; 實際錄製180s。
flowplayer 能夠播放服務器flv文件 有聲音沒視頻 沒有時間標籤 不支持seek。(ffmpeg,yamdi,flvmeta) 修復meta後 正常播放 有時間標籤 支持seek。
jwplayer 能夠播放服務器flv文件 有聲音沒視頻 沒有時間標籤 不支持seek。(ffmpeg,yamdi,flvmeta) 修復meta後 正常播放 有時間標籤 支持seek。
sewiseplayer 能夠播放服務器flv文件 有聲音沒視頻 沒有時間標籤 不支持seek。(ffmpeg,yamdi,flvmeta) 修復meta後 正常播放 有時間標籤 seek功能可後期添加。
strobe 能夠播放服務器flv文件 有聲音有視頻 沒有時間標籤 不支持seek。(ffmpeg,yamdi,flvmeta) 修復meta後 正常播放 有時間標籤 支持seek。
srs設置jitter_time zero;貌似也能夠,筆記本測試過。web

srs設置jitter_time off; dvr_plan session;
flowplayer 能夠播放服務器flv文件 有聲音沒視頻 沒有時間標籤 不支持seek。(ffmpeg,yamdi,flvmeta) 修復meta後 正常播放 有時間標籤 支持seek。
jwplayer 能夠播放服務器flv文件 有聲音沒視頻 沒有時間標籤 不支持seek。(ffmpeg,yamdi,flvmeta) 修復meta後 正常播放 有時間標籤 支持seek。
sewiseplayer 能夠播放服務器flv文件 有聲音沒視頻 沒有時間標籤 不支持seek。(ffmpeg,yamdi,flvmeta) 修復meta後 正常播放 有時間標籤 支持seek。
strobe 能夠播放服務器flv文件 有聲音有視頻 沒有時間標籤 不支持seek。(ffmpeg,yamdi,flvmeta) 修復meta後 正常播放 有時間標籤 支持seek。服務器

srs設置jitter_time zero; dvr_plan session;
flowplayer 能夠播放服務器flv文件 有聲音沒視頻 沒有時間標籤 不支持seek。(ffmpeg,yamdi,flvmeta) 修復meta後 正常播放 有時間標籤 支持seek。
jwplayer 能夠播放服務器flv文件 有聲音有視頻 長寬比不對 沒有時間標籤 不支持seek。(ffmpeg,yamdi,flvmeta) 修復meta後 正常播放 有時間標籤 支持seek。
sewiseplayer 能夠播放服務器flv文件 有聲音有視頻 有時間標籤 不支持seek。(ffmpeg,yamdi,flvmeta) 修復meta後 正常播放 有時間標籤 支持seek。
strobe 能夠播放服務器flv文件 有聲音有視頻 沒有時間標籤 不支持seek。(ffmpeg,yamdi,flvmeta) 修復meta後 正常播放 有時間標籤 支持seek。session

一段時間以來都沒有解決這個問題,覺得就是這樣的。也和網友討論過這個問題,被當作srs feature處理了。
這幾天研究錄製的文件,發現錄製的flv和其餘平臺錄製的flv格式不太同樣。
使用FlvParse分析一下錄製flv文件的結構,發現:
通過ffmpeg轉化的flv,有字段onMetaData,而web flash推流錄製發flv沒有。ide

  

通過查找接口,發現as3也有onMetaData接口,我並未調用。添加以下代碼解決:測試

 1 // add metaData for stream
 2     var metaData:Object = new Object();
 3     metaData.title = "SptCallCenter";
 4     metaData.author = "Jeffer";
 5 metaData.width = av_hd_width;
 6     metaData.height = av_hd_height;
 7     metaData.videodatarate = av_hd_Vbitrate/1000;
 8     metaData.framerate = av_hd_fps;
 9 //send metadata
10     metaData.videocodecid = 7;
11     metaData.audiosamplerate = 16000;
12     metaData.audiocodecid = 4;
13     media_stream.send("@setDataFrame", "onMetaData", metaData); 
相關文章
相關標籤/搜索