ffmpeg capture decklink

简介: ffmpeg capture decklink

确保decklink设备已经接入

lspci | grep Blackm


02:00.0 Multimedia video controller: Blackmagic Design DeckLink SDI

Micro


确保decklink驱动已经正确安装

lsmod | grep blackmagic


blackmagic_io 2068480 2


确保ffmpeg已经启用decklink,如何配置之前的博文已经提到。

ffmpeg -devices


DE alsa ALSA audio output DE decklink Blackmagic

DeckLink output


查看decklink在ffmpeg中对应的设备名称

ffmpeg -sources


ffmpeg -sources


Auto-detected sources for decklink: 92:a08498c0:00000000 [DeckLink

SDI Micro] (none)


查看ffmpeg支持decklink的各种参数

ffmpeg -h demuxer=decklink


ffmpeg官网上有decklink的参数解释

http://ffmpeg.org/ffmpeg-all.html#decklink-1


以下是伪代码:

  AVDictionary *options = NULL;
    // av_dict_set(&options, "video_size", "640x480", 0);
    // av_dict_set(&options, "framerate", "30", 0);
    // av_dict_set(&options, "pixel_format", "yuyv422,", 0);
    // av_dict_set(&dict, "video_size", "1280*720", AV_DICT_MATCH_CASE);
    // av_dict_set(&dict, "framerate", "10", AV_DICT_MATCH_CASE);
    //以上参数如果不设置的话,就会用默认值,但默认值摄像头不一定支持
    int re = avformat_open_input(&ic, "92:a08498c0:00000000", ifmt, &options);
    if (re != 0)
    {
        printf("无法打开输入流\n");
        ErrorFunc(re);
    }
    re = avformat_find_stream_info(ic, NULL);
    int video_index = -1;
    for (int i = 0; i < ic->nb_streams; i++)
    {
        if (ic->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
        {
            // ic->streams[i]->codecpar
            video_index = i;
        }
    }
    printf("ic->streams[i]->codecpar-W:%d\n", ic->streams[video_index]->codecpar->width);
    printf("ic->streams[i]->codecpar-H:%d\n", ic->streams[video_index]->codecpar->height);
    printf("ic->streams[i]->codecpar-F:%d\n", ic->streams[video_index]->avg_frame_rate);


程序打印如下:


[decklink @ 0x559c264d8f00] Autodetected the input mode [decklink @

0x559c264d8f00] Found Decklink mode 1280 x 720 with rate 60.00

ic->streams[i]->codecpar-W:1280 ic->streams[i]->codecpar-H:720

ic->streams[i]->codecpar-F:60


ffmpeg当作测试用decklink可以,产品级还是很难。

有以下现象:

第一次接入信号前,用avformat_open_input打不开设备,接入信号后,可以打开,此时中途关闭,av_read_frame依然可以读到彩条和静音。此时接入拔出信号,ffmpeg都有日志提示,但我并没有找到对应的api能够检索到信号是否接入的反馈。

因此有以下问题:

1.不知道什么时候会接入第一次信号,因此需要不停avformat_open_input。

2.第一次接入信号拔掉后是彩条,但第二次接入的信号分辨率可能会变化,因此需要重新open,但ffmpeg并不知道什么时候会第二次接入信号。


thxchtb3wcn3k_d11fc1ff3db9431d8ad7575e9297ae48.png

相关文章
|
4月前
|
C语言 C++ 内存技术
SDL基础使用06 (SDL播放pcm文件)
如何使用SDL库在C和C++中播放PCM音频文件,包括初始化SDL音频、设置音频参数、读取PCM数据、播放音频以及资源释放的完整流程。
3470 1
|
4月前
|
存储 编解码 网络协议
FFmpeg学习笔记(三):FFmpeg和FFplay参数介绍
这篇文章是关于FFmpeg和FFplay参数的介绍,包括如何使用这些参数进行视频流的捕获、处理和播放。
118 0
|
9月前
|
编解码 算法 C++
【ffmpeg 基础函数】详解FFmpeg中的av_packet_ref函数
【ffmpeg 基础函数】详解FFmpeg中的av_packet_ref函数
83 0
|
9月前
|
内存技术
SDL播放PCM
SDL播放PCM
52 0
实战--ffmpeg与sdl实现最简单的视频播放器
实战--ffmpeg与sdl实现最简单的视频播放器
126 0
|
计算机视觉
ffmpeg配置opus
ffmpeg配置opus
336 0
|
存储 缓存 编解码
FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放
FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放
|
缓存 编解码 API
FFmpeg开发笔记(八):ffmpeg解码音频并使用SDL同步音频播放
FFmpeg开发笔记(八):ffmpeg解码音频并使用SDL同步音频播放
FFmpeg开发笔记(八):ffmpeg解码音频并使用SDL同步音频播放
|
机器学习/深度学习 缓存 数据可视化
FFmpeg 开发(05):FFmpeg + OpenGLES 实现视频解码播放和视
前面 Android FFmpeg 开发系列文章中,我们已经利用 FFmpeg 的解码功能和 ANativeWindow 的渲染功能,实现了的视频的解码播放。但是,当你想为播放器做一些视频滤镜时,如加水印、旋转缩放等效果,使用 OpenGL ES 实现起来就极为方便。
796 0
FFmpeg 开发(05):FFmpeg + OpenGLES 实现视频解码播放和视
|
机器学习/深度学习 存储 数据可视化
FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放
本文基于上一篇文章 FFmpeg + OpenSLES 实现音频解码播放 ,利用 FFmpeg 对一个 Mp4 文件的音频流进行解码,然后将解码后的 PCM 音频数据进行重采样,最后利用 OpenSLES 进行播放的同时,将 PCM 音频一个通道的数据实时渲染成柱状图。
392 0
FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放