FFmpeg - 푸시 스트림 rtsp/rtmp를 통해 실시간으로 사용자 지정 메시지를 추가하고, 송수신 구문 분석을 추가하는 코드를 추가할 수 있습니다.

FFmpeg - 푸시 스트리밍 rtsp/rtmp를 통해 실시간으로 sei 맞춤 메시지를 추가하고, 송수신 구문 분석을 추가하는 코드.

324.47MBRAR

이 리소스에는 전체 Vs+Qt+FFmpeg 코드가 포함되어 있습니다.

비디오 프레젠테이션:https://wwm.lanzn.com/ibahQ1t3jekh

컨텍스트

라이브 애플리케이션 개발 과정에서 앵커 측에서 청중 측으로 메시지 이벤트를 전달할 경우 일반적으로 인스턴트 메시징(인스턴트 메시지) 방식으로 전달하지만, 메시지 배포 채널과 라이브 채널이 분리되어 있기 때문에 메시지와 라이브 오디오 및 비디오 데이터 동기화에 많은 문제가 발생할 수 있습니다. 그렇다면 오디오와 비디오 내부에서 메시지를 전달하는 방법이 있을까요? 정답은 SEI입니다.

예: 드론의 롤/피치/고도/방향을 설정하고 프레임 이미지를 얻을 때 해당 파라미터를 가져와야 하며, 이 시점에서 해당 파라미터가 SEI로 전송됩니다.

SEI는 스트림 범주에 속하는 개념으로, 동영상 스트림에 정보를 추가하는 방법을 제공하며, 이는 H.264/H.265 동영상 압축 표준의 기능 중 하나입니다.

소스 코드(컴퓨팅)

반드시 명시해야 합니다:

푸시 세이 측에서 패킷당 512바이트의 추가 정보를 전송한 후 예외가 발생할 수 있습니다. 하지만 푸시 측의 경우 다음 코드에서 예외가 해결되었지만 여전히 너무 자주, 너무 큰 데이터를 푸시하지 않는 것이 좋습니다.

필자는 각 패킷의 길이가 512바이트인 상황을 테스트한 결과 위와 같은 문제가 발견되었습니다. 바이트 수가 그보다 적거나 전송 빈도가 매우 낮으면 위와 같은 상황이 발생하지 않습니다.

bool fill_sei_packet(부호 없는 문자 * packet, bool isAnnexb, const 문자 * content, uint32_t size)

{

부호 없는 문자 * 데이터 = (부호 없는 문자*)패킷;

부호 없는 int nalu_size = (부호 없는 int)get_sei_nalu_size(size);

uint32_t sei_size = nalu_size;

nalu_size = 역방향 바이트(nalu_size);

부호 없는 int * size_ptr = &nalu_size;

if (isAnnexb)

{

memcpy(data, start_code, sizeof(부호 없는 int));

}

else

{

memcpy(data, size_ptr, sizeof(부호 없는 int));

}

data += sizeof(부호 없는 int);

부호 없는 문자 * SEI = 데이터;

//NAL 헤더

*데이터++ = 6; //SEI

//sei 페이로드 유형

*데이터++ = 5; //등록 취소

size_t sei_payload_size = size + UUID_SIZE;

동안 (참)

{

*데이터++ = (sei_payload_size >= 0xFF ? 0xFF : (char)sei_payload_size);

if (sei_payload_size < 0xFF) break;

sei_payload_size -= 0xFF;

}

}

int get_sei_buffer(부호 없는 문자 * 데이터, uint32_t size, 문자 * 버퍼, int * 카운트)

{

부호 없는 문자 * SEI = 데이터;

int sei_type = 0;

부호 없는 sei_size = 0;

//페이로드 유형

do {

sei_type += *sei.

} 동안 (*sei++ == 255);

// 데이터 길이

do {

sei_size += *SEI.

} 동안 (*sei++ == 255);

// UUID 확인

if (sei_size >= UUID_SIZE && sei_size <= (데이터 + 크기 - sei) &&

sei_type == 5 && memcmp(sei, uuid, UUID_SIZE) == 0)

{

sei += UUID_SIZE.

sei_size -= UUID_SIZE.

if (buffer ! = NULL && count! = NULL)

{

if (*count > (int)sei_size)

{

멤피(버퍼, 세이, 세이_크기);

}

}

if (count ! = NULL)

{

*count = sei_size.

}

sei_size를 반환합니다;

}

반환 -1;

}

리소스 다운로드이 리소스의 다운로드 가격은 다음과 같습니다.56.0금화부터 먼저 주세요
리소스 다운로드
가격 다운로드56.0 코인

리소스 정책(구매는 이 정책에 동의하는 것으로 간주됩니다):
1. 웹 사이트 플랫폼에서의 모든 작업은 웹 사이트 등록 계약 및 면책 조항 하단을 읽고 동의 한 것으로 간주되며,이 사이트 리소스는 초저가이며 기술 지원을 제공하지 않습니다.
2. 일부 네트워크 사용자가 공유하는 넷 디스크 주소가 오류 발생 등 유효하지 않을 수 있으므로 고객 서비스 코드711cn#qq.com (#를 @로 대체)으로 이메일을 보내 주시기 바랍니다.
이 사이트는 부정적인 변경이 없도록 다운로드 가능한 모든 리소스 (소프트웨어 등) 사이트를 제공합니다. 그러나이 사이트는 리소스의 정확성, 보안 및 무결성을 보장 할 수 없으며 사용자는 자신의 재량에 따라 다운로드하며 모든 소스 코드가 100% 오류가 없거나 버그가없는 것은 아니라는 목적으로 배우기 위해 통신하며 코드를 읽고 이해할 수있는 특정 기초가 있어야 디버깅을 수정할 수 있습니다! 코드를 수정하고 오류를 해결할 수 있어야 합니다. 동시에 이 사이트의 사용자는 소스 코드 편의점이 다운로드용으로 제공된 소프트웨어에 대한 어떠한 권리도 소유하지 않으며, 저작권은 리소스의 법적 소유자에게 있음을 이해해야 합니다.
4. 본 사이트의 모든 자료는 학습 및 연구 목적으로 만 다운로드 한 후 24시간 이내에 삭제해야 하며, 상업적 목적으로 사용하지 마시고, 그렇지 않을 경우 발생하는 법적 분쟁은 사이트 및 부수적 책임 사이트의 게시자에게 있으며 책임을지지 않습니다!
5. 재생산 가능한 자원의 특성으로 인해 일단 구매하면 환불이 불가능하며, 충전 잔액도 환불되지 않습니다.

充值送金币,用余额购买,低至6.7折!지금 충전하기

캡차 표시
계정이 없으신가요? 등록  비밀번호를 잊으셨나요?