간단히 말해서, 스트림을 다시 인코딩하지 않고도 훨씬 더 큰 비디오 프레임을 인코딩하여 더 큰 h.264 스트림 앞에 스티칭해야합니다.기존 스트림과 일치하도록 인코딩 h264
세부 정보 : h.264 es와 오디오가 포함 된 멀티 GB 전송 스트림을 수신합니다. 현재 h.264 스트림은 항상 x264를 사용하여 생성되며 앞으로는이 경우가 될 것으로 예상 할 수 있습니다. 이제 일부 비디오 프레임을이 스트림에 추가해야하지만 전체 스트림을 디코딩/인코딩 할 수는 없습니다. 두 개의 스트림이 일치하도록 x264_encoder_open을 전달하는 데 필요한 정확한 매개 변수를 찾을 수있는 유일한 옵션이 있습니다. 원래 TS
- 디 먹스 및 H.264 NAL 패킷을 추출 :
현재 내가 뭘 것입니다.
- "사용자 데이터 등록되지 않은"SEI 패킷을 발견하면이를 구문 분석하고 x264 매개 변수를 찾습니다.
- 비디오 디코딩을 시작하려면 libavcodec을 사용하십시오. AVCodecContext 구조에서 그림의 크기와 h264 프로필 및 레벨을 얻을 수 있습니다.
- x264_param_t 구조에서 가능한 한 최선을 다하십시오.
인코딩을 할 수 있으며 인코딩 된 비디오가 정확하게 연결 지점까지 재생됩니다. VLC는 스티치 포인트에 도달 될 때 메시지의 다음과 같은 순서를 밖으로 던지기 시작하고 곧 중지 재생 후 :
[h264 @ 0x7fe36cd75be0] decode_slice_header error
[h264 @ 0x7fe36cd75be0] no frame!
[h264 @ 0x7fe36ccc9080] Width/height changing with threads is not implemented. Update your Libav version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
분명히 내 인코딩 된 프레임이 원래의 것과 일치하지 않는 것을 알 수있다. 나는 소스 코드를 탐색 해왔고이를 수행하는 방법을 찾지 못하고있다. 내가 현재 가지고있는 것 (작동하지 않는 것)은 많은 추측을 필요로하기 때문에 필자가 갖고있는 예제 파일 중 일부를 작동시킬 수 있다고하더라도 프로덕션 서버에이 파일을 배포하는 것은 무서울 것입니다.
명백한 질문은 다음과 같습니다. 안전하고 공식적인 방법이 있습니까?
감사의 말