가있는 것 같다 스트리밍 시퀀스 매개 변수를 허용합니다 어디에 나타냅니다 RTSP/RTP를 통해 H.264를 수행하려는 모든 사람이이 질문에 이르는 시점이되어야합니다. 여기에 내 두 센트가 있습니다 :
1) 접근 단위의 개념이 있습니다. 액세스 유닛은 인코딩 된 프레임을 나타내는 NAL 유닛 세트 (하나 일 수도 있음)입니다. 그것은 당신이 일해야하는 논리의 수준입니다. 인코더가 개별 NAL 단위를 제공한다고 말하면 인코딩 절차로 인해 하나의 원본 프레임 (예 : SPS + PPS + 코딩 된 그림)의 NAL 단위가 여러 개 발생하는 경우 어떤 동작이 기대됩니까? 즉, 액세스 단위에서 NAL 단위의 수를 줄이기 위해 엔코더를 구성하는 방법이 있습니다 (예 : AUD NAL을 포함하지 않고 SPS/PPS를 반복하지 않고 SEI NAL을 제외) - 실제로이 지식으로 무엇을 알 수 있습니까? 예상치와 종류의 인코더가 프레임 당 단일 NAL을 제공하도록 강요합니다 (물론 이것은 모든 프레임에서 작동하지 않지만 디코더에 대한 지식으로 처리 할 수 있습니다). 나는 NVENC API에 대한 전문가가 아니며 방금 사용하기 시작했습니다. 적어도 Intel Quick Sync에 대해서는 AUD, SEI를 끄고 PPS/SPS의 반복을 비활성화하면 프레임 당 약 1 NAL이 필요합니다. 프레임 2 ... N.
2) 내가 API에 익숙하지 않다고 언급 했으므로 답변을 드릴 수 없지만이 문제는 매우 의심 스럽습니다.
3) SPS와 PPS는 첫 번째 액세스 단위 (인코더에서 가져온 첫 번째 비트 스트림)에 있어야하며 비트 스트림에서 올바른 NAL을 찾아 추출하거나 특수 API 호출을 사용하여 인코더에서 가져옵니다.
실제로 비트 스트림을 통해 실행하고 시작 코드를 구문 분석하고 NAL 장치를 추출하여 하나씩 Live555에 공급하는 것은 어렵지 않다고 생각합니다. 물론, 인코더가 AVCC 형식의 비트 스트림을 출력하도록 제안하는 경우 (시작 코드 또는 부록 B와 비교하여 NAL 단위 사이에 인터리브 된 길이 값을 사용하므로 접두어를 찾지 않고 다음 코드로 건너 뛸 수 있음) 그런 다음 사용해야합니다. RTP는 RTSP의 경우 전송 인프라의 오버 헤드가 크고 FU-A 패킷 화에 대한 적절한 지원이없는 GStreamer에 불운을 겪었 기 때문에 전송 자체를 구현하기가 쉽습니다. Live555와 같은 타사 라이브러리를 사용하는 것이 합리적입니다.
NVEnc를 사용하여 OpenGL 프레임을 전송하면 이미 달성 한 작업을 수행하려고합니다. CUDA interop을 사용하고 있습니까, 아니면 더 좋은 방법이 있습니까? 어떤 포인터 주셔서 감사합니다! – JPNotADragon
가장 좋은 방법은 CUDA interop이지만 아직 완료하지 않았습니다. FBO로 렌더링하고, 데이터를 RAM으로 전달한 다음 다시 NVENC 표면으로 전달합니다.CUDA 샘플에는 FBO에서 직접 보내는 방법에 대한 리소스가 있어야합니다. –
고마워요. @chuckleplant, 한번보세요. 제가 지금까지 가지고있는 유일한 것은 오슬로 대학에서 행해진 매우 흥미있는이 논문입니다 : http://heim.ifi.uio.no/paalh/students/MartinAlexanderWilhelmsen.pdf – JPNotADragon