2012-01-25 6 views
2

IP 카메라 (Basler BIP-1280c)에서 비디오 스트림을 읽으려고합니다. 내가 갖고 싶은 스트림은 카메라의 버퍼에 저장되며 길이는 40 초이며 MJPEG에서 디코딩됩니다.MJPEG IP 카메라의 비디오가 너무 빠름

이제 웹 브라우저를 통해 스트림에 액세스하면 아무 문제없이 40 초가 표시됩니다. 하지만 실제로 스트림을 다운로드하고 저장할 수있는 응용 프로그램이 필요합니다.

카메라가 http를 통해 액세스되므로 libcurl을 사용하여 액세스합니다. 이 작품을 잘 작동하고 어떤 문제없이 스트림을 다운로드 할 수 있습니다. * .avi 파일에 스트림 데이터를 저장하기로했습니다.

하지만 이제 문제가 생겼습니다 : 비디오를 열 수 있고 (Totem Video Player 및 VLC로 시도) 기록 된 모든 것을 볼 수 있지만 너무 빠릅니다. 전체 비디오는 5 초 (40 대신)로 지속됩니다. MJPEG에 전체 비디오 길이 또는 fps와 같은 정보를 넣을 수있는 헤더가 있습니까? 비디오 플레이어가 누락 된 정보가있어 빨리 재생할 수 있어야합니다.

업데이트 : 답변에서 제안한 것처럼

, 나는 hex 에디터로 파일을 열고 제가 발견 한 것은이 있었다 :

--myboundary..Content-Type: image/jpeg..Content-Length: 39050.........*Exif..II*...............V...........................2...................0210................FrameNr=000398732 6.AOI=(0800x0720)@(0240,0060)/(1280x0720).Motion=00000 (no) [00000 | 00000 | 00000 | 00000 | 00000].Alarm=0000 (no) .IO =000.RtTrigger=0...Basler..BIP2-1280c..1970:01:05 23:08:10.8 98286......JFIF...... ............................ ....&"((

이 헤더는 파일 전체에 반복적으로 발생하며 (이진 데이터의 많은 바이트가 뒤 따른다). 카메라 설명서에서 모든 MJPEG 그림이이 머리글을 읽으므로 실제로는 괜찮습니다.

더 흥미로운 내용은 마지막 줄에 JFIF입니다. 제안 된 답변 에서처럼 이것은 아마도 파일 형식의 지표 일 것입니다. 하지만 afaik JFIF는 jpg와 같은 단일 그림 형식입니다. 그렇다면 전체 비디오 파일이 단순한 "브레인이없는"체인 사진 일 수도 있습니다. 그리고 내 플레이어는 프레임 속도에 대한 지식 없이도이 사진을 차례로 보여야한다고 가정합니다.

+0

avi 파일에 대해 지정한 프레임 속도 값을 확인하십시오. avi로 작성한 프레임 수를 계산하고 40 초 동안 프레임을 재생할 프레임 수를 계산하십시오. –

+0

'AVI' 컨테이너가 깨졌습니다 (이미지는 좋을 수도 있지만 타임 스탬프가 아닙니다). 파일 형식에 대한 다른 옵션이 있다면 아마도 대안을 시도하고 싶을 것입니다. AVI 파일 프레임 속도 당 고정 IP 카메라 스트림에 적합하지 않습니다. –

+0

하지만 실제로 파일 형식을 선택할 수 없습니다. 방금 스트림 데이터에 액세스 할 수 있으며 파일로 덤프해야합니다. 따라서 데이터가 저장되는 방식에 영향을주지 않으며 파일 확장자를 선택할 수 있습니다. – Toby

답변

6

MJPEG에 사용할 단일 형식이 없습니다. 위키 백과에서 :

는 [...] 보편적으로 모든 상황에서 사용하기위한 "모션 JPEG" 의 전체 사양으로 인식되고 하나의 정확한 형식을 정의 문서가 없는지.

형식은 공급 업체에 따라 다릅니다. 내 충고는 다운로드 한 파일을 면밀히 검사하는 것입니다. 이 실제로이고 AVI 컨테이너인지 확인하십시오. 일부 카메라는 MIME 컨테이너에 래핑 된 프레임을 보낼 수 있습니다. 컨테이너 형식 명확 후

, 해당 컨테이너의 문서를 확인하고 그 형식과 원하는 FPS을 가진 파일을 찾을 수 있습니다. 그런 다음 다운로드 한 파일을 조정하여 원하는 효과를 낼 수 있습니다.http://mjpeg.sourceforge.net/

편집 : 당신은 또한 유용이 프로젝트를 찾을 수 있습니다

샘플 자료에 따르면

이 카메라는 MIME 용기에 포장 된 프레임을 전송한다. (첫 번째 줄은 경계이고, 그 다음에 빈 줄이 생길 때까지 헤더, 그 다음에는 파일 데이터, 경계에 따라 뒤 따르기 등). 헤더에서 알 수 있듯이

이들은

는 이미지 (JPEG)로 제공됩니다 : image/jpeg. JPEG 데이터를 저장하는 JFIF는 the standard file format입니다. 사진과의 시리즈에서 동영상 파일을 생성 한 후, (예를 들어 munpack으로) 여러 JPEG 파일에 파일의 압축을 풉니 다

  1. use ffmpeg or mplayer을 :

    나는 당신을 권장합니다.

당신도 원하는 프레임 속도를 지정할 수 있습니다 이쪽으로.

카메라가 동적으로 AOI (관심 영역) canges 경우는 변화가 발생 이미지의 작은 부분을 보낼 수 있습니다 의미, 일을 더 복잡하게 만들 수 있습니다. 그러나 간단한 접근 방식이 효과가 있는지 먼저 확인해야합니다.

+0

컨테이너 형식을 결정할 수있는 방법에 대한 제안 사항이 있습니까? 그리고 MIME은 Mail의 형식이 아닙니까? 또는 비디오 전송에도 사용됩니까? 아니면 완전히 잘못된 것을 얻고 있습니까? // edit : 실제로 "Avidemux"(http://avidemux.sourceforge.net/)로 열려고했지만 열리지 않습니다 ... 그래서 카메라가 올바른 avi 형식으로 저장하지 않습니다. .? – Toby

+1

@Toby 파일을 16 진수 편집기에서 엽니 다. 처음 4 바이트는 아마도 형식을 알려줍니다. MIME은 또한 컨테이너 형식입니다 (특히 멀티미디어에는 해당되지 않음). 여러 파일을 하나의 파일로 캡슐화 할 수 있습니다. – vbence

+0

죄송합니다. 답변이 너무 오래 걸렸지 만 저는 아팠습니다 ... 음, 이제 헥스 에디터로 파일을 열었습니다. 처음 보는 것은 내 IP 카메라의 헤더 항목 중 일부입니다. 그런 다음 "JFIF"가옵니다.그래서 나는 형식의 설명 thats를 추측한다. .. 그러나 JFIF는 단지 보통의 그림 체재 다. .. 그래서 나의 파일에서 거기의 어떤 비디오 정보도 저장 될 수 없었다? – Toby

1

un * x 시스템 (linux, osx, ...)에서는 file cmdline 도구를 사용하여 파일 형식에 대한 추측을 할 수 있습니다.

1

--myboundary 스트림 정규 M-JPEG은 HTTP를 통해 멀티 콘텐츠로 스트리밍되고 있다는 표시이다. 이 스트림을 "있는 그대로"유지하고 재생할 수있는 잘 알려진 파일 형식은 없습니다 (즉,이 이름을 AVI으로 바꾸면 재생되지 않습니다).

형식 자체는 (boundary, subheader, JPEG image), (boundary, subheader, JPEG image), ... 등의 시퀀스입니다. 스트림에는 타임 스탬프가 없으므로 재생 속도는 플레이어에 따라 다릅니다.