2014-09-15 3 views
6

RTSP를 통해 카메라에서 비디오 스트림을 가져 와서 파일에 저장해야합니다. 이 모든 작업은 gstreamer를 통해 수행되어야합니다.gstreamer를 통해 RTSP 비디오 스트림을 MP4 파일에 저장하는 방법은 무엇입니까?

gst-launch-1.0 rtspsrc location=rtsp://192.168.1.184/live2.sdp ! queue ! rtph264depay ! avdec_h264 ! mp4mux ! filesink location=result3.mp4 

하지만 오류 제공합니다 : "잘못된 파이프 라인 : mp4mux0에 avdec_h264-0 연결할 수 없습니다"

gst-launch-1.0 rtspsrc location=rtsp://192.168.1.184/live2.sdp ! queue ! rtph264depay ! h264parse ! mp4mux ! filesink location=result3.mp4 

그것은 시작을

몇 가지 구글 검색 후, 나는 다음과 같은 시도 결과 파일은 VLC를 통해 재생할 수 없습니다.

올바른 명령은 무엇입니까? 그리고 h264parse와 avdec_h264 중 하나를 선택하면 이유를 설명해 주시겠습니까?

+2

@downvote : 제목을 제외하고이 질문에는 아무런 문제가 없습니다. @Juster : 1)'h264parse'없이 시도해 볼 수도 있습니다. 2) 스트림이 전혀 재생되지 않습니까? –

답변

6

두 번째 명령이 올바르게 보입니다. Raw h264 비디오 데이터는 "정렬"과 "스트림 형식"의 두 가지 특성을 가지므로 약간 까다 롭습니다. h264parse는 h264 데이터를 다른 h264 관련 GStreamer 요소에 필요한 형식으로 변환 할 수 있습니다.

avdec_h264는 디코더 요소입니다. 데이터를 표시하지 않으므로 데이터를 디코드하지 않으려 고합니다. RTSP 스트림의 인코딩 된 h264 데이터를 mp4 컨테이너 파일에 저장합니다.

파일이 재생되지 않으면 스트림이 양호한 지 확인하거나 다른 미디어 플레이어를 사용하여 작동하는지 확인해야합니다 (mplayer, Media Player, Quicktime 등).

"matroskamux"요소를 사용하여 matroska 컨테이너 파일로 멀티플렉싱 할 수도 있습니다.

+0

나는 matroska와 tsmux를 시도했다. 그 작업은 – Juster

10

mp4mux가 파일을 마무리 할 수 ​​있도록 -e 플래그 (스트림 끝)를 추가해야합니다. 그렇지 않으면 손상된 재생 불가능한 파일이 생성됩니다.

gst-launch -e rtspsrc location=url ! decodebin ! x264enc ! mp4mux ! filesink location=file.mp4 
+0

내 경우에는이 명령으로 재생 가능 파일을 만들었지 만 모든 프레임이 첫 번째 프레임처럼 보인다. 비디오가 정지 된 것처럼. – alexolut

+0

[vlc] (https://trac.videolan.org/vlc/ticket/17528)에 버그가있는 것 같습니다. – alexolut

관련 문제