Аудио сэмплбуфер данных, а затем обратно к аудио сэмплебуфер - PullRequest
0 голосов
/ 04 марта 2019

Я делаю шумоподавление в режиме реального времени при записи видео.Я получаю аудио выборочный буфер из -captureOutput: didOutputSampleBuffer: fromConnection: обратный вызов делегата AVCapture.Процесс ns: samplebuffer-> char * -> ns -> char * -> samplebuffer.Я застрял на последнем шаге.Я получил сообщение об ошибке:

CMSampleBufferSetDataBufferFromAudioBufferList kCMSampleBufferError_RequiredParameterMissing = -12731.

Подробный процесс последнего шага выглядит следующим образом: I 1008 * 100 *видел следующие ссылки, но они не работают.

ошибка преобразования AudioBufferList в CMBlockBufferRef

Преобразование AudioBufferList в CMSampleBuffer приводит к неожиданным результатам

CMSampleBufferSetDataBufferFromAudioBufferList возвращает ошибку 12731

Как преобразовать AudioBufferList в CMSampleBuffer?

Их источником аудиоданных является AudioUnit, ноИсточник AVCapture.Исходя из предположения, что источником данных является AudioUnit, все в порядке, если установить TimingInfo как следующий код:

struct mach_timebase_info tinfo;
kern_return_t err =mach_timebase_info( &tinfo );
uint32_t hostTimeToNSFactor = tinfo.numer / tinfo.denom;
uint64_t timeNS = (uint64_t)(hostTime * hostTimeToNSFactor);
CMTime presentationTime = CMTimeMake(timeNS, 1000000000);
CMSampleTimingInfo timing = { CMTimeMake(1, 44100.00), presentationTime, kCMTimeInvalid };

Но я не могу получить AudioTimeStamp.hostTime в CMSamplebuffer.Может кто-нибудь сказать мне, как получить hostTime в CMSampulebuffer или другие методы для решения проблемы -12731.

Ниже приведены данные исходного Samplebuffer:

Printing description of originalSampleBuffer:
CMSampleBuffer 0x102064500 retainCount: 1 allocator: 0x1b7085610
    invalid = NO
    dataReady = YES
    makeDataReadyCallback = 0x0
    makeDataReadyRefcon = 0x0
    formatDescription = <CMAudioFormatDescription 0x281e819e0 [0x1b7085610]> {
    mediaType:'soun' 
    mediaSubType:'lpcm' 
    mediaSpecific: {
        ASBD: {
            mSampleRate: 44100.000000 
            mFormatID: 'lpcm' 
            mFormatFlags: 0xc 
            mBytesPerPacket: 2 
            mFramesPerPacket: 1 
            mBytesPerFrame: 2 
            mChannelsPerFrame: 1 
            mBitsPerChannel: 16     } 
        cookie: {(null)} 
        ACL: {Mono}
        FormatList Array: {(null)} 
    } 
    extensions: {(null)}
}
    sbufToTrackReadiness = 0x0
    numSamples = 1024
    sampleTimingArray[1] = {
        {PTS = {31931558330/44100 = 724071.617, rounded}, DTS = {INVALID}, duration = {1/44100 = 0.000}},
    }
    sampleSizeArray[1] = {
        sampleSize = 2,
    }
    dataBuffer = 0x281e88f30

, а следующеечто я преобразовал:

Printing description of audioSampleBuffer:
CMSampleBuffer 0x102167540 retainCount: 1 allocator: 0x1b7085610
    invalid = NO
    dataReady = NO
    makeDataReadyCallback = 0x0
    makeDataReadyRefcon = 0x0
    formatDescription = <CMAudioFormatDescription 0x281e97f00 [0x1b7085610]> {
    mediaType:'soun' 
    mediaSubType:'lpcm' 
    mediaSpecific: {
        ASBD: {
            mSampleRate: 44100.000000 
            mFormatID: 'lpcm' 
            mFormatFlags: 0xc 
            mBytesPerPacket: 2 
            mFramesPerPacket: 1 
            mBytesPerFrame: 2 
            mChannelsPerFrame: 1 
            mBitsPerChannel: 16     } 
        cookie: {(null)} 
        ACL: {(null)}
        FormatList Array: {(null)} 
    } 
    extensions: {(null)}
}
    sbufToTrackReadiness = 0x0
    numSamples = 1024
    sampleTimingArray[1] = {
        {PTS = {31931558330/44100 = 724071.617, rounded}, DTS = {INVALID}, duration = {1/44100 = 0.000}},
    }
    dataBuffer = 0x0

Я новичок в аудио и видео, я надеюсь, что кто-то может мне помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...