최근 NVENC로하고있는 삽질

팀뷰어나 VNC로는 클라이언트에서 하드웨어 가속을 사용하지 못해서인지 모바일에서나 노트북에서나 발열이 좀 많다는게 단점. 특히나 게임은 화면 업데이트 빈도가 높아서인지 팀뷰어가 최적화 잘되어있지만 그래도 사용할 수 있는 대역폭에 비하면 화질이 좋지 못하였다.

아이폰이 GIF를 지원하지않는건 GIF는 하드웨어가속을 사용할 수 없기때문이라는데, 왠지 원격을 H.264로 스트리밍하고 제어한다면 노트북에서도 낮은 프로세서 사용률로 실시간으로 게임도 스트리밍하여 컨트롤 할 수 있지 않을까싶어 거진 2주간 NVENC와 XDGI 삽질을 하였다. DirectX 인터페이스나 미디어 스팩이나 아무것도 모르고 시작해서 지금도 아는게 없는상태에서 그냥 무작정 해보아서 이제야 막 결과가 눈에 들어오는 수준 orz

일단 결과는 간략하게 아래와같다.

%ec%ba%a1%ec%b2%98

인코딩 & 스트리밍 프로그램은 보여지는 화면이 없고 아직 MPEG4의 정상적인 스트리밍 방법을 모르기에 그냥 데이터만 있어도 재생이 되는 ffplay로 인코딩 된 raw 데이터를 바로 뿌려보았다. (파일로 출력하고 ffplay에서 읽도록 하면 거의 0.5초 정도 수준으로 지연이 있지만 tcp로 전송하니 버퍼링이 있어서인지 1초 넘게 지연이 생겨버린다.) 정상적으로 게임 화면이 나타나긴하지만 코딩하며 실행하면서 그래픽 메모리를 잘못 건든것이 있는지 종종 아래처럼 처참하게 깨지는 화면이 나타난다는건 덤.

2016-10-01

도중에 AAC 가속도 재공되는 인텔의 Media Codec을 사용해보려했지만 그건 나중으로 미루고 일단 NVENC를 사용하여 스트리밍하는것 부터 완벽하다 싶으면 건들어봐야겠다. 과연 완성이나 되련지 모르겠지만 완성되면 코드를 공개하던지 해봐야겠다. 아마도 ffmpeg 라이브러리를 사용해서 인코딩 하고 스트리밍 활용하는 방향으로 전환될수도 있지만 그건 나중 문제(…)

아래 화면은 그래픽카드의 비디오 엔진 점유율과 스트리밍 CPU 점유율이다.2016-10-01-1

디코딩이나 인코딩에서 GPU가속을 사용하고있다면 위와같이 Video Engine의 사용률이 높아진다.

2016-10-01-2

CPU 사용률은 화면 캡쳐 & 인코딩 & TCP 전송이 약 8%, ffplay가 5.3%. 이정도면 양호한거같다. DXGI에서 화면 캡쳐에서만 약 5%정도 먹는것으로 확인되는걸 보면 인코딩에서의 CPU 점유률은 3%내외인듯하다.

그나저나 새상좋아졌다. 인텔 프로세서만 가지고있어도 하드웨어 H.264 인코딩이 가능하고. 어디 글에서는 FullHD 60fps 영상이 최고 2.5배속 인코딩이 되더라는데 HD급 영화하나 인코딩 하려면 수시간을 기다려야했던때와 비교하면 정말 많이 발전했다 ㄷㄷ.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다

*
*

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.