本文所寫的是調節推流端降低延遲能調節的一些方案,有不足請補充,其他端方向類似,例如降低采集緩存,減少編碼時間等等,如有需要請參考。本文以windows推流端為例做解釋。
1:減少采集緩存av_dict_set(&p_device_options,"rtbufsize",str_buf_size,0);av_dict_set(&p_device_options,"start_time_realtime",0,0);
rtbufsize是緩存的大小攝像頭和麥克風的資料采集出來之後會先放到這個buf中然後才能取出來做解碼或編碼,buf大小根據自己的需求算出來設定。
2:減少音頻采集sampels數量//設定了采樣率也無效,設定這個是為了讓音頻采集每次samples少一些。//buffer大小是以采樣率44100計算的,44100*30=1323000,即每次采集音頻samples = 1323個。av_dict_set(&p_device_options, "audio_buffer_size","30", 0);
解釋下為什麼要設定這個,音頻采集如果不設定一般是采集出來1920個samples,如果沒記錯android采集出來的samples更多應該超過10000個,這麼多的samples做編碼的時候aac格式lc的profile隻需要1024個samples,he的需要2048個,就需要循環編完之後才能再次去取新的麥克風資料,是以需要減少。
3:gopsize減少
編碼一旦有gopsize很大的時候或者用了opencodec,有些播放器會等待I幀,無形中增加延遲。
4:B幀減少
編碼時如果有B幀會再解碼時緩存很多幀資料才能解B幀,是以隻留下I幀和P幀。
5:編碼形式修改av_opt_set(cctext->priv_data, "preset", "superfast", 0);
可根據圖像品質調整。
6:實時編碼av_opt_set(cctext->priv_data, "tune", "zerolatency", 0);
一般的編碼時進去很多幀yuv資料才能出來一幀sps,pps ,sei(可選)+I幀 等等。減少編碼緩存會減少延遲。
7:圖像品質與編碼速度調節output_codec_context->me_range = p_TaskSreamInfo->VideoCodecInfo.me_range;output_codec_context->max_qdiff = p_TaskSreamInfo->VideoCodecInfo.max_qdiff;output_codec_context->qmin = p_TaskSreamInfo->VideoCodecInfo.qmin; //調節清晰度和編碼速度 //這個值調節編碼後輸出資料量越大輸出資料量越小,越大編碼速度越快,清晰度越差 output_codec_context->qmax = p_TaskSreamInfo->VideoCodecInfo.qmax; //調節清晰度和編碼速度
這幾個參數需要跟圖像品質做平衡。
歡迎來到技術之家,
如需轉載,煩請保留本文連結和出處:http://www.jszja.com/contents/28/1985.html
您的支援将是我們前進的動力!如對本篇文章有疑問或建議,請通過本站下方郵箱聯系我們,讓技術之家每天進步一點點!(●'◡'●)