24 Star 30 Fork 262

OpenHarmony / multimedia_media_foundation

 / 详情

[Win]HLS自动化测试概率出现 Stop 时不退出

已完成
任务 成员
创建于  
2022-05-27 20:14

问题现象

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();
}
附件
chenguodong 2022-05-27 20:14
chenguodong 2022-05-27 20:14

评论 (0)

chenguodong 创建了缺陷
chenguodong 修改了描述
chenguodong 任务状态待办的 修改为已完成
dingqingpo 任务类型缺陷 修改为任务
展开全部操作日志

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(1)
1
https://gitee.com/openharmony/multimedia_media_foundation.git
git@gitee.com:openharmony/multimedia_media_foundation.git
openharmony
multimedia_media_foundation
multimedia_media_foundation

搜索帮助