Dar*_*tep 10 encryption avfoundation ios avplayer swift
有没有办法在AVPlayer中播放音频之前截取字节数据并对每个字节执行XOR操作?
我正在构建一个音频流应用程序,并使用一个用C编写的小脚本向MP3文件添加简单的加密层。在Android中,它会像这样实时解码:
@Override
public int read(byte[] buffer, int offset, int readLength) throws FileDataSourceException {
// ...
if (readLength == 1 && offset >= 1 && offset <= 123) {
buffer[offset] = (byte)(buffer[offset] ^ 11);
}
return bytesRead;
}
}
Run Code Online (Sandbox Code Playgroud)
正如您在上面看到的,在Android中反转XOR加密非常容易,因为我使用ExoPlayer并在其数据源类中覆盖read()方法。是否有机会在Swift中使用AVPlayer执行相同的操作?
这是整个想法的流程图:
谢谢。
您将需要使用MTAudioProcessingTap
它,这是AVPlayer
s 的属性AVAudioMix
。在您的点击过程回调中,使用MTAudioProcessingTapGetSourceAudio
来获取缓冲区。一旦获得缓冲区引用,您就可以对数据进行异或。
需要一些样板才能正确安装AVAudioMix
和MTAudioProcessingTap
设置。Apple 提供的示例代码相当旧,但仍然应该可以工作。
https://developer.apple.com/library/archive/samplecode/AudioTapProcessor/Introduction/Intro.html#//apple_ref/doc/uid/DTS40012324
另请注意,由于多种原因,在 Objective C 中执行此操作会更容易。与 C 文件的互操作将更加容易,并且在 Objc 中读取/写入缓冲区也更加简单。它也会比 swift 运行得更快。如果您有兴趣看看这在 swift 中是什么样子,这里有一个示例项目: https: //github.com/gchilds/MTAudioProcessingTap-in-Swift