2014-01-13 4 views
0

ffmpeg에서 다음과 같은 의문점이 있습니다. 명확히하십시오.av_read_frame 후 ffmpeg 단위의 패킷 크기

1.I이는 FFmpeg을 사용하여 MP4 파일을 읽는 오전 av_read_frame 을 수행 한 후 내가 비디오 (stream_index를 = 0) 얻고, 오디오 (stream_index를 = 1) 패킷 비디오/오디오 packets.Is의 오심의 어떤 순서가없는 우선 그것은 표준 경우입니다.

2. 비디오 패킷의 크기가 최소 14에서 최대 21824입니다. 비디오 패킷 크기가 달라지는 이유를 지적하십시오. 은 비디오 용으로 하나의 패킷을 의미하므로 하나의 프레임을 의미합니다. video pkt-> size = 14 또한 비디오의 한 프레임과 같습니다 (pkt는 AVPacket 유형 임).

3. 들어오는 mp4 스트림을 파싱하는 동안 검색 기능에서 수신되는 mp4 스트림을 demux하고 일부 버퍼에 정보를 저장하거나 av_read_frame을 호출하여 demux합니다.

4. ffmpeg에서 mp4 파일을 demux하고 비디오 패킷이 stream_index = 1이고 오디오가 0 인 패킷의 한 스트림에/v를 모두 할당 할 수 있습니다. 또는 이거나 별도이어야합니다 흐름.

5. 전송 스트림과 mp4 파일에 대한 ffmpeg 처리 사이의 차이. 둘 다 디 멀티플렉싱되거나 동일한 방식으로 디코딩되거나 다른 경우입니다.

안부 Mayank

답변

2

미디어 파일은 mutipule 스트림으로부터 생성된다. 스트림은 mnay 유형일 수 있습니다. 오디오, 비디오, 캡션, 메타 데이터 등. 그러나 스트림은 여러 유형이 될 수 없습니다.

1) av_read_frame은 (일반적으로) 파일에 기록 된 순서대로 프레임을 반환합니다. 파일을 만든 소프트웨어가 단조롭게 멀티플렉싱하지 않으면 단조롭게 읽을 수 없습니다.

2) 이것은 정확하게 비디오 압축이 작동하는 방식입니다. 코덱은 프레임 간의 변경 사항 만 저장합니다. 모션이 거의 없다면 한 프레임이 이전 프레임과 매우 유사 할 수 있으므로 델타는 매우 작습니다.

3)이 질문은 아닙니다.

4) No.

5) 크게, 아니오. 그러나 파일 형식에는 약간의 차이가 있습니다. mp4는 랜덤 액세스가 필요하지만 TS는 그렇지 않습니다.

+0

ffprobe -show_packets가이 정보를 표시 할 수 있기 때문에 "i- 프레임"이 꽤 큰 경향이 있습니다 (i- 프레임인지 아닌지를 나타내는 어딘가의 플래그가 있어야 함) – rogerdpack