ffmpeg キャプチャ デッキリンク

デッキリンクデバイスが接続されていることを確認してください

lspci | grep Blackm

02:00.0 マルチメディア ビデオ コントローラー: Blackmagic Design DeckLink SDI
Micro

デッキリンクドライバーが正しくインストールされていることを確認してください

lsmod | grep blackmagic

blackmagic_io 2068480 2

ffmpeg でデッキリンクが有効になっていることを確認してください。その設定方法は前のブログ投稿で説明されています。

ffmpeg -devices

DE alsa ALSA オーディオ出力 DE デッキリンク Blackmagic
DeckLink 出力

ffmpegでデッキリンクに対応するデバイス名を表示する

ffmpeg -sources

また

ffmpeg -sources

デッキリンクの自動検出ソース: 92:a08498c0:00000000 [DeckLink
SDI Micro] (なし)

View ffmpeg はデッキリンクのさまざまなパラメータをサポートしています

ffmpeg -h demuxer=decklink

ffmpeg公式サイトにデッキリンクパラメータの説明があります
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] 入力モードを自動検出しました [decklink @ 0x559c264d8f00
] Decklink モード 1280 x 720、レート 60.00 が見つかりました
ic->streams[i]->codecpar-W:1280 ic->streams[i]->codecpar-H: 720
ic->ストリーム[i]->コーデックパー-F:60

ffmpeg はテストデッキリンクとして使用できますが、本番レベルではまだ困難です。
最初
に信号にアクセスする前は、avformat_open_input でデバイスを開くことができませんが、信号が接続されるとデバイスを開くことができますが、このとき途中で閉じており、av_read_frame はまだカラー バーと読み取りを行うことができます。沈黙。現時点では、信号が接続されたり切断されたりすると、ffmpeg にはログ プロンプトが表示されますが、信号が接続されているかどうかのフィードバックを取得するための対応する API が見つかりませんでした。
したがって、次の問題があります。
1. 最初の信号がいつ接続されるかわからないため、avformat_open_input を保持する必要があります。
2. 最初のアクセス信号が取り外された後、カラーバーが表示されますが、2 番目のアクセス信号の解像度が変更される可能性があるため、再度開く必要がありますが、ffmpeg は 2 番目のアクセス信号がいつになるかわかりません。

ffmpeg はオーディオとビデオには必須ですが、業界で数年経った今でも、まだ無限の秘密があるようです。興味がある場合は、WeChat で作成者を追加してください (YQW1163720468)、ffmpeg WeChat グループのディスカッションに参加してください。 ただし、ffmpeg 愛好家の方は注意してください。

おすすめ

転載: blog.csdn.net/weixin_43466192/article/details/131230718