我正在制作和应用程序来传输音频到接收服务器。我想要编码音频缓冲区,以便流。我创建了一个类来存储这个缓冲区和其他一些信息。当我对主对象编码后对数据进行解码时,这两个对象具有不同的音频缓冲区。
因此得出的结论是,我在编码/解码上犯了一个错误。下面是我编码缓冲区的代码
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeBytes:&_data length:sizeof(float *)];
[aCoder encodeInt:_numFrames forKey:numFrames];
[aCoder encodeInt:_numChannels forKey:numChannels];
}注释 _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);
}发布于 2013-10-02 02:19:54
不确定,但当您编码_data时,您不会给它一个键:
[aCoder encodeBytes:&_data length:sizeof(float *)];当您解码_data时,使用密钥data
const uint8_t *buffer = [aDecoder decodeBytesForKey:data returnedLength:&length];也许您需要一个版本的encodeBytes,它也需要一个键
encodeBytes:length:forKey:https://stackoverflow.com/questions/19128935
复制相似问题