2014-01-21 2 views
0

FLV로 래핑 된 비디오가 있다고 가정 해 봅시다 (컨테이너 아래에는 h.264와 aac입니다)flv를 mp4로 다시 래핑하기위한 C 라이브러리?

목표는 그것을 읽고 그대로 출력 할 수있는 방식으로 * MP4로 보낼 수 있습니다. Safari/iOS에서 스트리밍 할 수 있습니다.

거기에 도움이되는 라이브러리가 있습니까? 나는 ffmpeg를 조사하고있다. 그러나 나는 그것을 아직 알지 못했다. 그리고 정말로 그것이 필요한지 확신 할 수 없다. (내가 파일 -> 파일로가는 유틸리티를 필요로한다면, 의심의 여지없이 완벽하지만, 덩어리 단위로 청크에 사용할 라이브러리, 아직 내 이빨을 부러 뜨릴 수있는 적절한 곳인 지 확실하지 않음)

EDIT : 요청 시간이 알려지며 즉 기간이 알려져 있고 모든 헤더가 필요할 수 있다고 가정 해 보겠습니다. 초기 읽기/쓰기 전에 스캔합니다.

답변

1

질문하는 것은 불가능합니다. mp4를 스트리밍 할 방법이 없습니다. 스트리밍 형식이 아닙니다. mp4에는 적어도 두 개의 파티션이 있습니다. MDAT 및 MOOV. MDAT에는 원시 오디오/비디오 프레임이 포함되어 있습니다. 그러나 시작 코드 나 타이밍 정보없이 간단하게 연결됩니다. MOOV가 없으면 횡설수설합니다. MOOV는 MDAT의 각 프레임에 대한 오프셋, 크기 및 타임 스탬프를 포함합니다. 그러나 모든 프레임이 기록 될 때까지는 계산할 수 없습니다.

실시간 변환을 위해 iOS에서 지원되는 유일한 형식은 HLS입니다.

편집 : 이것은 flv가 내부적으로 mp4와 동일한 기본 스트림 형식을 사용하기 때문에 작동합니다. flv를 스캔하고 시퀀스 헤더를 추출하고 모든 flv 태그 페이로드 파일 오프셋 및 크기를 기록 할 수 있습니다. 또한 어떤 프레임이 키 프레임인지 기억하십시오. flv에 바이트 오프셋을 사용하는 가짜 moov 아톰을 만듭니다 (MOOV보다 큰 바이트 수, 예를 들어 100MB).이 값을 stbl 하위 아톰에 씁니다. 시퀀스 헤더의 데이터를 사용하여 tkhd를 채 웁니다. MOOV에 자유 원자와 MDAT 원자의 헤더를 덧붙여 정확히 100MB로 만듭니다. 마지막으로 100MB보다 큰 웹 서버 맵 범위 요구를 MDAT 대신 flv로 가져 오십시오.

+0

http://stackoverflow.com/q/13010530/32453 – rogerdpack

+0

스트리밍과 같은 종류의 이야기가 아닙니다. :) – davidkomer

+0

하지만 디스크에 mp4를 만들고 싶지 않습니까? 옳은? – szatmary

관련 문제