【问题标题】:How to convert CMSampleBufferRef to NSData如何将 CMSampleBufferRef 转换为 NSData
【发布时间】:2011-12-18 18:54:16
【问题描述】:

如何将 CMSampleBufferRef 转换为 NSData?

按照 Erik Aigner 在this thread 上的回答,我设法获取了MPMediaItem 的数据,但是数据的类型为CMSampleBufferRef

我知道 CMSampleBufferRef 是一个结构,并在 iOS 开发库的 CMSampleBuffer Reference 中定义,但我认为我并不完全理解它是什么。 CMSampleBuffer 函数似乎都不是一个明显的解决方案。

【问题讨论】:

    标签: objective-c ios nsdata cmsamplebufferref


    【解决方案1】:

    这适用于您正在查看的音频样本缓冲区,如果您想查看整个过程(将所有音频数据从 MPMediaItem 获取到文件中,请查看 this 问题

    CMSampleBufferRef ref=[output copyNextSampleBuffer];
            // NSLog(@"%@",ref);
            if(ref==NULL)
                break;
            //copy data to file
            //read next one
            AudioBufferList audioBufferList;
            NSMutableData *data=[[NSMutableData alloc] init];
            CMBlockBufferRef blockBuffer;
            CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(ref, NULL, &audioBufferList, sizeof(audioBufferList), NULL, NULL, 0, &blockBuffer);
            // NSLog(@"%@",blockBuffer);
    
    
    
            for( int y=0; y<audioBufferList.mNumberBuffers; y++ )
            {
                AudioBuffer audioBuffer = audioBufferList.mBuffers[y];
                Float32 *frame = (Float32*)audioBuffer.mData;
    
    
                [data appendBytes:frame length:audioBuffer.mDataByteSize];
    
    
    
            }
    
    
            CFRelease(blockBuffer);
            CFRelease(ref);
            ref=NULL;
            blockBuffer=NULL;
            [data release];
    

    【讨论】:

    • 非常感谢丹尼尔!像魅力一样工作:)
    • 我还是有点迷茫,对这些东西很菜鸟。 '输出'定义是什么?
    • @jangelo42 检查我在第二行提供的链接(它是一个完整的解决方案,而不仅仅是一个片段),输出是 AVAssetReaderOutput
    • 如何将视频样本转换为NSData
    • @prabhu 它在 for 循环中这样做
    猜你喜欢
    • 2011-04-14
    • 2013-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 2010-11-20
    • 2015-06-13
    相关资源
    最近更新 更多