Open 11hwu2 opened 1 year ago
使用rtsp_h264_file推一个H264文件,在局域网内用ffplay指定udp传输数据播放。 在网络环境较好的情况下,进程内存占用在4MB左右,偶尔丢包导致马赛克,画面延时基本在1秒左右; 在网络环境不太好的情况下,存在大量丢包,ffplay会经常输出日志: RTP missed 2 packets ,画面马赛克严重.;进程长时间运行后,视频画面(对着时钟计数器)累积延时可以达到1分钟甚至更长(4分半钟),此时进程内存占用增长至40MB甚至更高(最高86MB)。
问题大概出在对trigger_events_的操作:
bool TaskScheduler::AddTriggerEvent(TriggerEvent callback) { if (trigger_events_->Size() < kMaxTriggetEvents) { std::lock_guard<std::mutex> lock(mutex_); char event = kTriggetEvent; trigger_events_->Push(std::move(callback)); wakeup_pipe_->Write(&event, 1); return true; } return false; } ...... void TaskScheduler::HandleTriggerEvent() { do { TriggerEvent callback; if (trigger_events_->Pop(callback)) { callback(); } } while (trigger_events_->Size() > 0); }
TaskScheduler::AddTriggerEvent由读取H264帧的线程进行RTP封包后调用; TaskScheduler::HandleTriggerEvent由任务调度主线程调用; 两个线程需要做好互斥处理,修改如下再测试,没有内存异常增长问题:
void TaskScheduler::HandleTriggerEvent() { std::lock_guard<std::mutex> lock(mutex_); do { TriggerEvent callback; if (trigger_events_->Pop(callback)) { callback(); } } while (trigger_events_->Size() > 0); }
使用rtsp_h264_file推一个H264文件,在局域网内用ffplay指定udp传输数据播放。 在网络环境较好的情况下,进程内存占用在4MB左右,偶尔丢包导致马赛克,画面延时基本在1秒左右; 在网络环境不太好的情况下,存在大量丢包,ffplay会经常输出日志: RTP missed 2 packets ,画面马赛克严重.;进程长时间运行后,视频画面(对着时钟计数器)累积延时可以达到1分钟甚至更长(4分半钟),此时进程内存占用增长至40MB甚至更高(最高86MB)。
问题大概出在对trigger_events_的操作:
TaskScheduler::AddTriggerEvent由读取H264帧的线程进行RTP封包后调用; TaskScheduler::HandleTriggerEvent由任务调度主线程调用; 两个线程需要做好互斥处理,修改如下再测试,没有内存异常增长问题: