美文网首页
6. 【视频采集实战】

6. 【视频采集实战】

作者: 东也_ | 来源:发表于2022-04-26 12:34 被阅读0次

1. 打开视频设备

  • 设置url,"0"表示使用摄像头,”1“表示录制桌面;
  • 需要设置分辨率、帧率、采样格式,每个设备支持的参数可能都不一样;

2. 将数据写入文件

  • 在从包里面取数据时候,要自己根据采样的格式计算正确的size,如yuv420 = 分辨率宽 x 分辨率高 x 1.5;

3. 实战代码

  • 打开设备
static AVFormatContext* open_device() {
    
    avdevice_register_all();
    
    AVFormatContext *ctx = NULL;
    AVDictionary *options = NULL;

    AVInputFormat *fmt = av_find_input_format("avfoundation");
    // 0 表示摄像头   1 表示录制桌面
    char *device_name = "0";
    // 设置分辨率
    av_dict_set(&options, "video_size", "640*480", 0);
    // 设置帧率
    av_dict_set(&options, "framerate", "29.97", 0);
    // 设置采样格式
    av_dict_set(&options, "pixel_format", "nv12", 0);
    
    
    int result = avformat_open_input(&ctx, device_name, fmt, &options);
    
    if (result < 0 ) {
        char error[1024];
        av_make_error_string(error, 1024, result);
        printf("打开设备失败:%s", error);
        return NULL;
    }
    isRecording = 1;
    
    return ctx;
    
}
  • 将采集的数据写入文件
void start_video_recorder(void) {
    
    AVFormatContext *fmt_ctx = NULL;
    fmt_ctx = open_device();
    if (!fmt_ctx) {
        goto __ERROR;
    }
    
    AVPacket *packet = NULL;
    packet = av_packet_alloc();
    if (!packet) {
        goto __ERROR;
    }
    char *path = "/Users/cunw/Desktop/learning/音视频学习/音视频文件/video_recoder.yuv";
    FILE *file = fopen(path, "wb+");
    
    int rst = 0;
    while (isRecording) {
        rst = av_read_frame(fmt_ctx, packet);
        if (rst == 0 && packet->size > 0) {
            printf("packet size is %d\n", packet->size);
            // 因为采样格式420 所以size = 640 * 480 * 1.5
            fwrite(packet->data, 640 * 480 * 1.5, 1, file);
            av_packet_unref(packet);
            
        } else if (rst == -EAGAIN) {
            av_usleep(1);
        }
    }
    
__ERROR:
    
    isRecording = 0;
    fflush(file);
    fclose(file);
    av_packet_free(&packet);
    avformat_close_input(&fmt_ctx);
}
  • 使用命令工具ffplay播放:ffplay -pixel_format nv12 -video_size 640x480 video_recoder.yuv

相关文章

  • 6. 【视频采集实战】

    1. 打开视频设备 设置url,"0"表示使用摄像头,”1“表示录制桌面; 需要设置分辨率、帧率、采样格式,每个设...

  • iOS视频采集实战(AVCaptureSession)

    需求:使用AVFoundation中的AVCaptureSession实现设置相机的分辨率,帧率(包括高帧率), ...

  • 视频侦查案例——北京明景科技

    1.视频侦查单兵 针对视频侦查实战出现场需求的整套视频采集装备,包含视频快速下载器、硬盘拷贝器、移动硬盘、手持...

  • iOS-音视屏采集

    概述 音视屏采集分音频采集和视频采集 在iOS中,可以同步采集音频和视频 采集的API在AVFoundation框...

  • iOS - 采集音视频及写入文件

    �音视频采集包括两部分:视频采集和音频采集。在iOS中可以同步采集视频与音频,通过系统框架AVFoundation...

  • 视频采集

    视频采集 相关类的介绍: [ ] AVCaptureDevice:硬件设备,包括麦克风、摄像头,通过该对象可以设置...

  • 视频采集

    采集步骤 导入框架相关API主要在AVFoundation框架中,因此需要先导入框架 创建捕捉会话(AVCaptu...

  • 视频采集

    视频录制 视频录制大体上有两种方式:UIImagePickerController方式和AVFoundation方...

  • 采集以及写入

    采集视频 概述 音视频采集是直播架构的第一环,是视频的来源其实视频的采集有多个应用场景:比如二维码开发 音视频采集...

  • iOS视频采集以及写入二

    概述 音视频采集包括两部分:视频采集音频采集 在iOS开发中,是可以同步采集视频&音频的,使用方式也非常简单 相关...

网友评论

      本文标题:6. 【视频采集实战】

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