Objective-c iOS中如何将字节数组拆分并小包发送?

问题描述 投票:0回答:1

如何在iOS中拆分byteArray 我得到160个长度的arrayByte数据,我需要将其拆分成4部分,每部分包含40个arrayByte,我需要将这些数据复制并用于解码,我试着将其转换,但它不起作用,有人能帮我吗?

最后,我得到了解决方案以下是更新的工作代码

-(NSMutableData*)decodeOpusData:(NSData*)data
{
    NSMutableData *audioData = [[NSMutableData alloc] init];
    for (NSUInteger i = 0; i < 4; i ++)
    {
        int bufferLength = 40;
        if([data length]>= 40){
        NSData *subData = [data subdataWithRange:NSMakeRange(i*bufferLength, bufferLength)];
        Byte *byteData = (Byte*)malloc(sizeof(Byte)*bufferLength);
        memcpy(byteData, [subData bytes], bufferLength);
        //You can do anything here with data..........
        //Below iam decoding audio data using OPUS library
        short decodedBuffer[WB_FRAME_SIZE];
        int nDecodedByte = sizeof(short) * [self decode:byteData length:bufferLength output:decodedBuffer];
        NSData *PCMData = [NSData dataWithBytes:(Byte *)decodedBuffer length:nDecodedByte ];
        [audioData appendData:PCMData];
        //Decoding audio data using OPUS library
        }
    }
    return audioData;
}

下面的代码是安卓的,我想这样做。

ArrayByte  length = 160
BUFFER_LENGTH = 40

public fun opusDataDecoder(data:ByteArray){
     for (i in 0..3){
        val byteArray = ByteArray(BUFFER_LENGTH)
        System.arraycopy(data,i * BUFFER_LENGTH,byteArray,0, BUFFER_LENGTH)  //BUFFER_LENGTH = 40
        val decodeBufferArray = ShortArray(byteArray.size * 8)  // decodeBufferArray = 320                             
        val size = tntOpusUtils.decode(decoderHandler, byteArray, decodeBufferArray)
           if (size > 0) {
                 val decodeArray = ShortArray(size)
                 System.arraycopy(decodeBufferArray, 0, decodeArray, 0, size)
                 opusDecode(decodeArray)
                 } else {
                   Log.e(TAG, "opusDecode error : $size")
                }
         }
 }

我只得到前40个字节...我想先得到0-40个字节,然后是40-80个字节,然后是80-120字节,然后是120-160字节...但这里我得到的总是40个字节...。

有人能帮我解决这个问题吗?

ios arrays objective-c byte
1个回答
0
投票

最后,我得到了分割字节数组的解决方案,并将其分成小包发送。

以下是最新的工作代码。

-(NSMutableData*)decodeOpusData:(NSData*)data
{
    NSMutableData *audioData = [[NSMutableData alloc] init];
    for (NSUInteger i = 0; i < 4; i ++)
    {
        int bufferLength = 40;
        if([data length]>= 40){
        NSData *subData = [data subdataWithRange:NSMakeRange(i*bufferLength, bufferLength)];
        Byte *byteData = (Byte*)malloc(sizeof(Byte)*bufferLength);
        memcpy(byteData, [subData bytes], bufferLength);
        //You can do anything here with data..........
        //Below iam decoding audio data using OPUS library
        short decodedBuffer[WB_FRAME_SIZE];
        int nDecodedByte = sizeof(short) * [self decode:byteData length:bufferLength output:decodedBuffer];
        NSData *PCMData = [NSData dataWithBytes:(Byte *)decodedBuffer length:nDecodedByte ];
        [audioData appendData:PCMData];
        //Decoding audio data using OPUS library
        }
    }
    return audioData;
}
© www.soinside.com 2019 - 2024. All rights reserved.