コンテキスト
私は最近nVidiaドライバを375.26に更新し、私のコンピュータでFFmpeg N-83180-gcf3affaとOBS 17.0.2-5-g43e4a2eを再コンパイルしました(数字が何も意味がない場合は申し訳ありません。どのバージョン番号が重要かわかりません。) Debian マシン。 RAMを一時停止するとOBSの動作が停止し、唯一の回避策はコンピュータを再起動することです。
再生方法
- OBSの実行
出力構成:
- 出力をNVENC H.264および.mp4に設定
- CBRの使用
- ビットレート = 200K
- Kf 間隔 = 0
- 低レイテンシ、高品質プリセット、マスター、自動
- 2パスエンコーディングを有効にする
- グラフィックカード = 0
- Bフレーム=0
録音を開始して停止して機能していることを確認してください。
- ログインタスクに移動して[一時停止]をクリックします。
- 再起動してログインしてください
次のエラーで録画が開始され、OBSが失敗します。
[h264_nvenc @ 0x3fdd1e0] Failed creating CUDA context for NVENC: 0x3e7 [h264_nvenc @ 0x3fdd1e0] No NVENC capable devices found
システムメッセージ
- 上記のドライバ/ソフトウェアバージョン
- グラフィックカード: MSI GTX 970
- uname -a: Linux バージョン 3.16.0-4-amd64, #1 SMP Debian 3.16.39-1(2016-12-30)
- オペレーティングシステム:Debian 8.7の提示
XFCE 4.10がアクションボタンの動作に影響を与える場合は、それを使用します。
質問
コンピュータを起動した後にこのエラーを防ぐために毎回再起動しない方法はありますか?
編集1
OBSがこの問題の原因であることを知っています。
テストケース1:
- コンピュータを起動し、ffmpegのh264_nvencエンコーダを使用してビデオファイルを出力します。
- RAMに一時停止
- ログインして手順1を繰り返してください。
テストケース2:
- コンピュータを起動し、OBSを使用してh264_nvencを使用してビデオを録画します。
- 辞めるOBS
- RAMに一時停止
- ログインして手順2を繰り返します。
テストケース3:
- コンピュータを起動し、OBSを使用してh264_nvencでビデオを録画します。
- RAMに一時停止
- ログイン、失敗、表示
Cannot init CUDA
私の考えでは、OBSは録画が停止したときにストリームを閉じず、パフォーマンス(?)の理由でプログラムを終了するまでストリームに残ることができるということです。この問題を解決する方法がわかりません。エラーが発生した場合は、OBSを再起動しても効果がなく、システムを再起動する必要があります。
GPUが他のすべてを完全に処理できるように見えますが、それにもかかわらず、glxinfo
これらnvidia-smi
すべてはnvidia-settings
GPUが実際に他のタスクを処理するために使用されていることを確認します。 RAMを停止した後、NVENCが唯一の問題のようです。
編集2
以下はdmesg
ログです:https://www.diffchecker.com/wto7KPJZ
「ソース」タブは一時停止が行われた後に行われた変更であり、「変更済み」タブは私が提案した修正が行われた後に行われた変更です。
答え1
FFmpegは、システムを中断する前にh264_nvencストリームを開始(および停止しますが必須ではありません)した場合にのみ、CUDA initをロックします。 OBSが停止する前にh264_nvencエンコーダで何も記録しない場合は、再度ログインすると正常に動作します。
ログイン後にOBSがロックされている場合は、次の方法で使用できます。
- OBS終了
端末で実行:
sudo rmmod nvidia_uvm && sudo modprobe nvidia_uvm
OBSをもう一度開きます
- ???
- 利益
アンインストールしてもnvidia_uvm
機能しない場合は、DRMモジュールとパターンセットモジュールも再ロードする必要があります。しかし、私はこの問題は発生しませんでした。