LoginSignup
9
2

More than 5 years have passed since last update.

av1Codecやってみました。

Posted at

概要

webrtcについて、いろいろ探っていたら目に止まったので、ちょっと動かしてみました。
https://aomedia.googlesource.com/
こいつですね。

今回つくったもの。

https://github.com/taktod/aomCheck
とりあえず動作するものが欲しいのでつくってみました。

プログラムは3つ
1つはopencvTest.c
これはaomでencode / decodeする前に必要なものがちゃんと揃ってるか確認する意味で作りました。
ffmpegの内臓コーデックである、avcodecでデコード
opencvの画像表示動作をつかって、デコードしたデータを表示
そのままコード書くと面倒なので、自作ライブラリのttLibCをつかって動作補助してます。

2つ目はencode.c
ffmpegのavcodecでデコード
aomをつかってav1のCodecとしてエンコード
適当なフォーマットがないので(*1)、4byte + frameのbinaryという形のbinファイルに保存

3つ目はdecode.c
encode.cでつくったbinファイルを読み込む
aomをつかってav1のCodecでデコード
opencvで画像を表示

という動作になってます。

テストした環境

スクリーンショット 2017-10-01 20.55.55.png

こんな環境で実施してみました。
ffmpeg、opencvはbrewでインストール済み。
readmeにも書きましたがaomとttLibCはプロジェクトディレクトリ上に展開してコンパイルだけ実施しました。システムは汚さない、コレ大切

つくってみた感想

なんといってもlibvpxそっくり。
使い方がほぼ一緒でいけたので、楽でした。

いまのところ実験コードである、CONFIG_ANSを有効にしないと、encodeもdecodeもフリーズするみたいです。

encodeは確かに遅いですね。(*2)
ライブ系のサービスやってる人間としては、うわぁ・・・という感じでした。

        data->cfg.rc_max_quantizer = 31;
        data->cfg.rc_min_quantizer = 11;
        data->cfg.g_timebase.num = 1;
        data->cfg.g_timebase.den = 60;
        data->cfg.rc_target_bitrate = 500; // 500kbps
        data->cfg.g_pass = AOM_RC_ONE_PASS;
        data->cfg.g_threads = 4;
        res = aom_codec_enc_init(&data->codec, aom_codec_av1_cx(), &data->cfg, 0);
        if(res != AOM_CODEC_OK) {
            puts("filed to initialize aom. part2.");
      return false;
        }
        aom_codec_control(&data->codec, AOME_SET_CPUUSED, 8);

一応マルチスレッドで作業させて、SET_CPUUSEDで処理を軽減してみましたが、速度でないですね。
これ、一応webrtcで利用するつもりなんですよね。たぶん。

decodeは、まぁそこそこの速度でますね。さすがにこのPCでHD画質の60fpsの再生やってみたら、うわぁ・・・な結果になりましたが
640x360程度、30fps程度なら、おぉ、やるじゃんという結果になりました。

メモ

*1: 適当なフォーマットがないと書きましたが、本来はwebm(av1 / opus)になるみたいです。
webmで保存してもよかったのですが、どのように保存するか調べるのも面倒だったし、つくっても今後仕様がかわりそうだったので、スルーしました。
単にdecode動作だけ抜き出してみたかったので、今回はtimestamp等も適当です。

*2: もうちょっとスペックの良いMacBookAirで、前日からこのコードで
big buck bunney(http://bbb3d.renderfarming.net/download.html)の
Standard 2D full HDの60fpsのデータを変換かけてますが、まだ終わらない。

9
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2