Libhevc の紹介

ハイビジョン テレビの普及と 4K および 8K 超高精細テレビの出現に伴い、ビデオ コーデック技術も広く使用および開発されています。H.265/HEVC (High Efficiency Video Coding) コーデック規格は、新世代のビデオ コーディング技術として、より高い圧縮率とより優れた画質を備えており、将来のビデオ コーディングのトレンドと方向性となっています。オープン ソースの H.265/HEVC コーデック ライブラリである libhevc ライブラリは、完全なデコード機能とインターフェイスを提供し、ユーザーが H.265/HEVC ビデオをすばやく簡単にデコードできるようにします。

H.265/HEVCコーデック規格

H.265/HEVCは、ITU-TとISO/IECが共同開発した映像コーデック規格で、2013年に公開されました。H.265/HEVCは、H.264/AVC(Advanced Video Coding)規格と比較して、画質を確保しながらビットレートを半分以下に削減できるため、より高い圧縮効率を実現します。H.265/HEVC エンコーディングでは、ブロック予測、動きベクトル拡張、変形並列処理などのいくつかの新しいテクノロジとアルゴリズムを使用して、ビデオの圧縮率と画質を向上させます。同時に、H.265/HEVC 規格は、超高解像度のビデオ (4K や 8K など) もサポートし、ネットワーク伝送とストレージのパフォーマンスが向上します。

libhevc ライブラリの構造

libhevc ライブラリは、オープン ソースの H.265/HEVC コーデック ライブラリであり、完全なデコード機能を実装し、一連の一般的なインターフェイスとツールをユーザーの利便性のために提供します。

libhevc ライブラリのコア機能には、パーサー、デコーダー、フィルターの 3 つの部分が含まれます。の、

  • パーサー: H.265/HEVC データ ストリームを文法単位に解析し、さまざまなレベルの構造に格納します。
  • デコーダー: 解析結果に従って、デコード処理を実行し、最終的に YUV ビデオ データを生成します。
  • フィルター: 後処理または前処理に使用できるさまざまなフィルター、特殊効果、およびその他の機能を提供します。

上記の 3 つの部分に基づいて、libhevc は、コマンド ライン ツール hevcdec、API インターフェイスなど、ユーザーが呼び出して使用するのに便利ないくつかのツールとインターフェイスも提供します。

libhevc ライブラリのコンパイルとインストール

libhevc ライブラリは、Linux や Windows などのオペレーティング システムでコンパイルおよび実行できるオープン ソースの C 言語ライブラリです。Linux システムを例として、libhevc ライブラリのコンパイルとインストールの手順を紹介しましょう。

依存前ライブラリ

libhevc ライブラリをコンパイルする前に、次の依存ライブラリをインストールする必要があります。

  • yasm: ポータブルで軽量なアセンブラ;
  • nasm:無料の BSD ライセンス アセンブラ;
  • cmake:クロスプラットフォームビルドシステム;
  • gcc:GNU コンパイラ コレクション;
  • g++:GNU C++ コンパイラ。

Ubuntu では、次のコマンドを使用してインストールできます。 

sudo apt-get install yasm nasm cmake build-essential

ソースコードをダウンロード

libhevc ライブラリのソース コードは、GitHub からクローンまたはダウンロードできます。ソース コードを /usr/local/src ディレクトリに複製すると仮定して、ソース コードの複製を例に取りましょう。

git clone https://github.com/strukturag/libhevc.git /usr/local/src/libhevc

コンパイルしてインストール

ライブラリが /usr/local/lib および /usr/local/include ディレクトリにインストールされると仮定して、ソース コード ディレクトリに入り、cmake を使用してコンパイルおよびインストールします。

cd /usr/local/src/libhevc
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
make -j4
sudo make install

コンパイルしてインストールすると、コンパイルされたライブラリ ファイルとヘッダー ファイルが /usr/local/lib および /usr/local/include ディレクトリにコピーされます。

libhevc ライブラリの使用

libhevc ライブラリは、H.265/HEVC ビデオのデコードと処理に使用できる一連の API インターフェイスを提供します。C/C++ 言語を例として、libhevc ライブラリを使用して H.265/HEVC ビデオをデコードする方法を紹介しましょう。

ヘッダファイルをインポート

libhevc ライブラリを使用する前に、関連するヘッダー ファイルをインポートする必要があります。libhevc ライブラリのヘッダー ファイルは通常、/usr/local/include/hevc ディレクトリにあります。このディレクトリには、すべての関数宣言と構造定義が含まれています。以下は、一般的に使用されるヘッダー ファイルのリストです。

#include <hevc/hevc.h>
#include <hevc/hevcdec.h>
#include <hevc/hevcps.h>
#include <hevc/hevcpred.h>

コーデックを開く

libhevc ライブラリを使用する場合、最初にデコーダーを開き、デコーダーのパラメーターと入力データ形式を指定する必要があります。通常、パーサーとデコーダーを開くには、hevc_parser_open() および hevc_decoder_open() 関数を使用できます。

// 打开解析器
HevcParser *parser = hevc_parser_open();

// 打开解码器
HevcDecoder *decoder = hevc_decoder_open();
decoder->set_option(decoder, "threads", "4"); // 设置解码线程数
decoder->set_option(decoder, "output-flags", "0"); // 设置输出标志
decoder->set_option(decoder, "verbose", "1"); // 设置输出详细信息

ビデオデータをデコードする

デコーダーの電源を入れると、H.265/HEVC ビデオ データを読み込んでデコードできます。通常、fread() 関数を使用してファイルからデータを読み取り、次に hevc_parser_decode() および hevc_decoder_decode() 関数を呼び出して、構文単位の解析およびデコード操作を実行できます。

// 打开输入文件
FILE *infile = fopen("test.hevc", "rb");

// 逐帧读取数据进行解码
while (fread(buffer, 1, size, infile) == size) {
  int data_len = size;

  // 解析语法单元
  HevcNalu nalu;
  while ((data_len = hevc_parser_decode(parser, buffer, data_len, &nalu)) > 0) {
    if (nalu.type == HEVC_NAL_UNIT_CODED_SLICE_IDR || nalu.type == HEVC_NAL_UNIT_CODED_SLICE) {
      // 解码视频数据
      HevcPicture *picture = NULL;
      hevc_decoder_decode(decoder, &nalu, &picture);

      // 处理解码结果
      if (picture != NULL) {
        printf("decoded frame size: %d x %d\n", picture->width, picture->height);
        hevc_picture_free(picture);
      }
    }
  }
}

// 关闭输入文件
fclose(infile);

デコーダーをオフにする

デコード操作が完了したら、関連するリソースを解放してデコーダを閉じる必要があります。通常、パーサーとデコーダーは hevc_parser_close() および hevc_decoder_close() 関数を使用して閉じることができます。

// 关闭解析器
hevc_parser_close(parser);

// 关闭解码器
hevc_decoder_close(decoder);

要約する

オープン ソースの H.265/HEVC コーデック ライブラリである libhevc ライブラリは、完全なデコード機能とインターフェイスを提供し、ユーザーが H.265/HEVC ビデオをすばやく簡単にデコードできるようにします。libhevc ライブラリは移植性と拡張性に優れており、複数のプラットフォームでコンパイルおよび実行できます。同時に、libhevc ライブラリのソース コードは、そのシンプルでわかりやすい構造と明確なプログラミング スタイルにより、H.265/HEVC エンコードおよびデコード テクノロジを学習するための参照およびデモンストレーションとして使用できます。

おすすめ

転載: blog.csdn.net/huapeng_guo/article/details/130062883
おすすめ