有没有办法在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;
}
}
正如您在上面看到的,在Android中反转XOR加密非常容易,因为我使用ExoPlayer并在其数据源类中覆盖read()方法。 可以在Swift中使用AVPlayer来执行相同的事情吗?
这是整个想法的流程图:
谢谢。
答案 0 :(得分:2)
您将为此使用MTAudioProcessingTap
,这是AVPlayer
的{{1}}的属性。在点击过程回调中,使用AVAudioMix
获取缓冲区。一旦有了缓冲区引用,就可以对数据进行异或。
要正确设置MTAudioProcessingTapGetSourceAudio
和AVAudioMix
,需要一些样板。苹果公司拥有的示例代码已经很老了,但仍然可以使用。
https://developer.apple.com/library/archive/samplecode/AudioTapProcessor/Introduction/Intro.html#//apple_ref/doc/uid/DTS40012324
还要注意,出于多种原因,在目标C中执行此操作会更容易。与C文件的互操作将更容易,并且对Objc中的缓冲区的读/写更加直接。它还将比快速运行更快。如果您想快速了解一下,这里有一个示例项目: https://github.com/gchilds/MTAudioProcessingTap-in-Swift