linux下ffmpeg采集音视频设备

Linux下查看音视频设备

1、视频输入设备:
命令查看:ls /sys/class/video4linux/
执行结果如下:
链接文件
如果系统存在video4linux文件夹说明已安装过视频驱动,video4linux目录下每个链接文件代表一个视频设备
查看video0下有哪些文件:ls /sys/class/video4linux/video0
执行结果如下:
信息
读取name文件信息:USB 2.0 CAMERA 为video0视频设备的名称

2、音频输入设备:
命令查看音频输入设备:cat /proc/asound/cards
在这里插入图片描述
转载下:
https://blog.csdn.net/tang_chuanlin/article/details/86081102
https://www.cnblogs.com/rushoutasia/p/6409639.html

ffmpeg采集音视频设备

1、采集视频设备USB 2.0 CAMERA:

linux: is->filename="/dev/video0"
windows: is->filename="video=USB 2.0 CAMERA"
在这里插入图片描述
补充:

通过SDL2.0渲染YUV420p:

int rtp_playinit(){
    avdevice_register_all();
    av_register_all();
#if USED_NETWORK
    avformat_network_init();
#endif
    SDL_SetMainReady();
    if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER))
    {
        av_log(NULL, AV_LOG_FATAL, "Could not initialize SDL - %s\n", SDL_GetError());
#if USED_NETWORK
        avformat_network_deinit();
#endif
        return -1;
    }
    return 0;
}
static int sdl_window_init(rtpVideoState *is){
    int videoWidth=is->video_ctx->width;
    int videoHeight=is->video_ctx->height;
    int access=SDL_TEXTUREACCESS_STREAMING;//SDL_TEXTUREACCESS_STREAMING
    Uint32 format=SDL_PIXELFORMAT_YV12;
    if(is->hwnd==NULL){
        return -1;
    }
    is->sdl_Window=SDL_CreateWindowFrom(is->hwnd);
    if(is->sdl_Window){
        SDL_ShowWindow(is->sdl_Window);
        fprintf(stdout,"SDL_CreateWindow OK\n");
        fflush(stdout);
    }else{
        fprintf(stdout,"SDL_CreateWindow failed\n");
        fflush(stdout);
        return -1;
    }
    is->sdl_Render = SDL_CreateRenderer(is->sdl_Window,-1,0);
    if(is->sdl_Render==NULL){
        fprintf(stdout,"SDL_CreateRenderer: failed\n");
        fflush(stdout);
        return -1;
    }
    is->sdl_Texture = SDL_CreateTexture(is->sdl_Render, format, access,videoWidth,videoHeight);
    if(is->sdl_Texture==NULL){
        fprintf(stdout,"SDL_CreateTexture: failed\n");
        fflush(stdout);
        return -1;
    }
    return 0;
}
static void sdl_window_deinit(rtpVideoState *is){
    if(is->sdl_Texture){
        SDL_DestroyTexture(is->sdl_Texture);
        is->sdl_Texture=NULL;
    }
    if(is->sdl_Render){
        SDL_DestroyRenderer(is->sdl_Render);
        is->sdl_Render=NULL;
    }
    if(is->sdl_Window){
        SDL_DestroyWindow(is->sdl_Window);
        is->sdl_Window=NULL;
    }
}

渲染部分代码:

SDL_UpdateYUVTexture(decoder->sdl_Texture, NULL, pFrameYUV->data[0], pFrameYUV->linesize[0],pFrameYUV->data[1], pFrameYUV->linesize[1],pFrameYUV->data[2], pFrameYUV->linesize[2]);
            // SDL_UpdateTexture(decoder->sdl_Texture, NULL,pFrameYUV->data[0],pFrameYUV->linesize[0]);
            SDL_RenderClear(decoder->sdl_Render);
            SDL_RenderCopy(decoder->sdl_Render,decoder->sdl_Texture, NULL,NULL);
            SDL_RenderPresent(decoder->sdl_Render );

注:SDL_ShowWindow(is->sdl_Window); 缺少这一行,第二次用同句柄初始化将黑屏,画面不出来。

单做下笔记,如有不对请打脸!!!

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值