美文网首页
音视频开发 - pcm、yuv、rgb数据存储

音视频开发 - pcm、yuv、rgb数据存储

作者: 铁头娃_e245 | 来源:发表于2019-08-08 23:04 被阅读0次

pcm数据流存储到.pcm音频文件

//数据源枚举
@interface AudioSample : NSObject
@property (nonatomic, assign) long dataPtr;
@property (nonatomic, assign) int numOfSamples;
@property (nonatomic, assign) int bytesPerSample;
@property (nonatomic, assign) int numOfChannels;
@property (nonatomic, assign) int samplesPerSec;
@end

//文件管理器
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/pcm/"];
    if (![[NSFileManager defaultManager] fileExistsAtPath:path]) {  //如果没有路径则创建
        [fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
    }
    
    NSString * dataPath = [path stringByAppendingPathComponent:@"pub_audio.pcm"];

    int bufferSize = audioSample.numOfSamples * audioSample.bytesPerSample * audioSample.numOfChannels;
    void *audioSampleBufferPtr = NULL;

    if(bufferSize) {
        audioSampleBufferPtr = malloc(bufferSize);
        if(audioSampleBufferPtr) {
            memcpy(audioSampleBufferPtr, (void *)audioSample.dataPtr, bufferSize);
        }
    }

    FILE *file = fopen([dataPath UTF8String], "ab");

    fwrite(audioSampleBufferPtr, 1, bufferSize, file);
    fclose(file);
    
    if (audioSampleBufferPtr) {
        free(audioSampleBufferPtr);
        audioSampleBufferPtr = NULL;
    }

yuv数据流存储到.yuv视频文件

      uint8_t *outputData = NULL;
      int32_t w = videoSample.width;
      int32_t h = videoSample.height;
      if (outputData == NULL) 
          outputData = (uint8_t*)malloc(w*h*3/2);
      }

      memcpy(outputData, (uint8_t*)videoSample.dataYPtr,w*h*3/2);
      memcpy(outputData + w*h, (uint8_t*)videoSample.dataUPtr, w*h/4);
      memcpy(outputData + w*h*5/4, (uint8_t*)videoSample.dataVPtr, w*h/4);

      fwrite(outputData, 1, w*h*3/2, file);
        
      if (outputData) {
          free(outputData);
          outputData = NULL;
      }

rgb数据存储为图片

            UIImage *image = [self imageFromRGBData:(void *)videoSample.dataPtr width:videoSample.width height:videoSample.height];
            NSString *filePath =[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/rgb.jpg"];
            NSData *data = UIImageJPEGRepresentation(image, 0.1);
            [data writeToFile:filePath atomically:YES];


- (UIImage *)imageFromRGBData:(void *)data width:(int)width height:(int)height {
    CGColorSpaceRef rgbSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(data, width, height, 8, width*4, rgbSpace, kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little );
    CGImageRef imageRef = CGBitmapContextCreateImage(context);
    CGContextRelease(context);
    UIImage *image = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);   
    return image;
    
}

相关文章

  • 音视频开发 - pcm、yuv、rgb数据存储

    pcm数据流存储到.pcm音频文件 yuv数据流存储到.yuv视频文件 rgb数据存储为图片

  • FFmpeg 入门-前置基础

    章节 像素存储格式 YUV & RGB I、B、P 帧 pts & dts 音视频开发技术可以做的事情 前言 在学...

  • 音视频基础

    音视频原始文件 采集的音频原始文件为PCM格式。 采集的视频原始文件为YUV/RGB格式。 由于采集的原始的音视频...

  • 音视频结构:带你深入理解YUV

    前言 在音视频开发中,RGB和YUV这些颜色空间估计大家都不会陌生。相对来说RGB比较容易理解,但是YUV的一些概...

  • FFmpeg笔记2——2.1结构体分析之AVFrame

    AVFrame结构体一般用于储存原始数据(即非压缩数据,例如对于视频来说YUV,RGB ,对于音频来说是PCM),...

  • Live-client-4-x264编译

    在音视频开发中,通常需要将颜色空间模型YUV、RGB数据编码成MPEG、H.26X系列的视频编码。 视频相关知识 ...

  • Android-OpenSL ES

    RGB、YUV这两个时图像原始格式PCM时声音的原始格式 Android 播放 PCM 有的方式 Java SDK...

  • FFmpeg - 播放YUV,视频帧格式转换

    播放YUV 定时读取YUV的视频帧 将YUV转换为RGB数据 用RGB数据生成CGimage 在view上绘制CG...

  • 2021-12-26 bmp图片格式

    yuv与RGB是色彩空间模型 bmp jpg是文件存储格式。 bmp格式数据:BMP文件存储数据时,图像的扫描方式...

  • 音视频处理

    音视频处理 数据采集。对于音频来说采集到的数据是PCM格式,对于视频数据采集的格式是YUV格式。 数据压缩编码。数...

网友评论

      本文标题:音视频开发 - pcm、yuv、rgb数据存储

      本文链接:https://www.haomeiwen.com/subject/tlbuqctx.html