代码拉取完成,页面将自动刷新
HLS播放用例执行完,不能退出,有时候最后打印如下Log:
分析 DataReader 不能退出,多半是 DataReadLoop函数被卡住。
该函数往外调用,可能被卡住的地方一一排查:
最后发现是 DataPacker.Push 挂住了。
行 8751: 05-27 19:31:56.138 248 MediaSourceFilter DEBUG (media_source_filter.cpp, 292) : Func(ReadLoop) IN
行 8755: 05-27 19:31:56.138 248 HlsMediaDownloader DEBUG (hls_media_downloader.cpp, 86) : Func(Read) Read: wantReadLength 4096, realReadLength 4096, isEos 0
行 8756: 05-27 19:31:56.138 248 HttpSourcePlugin DEBUG (http_source_plugin.cpp, 201) : Func(Read) Read finished, read size = 4096, isEos 0
行 8758: 05-27 19:31:56.139 248 DemuxerFilter DEBUG (demuxer_filter.cpp, 215) : Func(PushData) PushData for port: default
行 8759: 05-27 19:31:56.139 243 MediaSourceFilter INFO (media_source_filter.cpp, 204) : Func(Stop) Stop entered.
行 8760: 05-27 19:31:56.139 248 DataPacker DEBUG (data_packer.cpp, 70) : Func(PushData) DataPacker is full, waiting for pop.
行 8765: 05-27 19:31:56.139 243 HlsMediaDownloader DEBUG (blocking_queue.h, 141) : Func(SetActive) SetActive for FragmentList: 0.
发现 挂住之后,DataPacker 的析构调用了。于是可以在析构中通知阻塞等待的线程退出:
DataPacker::~DataPacker()
{
MEDIA_LOG_I("DataPacker dtor...");
cvEmpty_.NotifyAll();
cvFull_.NotifyAll();
}
登录 后才可以发表评论