Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Audiotoolbox API AudioConvertNewSpecific在转换为G711u而不是目标C中的AAC时返回错误的输出数据包大小_Objective C_Audiotoolbox - Fatal编程技术网

Objective c Audiotoolbox API AudioConvertNewSpecific在转换为G711u而不是目标C中的AAC时返回错误的输出数据包大小

Objective c Audiotoolbox API AudioConvertNewSpecific在转换为G711u而不是目标C中的AAC时返回错误的输出数据包大小,objective-c,audiotoolbox,Objective C,Audiotoolbox,我正在尝试使用音频工具箱将原始PCM缓冲区转换为IOS中的G711u编解码器。我看到许多代码示例使用相同的代码和API为AAC编解码器工作。但是当我尝试为PCMU工作时,它就不起作用了。AudioConverter的设置没有错误,但当我尝试在AudioConverterGetProperty中查询输出数据包大小时,它返回的值为2,这对我来说似乎是错误的,因为当我对AAC编解码器使用相同的代码时,它返回的输出数据包大小为600。下面我粘贴了我的代码,并提前感谢您在这方面的帮助 ====源代码===

我正在尝试使用音频工具箱将原始PCM缓冲区转换为IOS中的G711u编解码器。我看到许多代码示例使用相同的代码和API为AAC编解码器工作。但是当我尝试为PCMU工作时,它就不起作用了。AudioConverter的设置没有错误,但当我尝试在AudioConverterGetProperty中查询输出数据包大小时,它返回的值为2,这对我来说似乎是错误的,因为当我对AAC编解码器使用相同的代码时,它返回的输出数据包大小为600。下面我粘贴了我的代码,并提前感谢您在这方面的帮助

====源代码===========

OSStatus result = 0;
    AudioStreamBasicDescription in = {0}, out = {0};

    in.mSampleRate = frequencyInHz;
    in.mChannelsPerFrame = channelCount;
    in.mBitsPerChannel = 16;
    in.mFormatFlags =  kAudioFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked;
    in.mFormatID = kAudioFormatLinearPCM;
    in.mFramesPerPacket = 1;
    in.mBytesPerFrame = in.mBitsPerChannel * in.mChannelsPerFrame / 8;
    in.mBytesPerPacket = in.mFramesPerPacket*in.mBytesPerFrame;

    m_in = in;

    out.mFormatID = kAudioFormatULaw;
    out.mFormatFlags = 0;
    out.mFramesPerPacket = kSamplesPerFrame;
    out.mSampleRate = frequencyInHz;
    out.mChannelsPerFrame = channelCount;

    m_out = out;

    UInt32 outputBitrate = bitrate;
    UInt32 propSize = sizeof(outputBitrate);
    UInt32 outputPacketSize = 1024;

    const OSType subtype = kAudioFormatULaw;
    AudioClassDescription requestedCodecs[2] = {
        {
            kAudioEncoderComponentType,
            subtype,
            kAppleSoftwareAudioCodecManufacturer
        },
        {
            kAudioEncoderComponentType,
            subtype,
            kAppleHardwareAudioCodecManufacturer
        }
    };

    result = AudioConverterNewSpecific(&in, &out, 2, requestedCodecs, &m_audioConverter);
    if(result !=0) {
        DLog("Error AudioConverterNewSpecific %x \n", (int)result);

    }

    result = AudioConverterSetProperty(m_audioConverter, kAudioConverterEncodeBitRate, propSize, &outputBitrate);
    if(result !=0) {
        DLog("Error AudioConverterSetProperty %x \n", (int)result);
     }

    result = AudioConverterGetProperty(m_audioConverter, kAudioConverterPropertyMaximumOutputPacketSize, &propSize, &outputPacketSize);
    if(result !=0) {
        DLog("Error AudioConverterGetProperty %x \n", (int)result);

    }
    DLog("The output packet size is %x \n", (int)outputPacketSize);
=======输出============

OSStatus result = 0;
    AudioStreamBasicDescription in = {0}, out = {0};

    in.mSampleRate = frequencyInHz;
    in.mChannelsPerFrame = channelCount;
    in.mBitsPerChannel = 16;
    in.mFormatFlags =  kAudioFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked;
    in.mFormatID = kAudioFormatLinearPCM;
    in.mFramesPerPacket = 1;
    in.mBytesPerFrame = in.mBitsPerChannel * in.mChannelsPerFrame / 8;
    in.mBytesPerPacket = in.mFramesPerPacket*in.mBytesPerFrame;

    m_in = in;

    out.mFormatID = kAudioFormatULaw;
    out.mFormatFlags = 0;
    out.mFramesPerPacket = kSamplesPerFrame;
    out.mSampleRate = frequencyInHz;
    out.mChannelsPerFrame = channelCount;

    m_out = out;

    UInt32 outputBitrate = bitrate;
    UInt32 propSize = sizeof(outputBitrate);
    UInt32 outputPacketSize = 1024;

    const OSType subtype = kAudioFormatULaw;
    AudioClassDescription requestedCodecs[2] = {
        {
            kAudioEncoderComponentType,
            subtype,
            kAppleSoftwareAudioCodecManufacturer
        },
        {
            kAudioEncoderComponentType,
            subtype,
            kAppleHardwareAudioCodecManufacturer
        }
    };

    result = AudioConverterNewSpecific(&in, &out, 2, requestedCodecs, &m_audioConverter);
    if(result !=0) {
        DLog("Error AudioConverterNewSpecific %x \n", (int)result);

    }

    result = AudioConverterSetProperty(m_audioConverter, kAudioConverterEncodeBitRate, propSize, &outputBitrate);
    if(result !=0) {
        DLog("Error AudioConverterSetProperty %x \n", (int)result);
     }

    result = AudioConverterGetProperty(m_audioConverter, kAudioConverterPropertyMaximumOutputPacketSize, &propSize, &outputPacketSize);
    if(result !=0) {
        DLog("Error AudioConverterGetProperty %x \n", (int)result);

    }
    DLog("The output packet size is %x \n", (int)outputPacketSize);
错误AudioConverterSetProperty 70726f70

输出数据包大小为2


问题是输出数据包大小返回到2,当我尝试使用编码器时,它会为每个调用提供2字节的输出。我认为我们没有收到正确的输出数据包大小。如何更正?

是否有人使用AudioToolBox AudioConverter特定API将原始PCM帧转换为PMCU/PCMA编解码器。我想通过上面的代码实现同样的效果,因为到目前为止还没有响应,所以我很困惑我是否在正确的路径上。是否有人使用AudioToolBox AudioConverterNewSpecific API将原始PCM帧转换为PMCU/PCMA编解码器。我想通过上面的代码实现同样的事情,因为到目前为止还并没有对它的响应,所以若我在正确的路径上或并没有,我会感到困惑。