iOS: 如何拦截和操作AVPlayer中的字节
iOS: How to intercept and manipulate bytes in AVPlayer
有没有办法在AVPlayer播放音频之前截取字节数据并对每个字节进行异或运算?
我正在构建一个音频流应用程序,并使用一个用 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 中逆向异或加密相当容易,因为我使用 ExoPlayer 并覆盖其数据源中的 read() 方法 类。
有没有机会使用带有 Swift 的 AVPlayer 执行相同的操作?
这是整个想法的流程图:
AVPlayer encryption flowchart
谢谢。
您需要为此使用 MTAudioProcessingTap
,它是 AVPlayer
的 AVAudioMix
的 属性。在您的点击过程回调中,使用 MTAudioProcessingTapGetSourceAudio
来获取您的缓冲区。获得缓冲区引用后,您可以对数据进行异或运算。
需要一些样板文件才能正确设置 AVAudioMix
和 MTAudioProcessingTap
。 Apple 的示例代码很旧,但仍然可以使用。
https://developer.apple.com/library/archive/samplecode/AudioTapProcessor/Introduction/Intro.html#//apple_ref/doc/uid/DTS40012324
另请注意,出于多种原因,在 Objective C 中执行此操作会更容易。与您的 C 文件的互操作会更容易,并且更直接 reading/writing 到 Objc 中的缓冲区。它也将 运行 比 swift 更快。如果您有兴趣查看 swift 中的样子,这里有一个示例项目:
https://github.com/gchilds/MTAudioProcessingTap-in-Swift
有没有办法在AVPlayer播放音频之前截取字节数据并对每个字节进行异或运算?
我正在构建一个音频流应用程序,并使用一个用 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 中逆向异或加密相当容易,因为我使用 ExoPlayer 并覆盖其数据源中的 read() 方法 类。 有没有机会使用带有 Swift 的 AVPlayer 执行相同的操作?
这是整个想法的流程图:
AVPlayer encryption flowchart
谢谢。
您需要为此使用 MTAudioProcessingTap
,它是 AVPlayer
的 AVAudioMix
的 属性。在您的点击过程回调中,使用 MTAudioProcessingTapGetSourceAudio
来获取您的缓冲区。获得缓冲区引用后,您可以对数据进行异或运算。
需要一些样板文件才能正确设置 AVAudioMix
和 MTAudioProcessingTap
。 Apple 的示例代码很旧,但仍然可以使用。
https://developer.apple.com/library/archive/samplecode/AudioTapProcessor/Introduction/Intro.html#//apple_ref/doc/uid/DTS40012324
另请注意,出于多种原因,在 Objective C 中执行此操作会更容易。与您的 C 文件的互操作会更容易,并且更直接 reading/writing 到 Objc 中的缓冲区。它也将 运行 比 swift 更快。如果您有兴趣查看 swift 中的样子,这里有一个示例项目: https://github.com/gchilds/MTAudioProcessingTap-in-Swift