音视频积累-Wakeups 解决
一、现象
ReplayKit2运行过程中经常会被系统杀掉,在USB连接手机后可以导出crash log
Date/Time: 2017-09-29 12:16:59.321071 +0800
OS Version: iPhone OS 11.0.1 (Build 15A402)
Architecture: arm64
Report Version: 19 Command: LABroadcastUpload
Path: /private/var/containers/Bundle/Application/1BB63CDA-9704-44C7-9D61-5BC6106F9E0E/LiveAssistant.app/PlugIns/LABroadcastUpload.appex/LABroadcastUpload
Version: 2.3.0.0 (2.3.0.0)
Parent: launchd [1]
PID: 1557 Event: wakeups
Wakeups: 45003 wakeups over the last 92 seconds (487 wakeups per second average), exceeding limit of 150 wakeups per second over 300 seconds
Action taken: none
Duration: 92.35s
Steps: 46 Hardware model: iPhone8,1
Active cpus: 2 Powerstats for: LABroadcastUploa [1557]
UUID: F91308C6-C89C-3571-94C0-BBE49DFB2013
Start time: 2017-09-29 12:18:04 +0800
End time: 2017-09-29 12:18:31 +0800
Microstackshots: 46 samples (100%)
Primary state: 30 samples Frontmost App, User mode, Effective Thread QoS Default, Requested Thread QoS Default, Override Thread QoS Unspecified
User Activity: 0 samples Idle, 46 samples Active
Power Source: 0 samples on Battery, 46 samples on AC
33 _pthread_start + 311 (libsystem_pthread.dylib + 8696) [0x18618c1f8]
33 _pthread_body + 307 (libsystem_pthread.dylib + 9004) [0x18618c32c]
15 __NSThread__start__ + 995 (Foundation + 1103968) [0x186f4f860]
5 -[LAAudioMix mixAudioLoop:] (LAAudioMix.m:174 in LABroadcastUpload + 276808) [0x10264f948]
4 -[LAUploadManager pushCustomPCMData:len:] (LAUploadManager.m:164 in LABroadcastUpload + 157864) [0x1026328a8]
4 -[LAExLogger addOneLog:inFile:function:line:module:message:] (LAExLogger.m:115 in LABroadcastUpload + 77892) [0x10261f044]
2 -[LAExLogger addOneLog:inFile:function:line:module:fullMessage:] (LAExLogger.m:143 in LABroadcastUpload + 78616) [0x10261f318]
2 +[NSString stringWithFormat:] + 67 (Foundation + 10420) [0x186e448b4]
2 _CFStringCreateWithFormatAndArgumentsAux2 + 131 (CoreFoundation + 1054296) [0x18651f658]
2 __CFStringAppendFormatCore + 9436 (CoreFoundation + 1048212) [0x18651de94]
2 -[LAExLogger addOneLog:inFile:function:line:module:fullMessage:] (LAExLogger.m:161 in LABroadcastUpload + 78664) [0x10261f348]
2 NSLog + 31 (Foundation + 73876) [0x186e54094]
2 _NSLogv + 127 (Foundation + 972068) [0x186f2f524]
2 _CFLogvEx3 + 227 (CoreFoundation + 1239416) [0x18654c978]
2 __proc_info + 8 (libsystem_kernel.dylib + 135252) [0x186079054]
2 <Kernel mode>
1 -[LAUploadManager pushCustomPCMData:len:] (LAUploadManager.m:165 in LABroadcastUpload + 157936) [0x1026328f0]
1 -[LAEncodeRTMPCore pushCustomPCMData:len:] (LAEncodeRTMPCore.m:676 in LABroadcastUpload + 376948) [0x102668074]
1 -[TXLivePush sendCustomPCMData:len:] (TXLivePush.mm:197 in LABroadcastUpload + 1895364) [0x1027dabc4]
1 -[TXLivePushSingleton sendCustomPCMData:len:] (TXLivePushSingleton.mm:1508 in LABroadcastUpload + 1862324) [0x1027d2ab4]
1 +[TXRtmpApi sendAudioWithPCM:len:customMode:isMute:] (TXRTMPAPI.mm:800 in LABroadcastUpload + 2942868) [0x1028da794]
1 CTXRtmpSdkPublish::SendPCMData (RTMPSDKPublish.cpp:680) (RTMPSDKPublish.cpp:680 in LABroadcastUpload + 1699412) [0x1027aae54]
1 CTXRtmpSdkPublish::SendPCMDataInternal (RTMPSDKPublish.cpp:717) (RTMPSDKPublish.cpp:717 in LABroadcastUpload + 1699680) [0x1027aaf60]
1 CTXAudioEncProcessModel::ConvertPCM2AAC (AudioEncProcessModel.cpp:334) (AudioEncProcessModel.cpp:334 in LABroadcastUpload + 2992800) [0x1028e6aa0]
1 CTXHWAudioEncoder::ConvertPCM2AAC (HWAudioEncoder.mm:217) (HWAudioEncoder.mm:217 in LABroadcastUpload + 1253684) [0x10273e134]
1 -[TXHWAudioEncoder encodeBuffer:length:] (HWAudioEncoder.mm:66 in LABroadcastUpload + 1250232) [0x10273d3b8]
1 AudioConverterFillComplexBuffer + 1047 (AudioToolbox + 3341464) [0x18a206c98]
1 BufferedAudioConverter::FillBuffer + 799 (AudioToolbox + 1166536) [0x189ff3cc8]
1 AudioConverterChain::RenderOutput + 119 (AudioToolbox + 1312348) [0x18a01765c]
1 CodecConverter::EncoderFillBuffer + 2103 (AudioToolbox + 2249648) [0x18a0fc3b0]
1 ProduceOutputPackets + 27 (AudioCodecs + 30440) [0x1a59936e8]
1 ACMP4AACBaseEncoder::ProduceOutputPackets + 239 (AudioCodecs + 902992) [0x1a5a68750]
1 AACEncoder::EncodeFrame + 487 (AudioCodecs + 447852) [0x1a59f956c]
1 AACPsychoacoustic + 119 (AudioCodecs + 677008) [0x1a5a31490]
1 AdvancePsychoacoustic + 2631 (AudioCodecs + 591376) [0x1a5a1c610]
1 pamMonaural + 3115 (AudioCodecs + 348768) [0x1a59e1260]
1 log10ApproxVect_Neon + 35 (AudioCodecs + 431044) [0x1a59f53c4]
1 log10ApproxVect_Neon_sub + 108 (AudioCodecs + 1190172) [0x1a5aae91c]
4 -[TXLivePushSingleton sampleBufferLoopFun:] (TXLivePushSingleton.mm:1829 in LABroadcastUpload + 1872652) [0x1027d530c]
4 -[TXLivePushSingleton sendCustomSampleBufferInternal:] (TXLivePushSingleton.mm:2004 in LABroadcastUpload + 1876740) [0x1027d6304]
2 tx_NV12ToI420Rotate (rotate.cc:527 in LABroadcastUpload + 1248624) [0x10273cd70]
2 tx_RotatePlane270 (rotate.cc:130 in LABroadcastUpload + 1245332) [0x10273c094]
2 tx_TransposeWx8_NEON (rotate_neon64.cc:34 in LABroadcastUpload + 2792160) [0x1028b5ae0]
2 tx_NV12ToI420Rotate (rotate.cc:528 in LABroadcastUpload + 1248660) [0x10273cd94]
2 tx_RotateUV270 (rotate.cc:332 in LABroadcastUpload + 1246448) [0x10273c4f0]
2 tx_TransposeUVWx8_NEON (rotate_neon64.cc:266 in LABroadcastUpload + 2792616) [0x1028b5ca8]
3 -[LAAudioMix mixAudioLoop:] (LAAudioMix.m:205 in LABroadcastUpload + 277924) [0x10264fda4]
3 -[LAExLogger addOneLog:inFile:function:line:module:message:] (LAExLogger.m:115 in LABroadcastUpload + 77892) [0x10261f044]
2 -[LAExLogger addOneLog:inFile:function:line:module:fullMessage:] (LAExLogger.m:143 in LABroadcastUpload + 78616) [0x10261f318]
2 +[NSString stringWithFormat:] + 67 (Foundation + 10420) [0x186e448b4]
2 _CFStringCreateWithFormatAndArgumentsAux2 + 131 (CoreFoundation + 1054296) [0x18651f658]
2 __CFStringAppendFormatCore + 10771 (CoreFoundation + 1049548) [0x18651e3cc]
2 snprintf_l + 27 (libsystem_c.dylib + 9996) [0x185f8870c]
2 _platform_memset + 0 (libsystem_platform.dylib + 7680) [0x186181e00]
1 -[LAExLogger addOneLog:inFile:function:line:module:fullMessage:] (LAExLogger.m:161 in LABroadcastUpload + 78664) [0x10261f348]
1 NSLog + 31 (Foundation + 73876) [0x186e54094]
1 _NSLogv + 127 (Foundation + 972068) [0x186f2f524]
1 _CFLogvEx3 + 187 (CoreFoundation + 1239376) [0x18654c950]
1 _os_log_with_args_impl + 387 (libsystem_trace.dylib + 63096) [0x1861b5678]
1 _os_log_impl_flatten_and_send + 2787 (libsystem_trace.dylib + 56588) [0x1861b3d0c]
1 _os_log_impl_stream + 259 (libsystem_trace.dylib + 61120) [0x1861b4ec0]
1 _os_activity_stream_reflect + 531 (libsystem_trace.dylib + 9596) [0x1861a857c]
1 _xpc_dispose + 27 (libxpc.dylib + 10112) [0x1861c3780]
1 _xpc_dictionary_dispose + 43 (libxpc.dylib + 10184) [0x1861c37c8]
1 _xpc_dictionary_node_free + 71 (libxpc.dylib + 10424) [0x1861c38b8]
1 object_dispose + 15 (libobjc.A.dylib + 83600) [0x185a80690]
1 objc_destructInstance + 99 (libobjc.A.dylib + 83524) [0x185a80644]
1 _object_remove_assocations + 76 (libobjc.A.dylib + 105308) [0x185a85b5c]
3 -[LAAudioMix mixAudioLoop:] (LAAudioMix.m:209 in LABroadcastUpload + 278004) [0x10264fdf4]
二、Crash分析
该Crash是因为线程调度太频繁导致,推流以及编码SDK中为了稳定帧率,通常会启动一个线程,进入一个while循环,循环中通过sleep一定的时间实现每秒钟稳定在一定的帧率处理音视频数据。
通常移动端视频数据处理FPS不超过30,音频不超过42(跟音频的采样率有关系),iOS每秒中线程唤醒的次数不能超过150,按道理这个数据没有超过啊,是为什么呢、?
5 -[LAAudioMix mixAudioLoop:] (LAAudioMix.m:174 in LABroadcastUpload + 276808) [0x10264f948]
4 -[LAUploadManager pushCustomPCMData:len:] (LAUploadManager.m:164 in LABroadcastUpload + 157864) [0x1026328a8]
4 -[LAExLogger addOneLog:inFile:function:line:module:message:] (LAExLogger.m:115 in LABroadcastUpload + 77892) [0x10261f044]
2 -[LAExLogger addOneLog:inFile:function:line:module:fullMessage:] (LAExLogger.m:143 in LABroadcastUpload + 78616) [0x10261f318]
2 +[NSString stringWithFormat:] + 67 (Foundation + 10420) [0x186e448b4]
2 _CFStringCreateWithFormatAndArgumentsAux2 + 131 (CoreFoundation + 1054296) [0x18651f658]
2 __CFStringAppendFormatCore + 9436 (CoreFoundation + 1048212) [0x18651de94]
2 -[LAExLogger addOneLog:inFile:function:line:module:fullMessage:] (LAExLogger.m:161 in LABroadcastUpload + 78664) [0x10261f348]
2 NSLog + 31 (Foundation + 73876) [0x186e54094]
2 _NSLogv + 127 (Foundation + 972068) [0x186f2f524]
2 _CFLogvEx3 + 227 (CoreFoundation + 1239416) [0x18654c978]
2 __proc_info + 8 (libsystem_kernel.dylib + 135252) [0x186079054]
2 <Kernel mode>
观察crash中的堆栈,发现一个现象,堆栈的最上层都是while循环中的,最下层一般因为NSLog进入到了内核态
这里猜测应该是因为由用户态进入内核态,一次系统调用过程中,用户线程被休眠,系统调用结果返回时又回到用户线程,用户线程被唤醒
因此在高频的循环中,要注意关键、耗时的方法调用,同时也要注意多线程下面访问一些变量
音视频积累-Wakeups 解决的更多相关文章
- 音视频技术 即时通讯SDK
视频流中的DTS/PTS究竟是什么? DTS(解码时间戳)和PTS(显示时间戳)各自是解码器进行解码和显示帧时相对于SCR(系统參考)的时间戳.SCR能够理解为解码器应该開始从磁盘读取数据时 ...
- Android Webview中解决H5的音视频不能自动播放的问题
在开发webview的时候,当加载有声音的网页的时候,声音不会自动播放, 解决方法:在webview中调用js方法.这个方法需要在webview的setWebViewClient方法之后在onPage ...
- moviepy音视频剪辑:headblur函数遇到的ValueError assignment destination is read-only问题及解决办法
☞ ░ 前往老猿Python博文目录 ░ 一.运行环境 运行环境如下: python版本:3.7 opencv-python版本:4.2.0.34 numpy版本:1.19.0 二.错误案例代码及报错 ...
- moviepy音视频剪辑:TextClip不支持中文字符以及OSError: magick.exe: unable to read font 仿宋_GB2312.ttf的解决办法
☞ ░ 前往老猿Python博文目录 ░ 一.引言 moviepy对中文和多语言环境的支持做得并不好,包括中文文件名以及用于显示文字的TextClip就是典型的中文支持方面存在问题的.对于编解码的问题 ...
- 声网 X 远程超声:实时音视频解决基层“看病难” 推动医疗资源均衡化
实时互联网像触角一样,通过情景的共享延伸开来,链接着我们彼此的线下.线上生活,形成一张不可分割的网络.随着社交直播.在线教育.视频会议成为大众生活不可或缺的一部分的同时,智能手表.智能作业灯.视频双录 ...
- moviepy音视频剪辑VideoClip类fl_image方法image_func报错ValueError: assignment destination is read-only解决办法
☞ ░ 前往老猿Python博文目录 ░ moviepy音视频剪辑模块的视频剪辑基类VideoClip的fl_image方法用于进行对剪辑帧数据进行变换. 调用语法:fl_image(self, im ...
- 帮你积累音视频知识,Agora 开发者漫游指南正式启航
"运气是设计的残留物."--John Milton 如果玩过<全面战争:中世纪 II>,或者读过 John Milton 书的人,可能对这句话有印象.我们发现,很多小伙 ...
- 腾讯技术分享:微信小程序音视频技术背后的故事
1.引言 微信小程序自2017年1月9日正式对外公布以来,越来越受到关注和重视,小程序上的各种技术体验也越来越丰富.而音视频作为高速移动网络时代下增长最快的应用形式之一,在微信小程序中也当然不能错过. ...
- 音视频前沿:新一代 AV1 视频标准究竟是怎样一种存在?
AV1是开放媒体联盟Alliance for Open Media (AOM) 开发的第一代视频编码标准,自推出以来获得了产业界巨大关注和支持.腾讯多媒体实验室也加入进来和其他公司团队一同积极推动AV ...
- Android音视频开发(1):H264 基本原理
前言 H264 视频压缩算法现在无疑是所有视频压缩技术中使用最广泛,最流行的.随着 x264/openh264 以及 ffmpeg 等开源库的推出,大多数使用者无需再对H264的细节做过多的研究,这大 ...
随机推荐
- 重新点亮shell————sed其他命令[十一]
前言 简单介绍一下其他增删查. 正文 删除命令: 例子: 插入和更改: 例子i: 例子c: 读文件和写文件: 例子r: 下一行命令: 打印: 例子: 只想输出匹配的行: 退出命令: 前面的运行效率更高 ...
- redis 简单整理——慢查询[八]
前言 简单整理一下redis的慢查询. 正文 什么是慢查询呢? 一般存储系统就是系统在命令执行前后计算每条命令的执行时间,当超出预设阀值,就将这条命令的相关信息记录下来. 但是有人可能没有看到慢查询日 ...
- 【笔记】join using&AVG
oracle using 在oracle中,using用于简化连接查询,只有当查询是等值连接和连接中的列必须具有相同的名称与数据类型时,才能使用using关键字进行简化 比如原来是 select s. ...
- 【阿里云采购季】3月采购完,IT运维躺赢一年
阿里云2020上云采购季正式上线啦!今年的采购季可以逛些啥? 采购季正式期时间: 3月2日-3月31日 在这段时间里,想买啥就买吧,别忘了把想买的产品加入购物车噢,特惠产品叠加购物车满减,更划算噢! ...
- 一看即会:Serverless 应用开发的 7 个实战小技巧
简介:干货满满,马住收藏! Serverless 应用开发的 7 个经验心得 作者说:Serverless 架构下的应用开发,与传统架构的应用开发还是有比较大的区别点的,例如天然分布式架构会让很 ...
- Dataphin产品核心功能大图(六)发布中心:生产和开发隔离模式下的保护伞
简介:Dataphin,用中台方法论打造企业级好数据.Dataphin是阿里巴巴集团OneData数据治理方法论内部实践的云化输出,一站式提供数据采.建.管.用全生命周期的大数据能力,以助力企业显著 ...
- 配置审计(Config)变配报警设置
简介: 本文作者[紫极zj],本篇将主要介绍通过配置审计的自定义规则等服务,对负载均衡进行预警行为的相关介绍. 前言 配置审计(Config)将您分散在各地域的资源整合为全局资源列表,可便捷地搜索全局 ...
- 技术解析:一文看懂 Anolis OS 国密生态 | 龙蜥专场
简介: Anolis OS国密是社区在Anolis OS上做的国密技术解决方案. 编者注:本文系两位演讲者整理,他们在2021年阿里云开发者大会的「开源操作系统社区和生态分论坛」上带了分享,演讲主 ...
- Snowflake如日中天是否代表Hadoop已死?大数据体系到底是什么?
简介: 本文作者关涛是大数据系统领域的资深专家,在微软(互联网/Azure云事业群)和阿里巴巴(阿里云)经历了大数据发展20年过程中的后15年.本文试从系统架构的角度,就大数据架构热点,每条技术线的 ...
- Quick BI V4.0功能“炸弹”来袭,重磅推出即席分析、模板市场、企业微信免密登录等强势功能
简介: 2021年7月,Quick BI公共云版本迭代新功能:重磅推出即席分析.模板市场,分析门槛再降低:推出企业微信无缝对接,移动端类目个性配置及管理提升多端能力:数据建模配置交互升级至拖拽模式提升 ...