여러 독립적 인 프로세스를 사용하여 방대한 양의 라이브 비디오를 linux/X11의 화면으로 스트리밍하는 방법을 고려 중입니다.리눅스를 사용하여 대규모 라이브 비디오 스트리밍
처음에는 OpenGL/GLX 및 openGL 텍스처로 프로젝트를 시작했지만 막 다른 골목이었습니다. 이유 : "컨텍스트 전환". 여러 개의 컨텍스트를 사용하여 여러 개의 독립된 다중 프로세스가 빠른 속도의 텍스처로 조작 할 때 (특히 nvidia) 성능이 떨어지는 것으로 나타났습니다. 이것은 충돌을 초래 정지 등
(다음 스레드를 참조하십시오 https://lists.freedesktop.org/archives/nouveau/2017-February/027286.html)
마침내에서 XVideo로 전환을 그리고 매우 잘 작동하는 것 같다. 내 초기 테스트 결과에 따르면 Xvideo는 비디오 덤핑을 OpenGL보다 10 배 이상 효과적으로 처리하고 충돌을 일으키지 않습니다. 하나는이 ~ 10 vlc 클라이언트에서 720p @ 25fps로 실행하고 Xvideo 및 OpenGL 출력을 모두 시도하는 것을 보여줄 수 있습니다 (모든 전체 화면 표시를 기억하십시오).
그러나, 나는에서 XVideo가 후드, 사용 의심하고, OpenGL을, 그래서에서 XVideo 및 GLX 모두 X11의 확장 모듈은
.. 나는이 권리를 얻고 있는지 알아 보자 :하지만,
(A)에서 XVideo 통해 덤핑 비디오 :
에서 XVideo가 디바이스 포트와 화면 전체를 고려하고 직접 조작은
,691,363 (는 X11의 확장되고, 이러한 신 같은 능력을 갖는다)210
.. 그래픽 드라이버의 단일 컨텍스트 만 필요합니다. 특정 1.
프로세스에게 컨텍스트 2 개 요청에서 XVideo 서비스 이용에서 XVideo 화면의 특정 부분으로 관리 .. 특정 윈도우 1.
프로세스 컨텍스트 1 개 요청에서 XVideo 서비스를 호출 할 수
-
,691 : 창 .. 문맥에서 XVideo 1.
(B) 비디오 덤핑 덤핑을 사용하여 화면의 일정 부분으로 관리
프로세스 1은 glx에서 컨텍스트를 요청하고 컨텍스트 1을 가져 와서 텍스처를 덤프하기 시작합니다.
프로세스 2는 glx에서 컨텍스트를 요청하고 컨텍스트 2를 가져 와서 텍스처를 덤프하기 시작합니다.
나는이 권리를 얻고 있습니까?
상황 (A)를 직접 사용하여 OpenGL을 사용하는 방법이 있습니까?
.. GLX를 완전히 삭제해야 할 수도 있습니다. 약간 하드 코어가되기 시작합니다.
당신은 후드에서 OpenGL을 사용했다 아래에 그에서 XVideo 가정에서 틀렸다. XVideo는 X11 프로토콜에 대한 독립적 인 확장이며 3D 래스터 화 지원이없는 GPU에서 완벽하게 지원할 수 있습니다. 그러나 효율성을 위해 XVideo 대신 VDPAU를 사용해야합니다. 또한 단일 프로세스에서 단일 OpenGL 컨텍스트를 사용하지 못하게하는 요인은 무엇입니까? 별도로 처리 (예 : ffmpeg 사용)하여 완벽하게 디코딩 할 수 있으며 파이프를 통해 디코딩 된 데이터를 표시 프로세스로 전달할 수 있습니다. – datenwolf
vdpau에 관해서는, 이제는 메사에 의해 오픈 소스 드라이버에서 지원되지만, 여전히 약간 녹색 인 것처럼 보입니다. Nvidia 독점 드라이버의 vdpaus는 허용 된 동시 vdpau 디코더의 수에서부터 h264 프로파일 허용에 이르기까지 모든 종류의 인위적인 제한을 가지고 있습니다 (그들은 당신에게 그들의 비싼 값 비싼 gfx 카드를 팔지 않아도됩니다) - 심지어 최악의 적에도 독점 NVIDIA vdpau를 권장하지 않습니다! .. 당신은 얼마나 많은 vdpau 스레드를 디코딩 할 수 있는지, 그리고 어떤 h264 프로파일/레벨을 가지고 있는지 결코 알 수 없을 것입니다. –
OpenGL 텍스처 덤핑을위한 단일 "마스터"프로세스 사용에 관해서도이 가능성을 생각했지만 공유 메모리를 사용했습니다. 디코딩 된 비트 맵을 보내면 파이프로 여러 소스에서 720p @ 25fps가 나오고 커널에서 처리하는 파이프가 아닙니까? 이런 능력을 충분히 발휘할 수 있을까요? –