我正在制作和应用程序将音频传输到接收服务器。我想对音频缓冲区进行编码以便进行流式传输。我做了一个类来存储这个缓冲区和其他一些信息。当我在对主对象编码后解码数据时,这两个对象有不同的音频缓冲区。
所以结论是我在编码/解码方面犯了一个错误。这是我编码缓冲区的代码
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeBytes:&_data length:sizeof(float *)];
[aCoder encodeInt:_numFrames forKey:numFrames];
[aCoder encodeInt:_numChannels forKey:numChannels];
}
NOTE _data
具有(float *)
c 数据类型
解码逻辑在这里
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super init];
if (self) {
NSUInteger length = 0;
{
const uint8_t *buffer = [aDecoder decodeBytesForKey:data returnedLength:&length];
assert(length);
memcpy(&_data, buffer, length);
}
_numFrames = [aDecoder decodeInt32ForKey:numFrames];
_numChannels = [aDecoder decodeInt32ForKey:numChannels];
}
return self;
}
我正在使用这种方法来比较它们是否相同
- (BOOL)isEqual:(id)object {
AudioPacket *compareObject = (AudioPacket *)object;
return (_data == compareObject.data && _numFrames == compareObject.numFrames && _numChannels == compareObject.numChannels);
}