SSブログ

nvidia video codec sdk 8.0のサンプルコードが動かない(7.1で動いた)。 [プログラミング]

NVENCを使おうとして、Video Codec SDKを入れたのは良いけれど、サンプルコードさえ動かなかった話。

https://developer.nvidia.com/nvidia-video-codec-sdk

経緯を述べておきますと現在SDKは8.0で、UbuntuだとCUDAとドライバの齟齬があってうまく動かないみたいです。仕方ないのでWindowsで動かしてみても、Ubuntuと同様にコンパイルはできるけれども、実際に動いちゃくれなかったりします。

CUDAはOptionalで入れなくてもいいのかなと思いきや、サンプルががっつりCUDAを要求しているので入れざるを得ません。WindowsではサンプルによってはDirectXで良かったりしますが、なんだかんだで使いそうなのでどちらにも入れておくことにします。

んでWindowsでもUbuntuでも出たエラー。NvTranscoderで出てくる。

Failed to find required function "cuvidGetDecoderCaps" in libnvcuvid.so
cuvidInit(0) has returned CUDA error 999

そもそもDLLとかの共有ライブラリを見に行くときにこけているのでどうしようもない。それにCUDAを入れるのは必須なのでダメだったりする。読んでいるところをコメントアウトしたものの、パラメーターからファイルを読むところでコケていて、対処のしようがなかった。

NvEncoderはエラーは出ないんだけど、出力はされていない。こういうのが一番困る。何が悪いのかわからないから、デバッガでステップ実行していかないと突き止められない。デバッグしようとしたけど何やったかは忘れた。

さんざんGT 1030 NVENC未実装問題や、デバドラがきちんと入っているかわからない問題や、CUDAやっぱ入れないとサンプル動かないやん問題を通り過ぎてきたものの、何が問題なのかわからないのでデグレードというか、SDK7.1を使ってみた。すんなり動いたw。たぶん整えた環境の問題なのだろうけど、WindowsもUbuntuも、新しいグラフィックドライバに新しいCUDAを入れたのだ。SDK8.0が悪いとしか言えない。

それに音は入っていないとは言え、Transcodeは1750fpsの爆速を叩き出していた。これは移植するモチベーション上がるなぁw。それにとりあえず動くというところが良い(喜ぶところのレベルが低いw)。まだ面倒があるのには、Windowsで生成されるファイルがmp4形式で吐き出されてないっぽいところ。でも基本的にUbuntuで開発しようとしていたから別にいいかという感じ。今回はnvccとかでコンパイルしてむりやりgccなバイナリと連結しなくても良さそうだし、きちんと動画的なお作法さえ身につけていればなんとかなりそう。

問題が一つ。Transcoderで生成したファイルが、UbuntuのVideoアプリでは見られるけど、MacやUbuntuのVLCでは見られないということ。h.265が悪いのかなと思って、H.264で出力したけど見られなかった。そもそも一般的なmp4の形式で出力できていない模様。Windowsで出力したファイルもWindowsでは見られなかった。

確かにエンコードされるファイルはbitstreamと書いてあるけれども、TranscoderくらいはきちんとMP4の形式に整形してくれないと、どういうデータが来ているのかがさっぱりわからない。ビットストリームをMP4のコンテナに乗せればいいのだろうか…(わかってないw)。MP4をdemuxした状態なのかな。しかし一般的なアプリで見られないとなると、今後は動作確認などが問題になってくるだろう。データとしてはできてはいるんだろうけど、お作法に則って出力してもらわないとねぇ。

それにしても、開発環境が動かないというのは辛いですよ、NVIDIAさん。新しい環境に問題があるというのはよくあることだとしても、過去の動いていたSDKをもっと見つけやすいところに置いておいてもらわないと、正直このレベルの完成度でリリースされるとみんな困る。

https://developer.nvidia.com/video-codec-sdk-archive

タグ:NVENC
コメント(0) 
共通テーマ:パソコン・インターネット

コメント 0