iOS 后台录音Tweak实现参考--stackoverflow

up vote 9down voteaccepted
+50

"Audio Recorder" is indeed a very simple tweak. The author tried to obfuscate important parts of his tweak (which function is being hooked), but here is what I found.

Tweak basically hooks just one function - AudioConverterConvertComplexBuffer from AudioToolbox.framework. Tweak is loaded in mediaserverd daemon at startup.

First, we need to find out when we should start recording because AudioConverterConvertComplexBuffer is called even when you just playing regular audio files. To achieve that tweak is listening to kCTCallStatusChangeNotification notification from CTTelephonyCenter.

Second, AudioConverterConvertComplexBuffer implementation. I didn't finished it yet so I will post what I have so far. Here is somewhat working example that will get you started.

Helper class to keep track of AudioConverterRef - ExtAudioFileRef pairs

@interface ConverterFile : NSObject @property (nonatomic, assign) AudioConverterRef converter; @property (nonatomic, assign) ExtAudioFileRef file; @property (nonatomic, assign) BOOL failedToOpenFile; @end @implementation ConverterFile @end

ConverterFile objects container

NSMutableArray* callConvertersFiles = [[NSMutableArray alloc] init];

AudioConverterConvertComplexBuffer original implementation

OSStatus(*AudioConverterConvertComplexBuffer_orig)(AudioConverterRef, UInt32, const AudioBufferList*, AudioBufferList*);

AudioConverterConvertComplexBuffer hook declaration

OSStatus AudioConverterConvertComplexBuffer_hook(AudioConverterRef inAudioConverter, UInt32 inNumberPCMFrames, const AudioBufferList *inInputData, AudioBufferList *outOutputData);

Hooking

MSHookFunction(AudioConverterConvertComplexBuffer, AudioConverterConvertComplexBuffer_hook, &AudioConverterConvertComplexBuffer_orig);

AudioConverterConvertComplexBuffer hook definition

OSStatus AudioConverterConvertComplexBuffer_hook(AudioConverterRef inAudioConverter, UInt32 inNumberPCMFrames, const AudioBufferList *inInputData, AudioBufferList *outOutputData) { //Searching for existing AudioConverterRef-ExtAudioFileRef pair __block ConverterFile* cf = nil; [callConvertersFiles enumerateObjectsUsingBlock:^(ConverterFile* obj, NSUInteger idx, BOOL *stop){ if (obj.converter == inAudioConverter) { cf = obj; *stop = YES; } }]; //Inserting new AudioConverterRef if (!cf) { cf = [[[ConverterFile alloc] init] autorelease]; cf.converter = inAudioConverter; [callConvertersFiles addObject:cf]; } //Opening new audio file if (!cf.file && !cf.failedToOpenFile) { //Obtaining input audio format AudioStreamBasicDescription desc; UInt32 descSize = sizeof(desc); AudioConverterGetProperty(cf.converter, kAudioConverterCurrentInputStreamDescription, &descSize, &desc); //Opening audio file CFURLRef url = CFURLCreateWithFileSystemPath(NULL, (CFStringRef)[NSString stringWithFormat:@"/var/mobile/Media/DCIM/Call%u.caf", [callConvertersFiles indexOfObject:cf]], kCFURLPOSIXPathStyle, false); ExtAudioFileRef audioFile = NULL; OSStatus result = ExtAudioFileCreateWithURL(url, kAudioFileCAFType, &desc, NULL, kAudioFileFlags_EraseFile, &audioFile); if (result != 0) { cf.failedToOpenFile =
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好,可能是由于您的系统缺少相关依赖或软件源配置不正确导致无法安装gnome-tweak-tool。建议您先检查系统依赖和软件源配置,然后再尝试安装。您可以尝试使用以下命令更新软件源并安装gnome-tweak-tool: sudo apt update sudo apt install gnome-tweak-tool 如果仍然无法安装,请提供更多详细信息,以便我们更好地帮助您解决问题。 ### 回答2: Gnome-tweak-tool是一个非常实用的GNOME桌面环境调整工具,它可以让用户更好的个性化自己的桌面。但是安装Gnome-tweak-tool可能会遇到一些问题,比如无法安装的情况。下面我将针对这个问题进行分析和解决。 首先,我们需要了解什么情况下会导致Gnome-tweak-tool无法安装。通常来说,这种情况的原因可能有以下几个: 1. 未添加正确的软件仓库源。如果用户没有添加正确的软件仓库源,那么在使用软件管理器安装Gnome-tweak-tool时就会出现无法找到包的情况。 2. 系统库依赖问题。有时候安装软件需要一些依赖库的支持,如果系统库中缺少这些依赖库,那么Gnome-tweak-tool安装不了也是正常的。 3. 系统权限问题。如果你使用的是非root权限用户,可能无法安装Gnome-tweak-tool。 4. Gnome-tweak-tool本身的问题。有时候Gnome-tweak-tool自身也会出现某些问题,导致无法安装。 以上是常见的一些原因,下面我将介绍几种解决方法。 1. 添加正确的软件仓库源。用户可以在软件包管理器中添加正确的软件仓库源,方法如下: 打开终端,输入以下命令: sudo add-apt-repository universe sudo apt-get update sudo apt-get install gnome-tweak-tool 这样安装就可以正常进行了。 2. 解决依赖库问题。如果Gnome-tweak-tool安装过程中由于缺少依赖库而安装失败,你可以使用以下命令来安装依赖库: sudo apt-get install libglib2.0-dev libgtk-3-dev libxml2-dev libgnome-desktop-3-dev libnautilus-extension-dev 安装完成后,再重新安装Gnome-tweak-tool即可。 3. 使用root权限。如果你是使用的非root权限用户,你可以试着使用root权限用户来安装和运行Gnome-tweak-tool。 4. 重新安装Gnome-tweak-tool。如果以上几种方法都无法解决问题,那么你可以尝试重新安装Gnome-tweak-tool。先删除旧版本的Gnome-tweak-tool: sudo apt-get remove gnome-tweak-tool 然后重新安装: sudo apt-get install gnome-tweak-tool 总而言之,Gnome-tweak-tool安装失败通常是由软件仓库源添加不正确、系统依赖库缺失或权限问题等原因引起的。我们需要根据实际情况选择合适的解决方法,进行尝试。 ### 回答3: Gnome-tweak-tool是一款用于调整GNOME桌面环境的工具,它可以让用户对桌面进行一些简单的设置和个性化调整,例如更改桌面壁纸、管理桌面字体、更改主题等。然而,有时我们在安装gnome-tweak-tool时会遇到一些困难,例如无法安装或安装失败的问题。 如果您遇到了无法安装gnome-tweak-tool的问题,那么您需要首先检查您的系统是否具有足够的软件库和源,并且您是否已启用相应的软件源。除此之外,您还可以尝试用命令行进行安装并查看是否出现错误信息。 如果您已经尝试了一切可以尝试的方法,但gnome-tweak-tool仍然无法安装,那么您可以考虑下载并手动安装gnome-tweak-tool的.deb包。您可以在官方网站或ubuntu软件中心中下载gnome-tweak-tool的.deb包,然后用软件包管理器进行手动安装。不过,在手动安装软件包之前,您需要先明确了解一些基本知识,以避免在安装过程中出现意外错误。 总之,如果您遇到了gnome-tweak-tool安装的问题,不要着急。您可以先检查您的系统设置和软件源,尝试用命令行进行安装并查看错误信息,或者手动下载并安装软件包。只要正确操作,并留意提示信息,您很快就能使用gnome-tweak-tool调整您的桌面环境了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值