2017-11-19 18 views
0

MP4를 스트리밍하려고합니다.세그먼트없이 HTTP를 통한 MP4 스트림

MP3를 스트리밍하면 RTMP 또는 IceCast를 통해 무언가로 스트리밍하고 HTTP를 통해 볼 수 있습니다 (그러나 HLS는 없음). 라이브 MP3 파일은 다음과 같습니다 : http://example.com/live.mp3. 여기서 라이브 생성 된 MP3를들을 수 있습니다.

이제 MP4를 사용하여 시뮬레이트하고 싶습니다. MP4 (AVC/H.264)를 (RTMP를 통해) 서버로 스트리밍하고이 위치에서 실시간 스트리밍을 수신하고 싶습니다. http://example.com/live.mp4. HLS (M3U8 파일과 TS 파일)를 사용하고 싶지 않습니다.

이것이 가능합니까?

FastStart/WebOptimised MP4로 변환 한 후 이미 생성 된 MP4와 작동하지만, 라이브 mp4가 필요합니다.

+0

비디오 사운드를 포함 하는가 : 브라우저 ;-)

는 소스에 어떤 플러그인을 설치하지 않고? 침묵하는 경우 (예 : CCTV 보안 카메라에서) 거기에 대한 해결책이있을 수 있습니다. –

+0

비디오에 소리가 들립니다. –

+0

@ VC.One 내가 묻는다면 소리없이 당신의 해결책은 무엇이겠습니까 – Harry

답변

3

우선 사과와 바나나를 비교하십시오. mp3는 코덱이고 mp4는 컨테이너입니다.

mp4 파일을 "스트리밍"하는 경우 디코더에 무엇을보고 있는지에 대한 단서를 제공하지 않고 바이너리 데이터를 스트리밍하면됩니다. 그 HLS와 주식이 들어오는 그 곳.

당신이 언급하는 것에 따라, mp3를 스트리밍하기 위해, 사람은 Icecast 또는 rtmp 서버와 같은 약간의 추가를 필요로한다. AVC/AAC를 스트리밍하려는 경우와 동일합니다. 예 : DASH, HLS, rtmp, rtsp, mpeg2 전송 스트림을 사용하는 udp (컨테이너로 제공되며 스트림 준비 됨) (대부분의 것들은 어떻게 든 mpeg2ts를 기반으로합니다)

문제는 클라이언트 측 요구 사항과 관련이 있습니다. HTML5 호환 및 교차 플랫폼을 원한다면 현재 기본적으로 라이브 스트리밍을 위해 HLS 또는 DASH 만 사용할 수 있습니다.

수신자 응용 프로그램이 Flash 또는 HTML5와 다른 것일 수있는 경우 추가 스트리밍 서버 사용을 암시하지 않는 가장 간단한 방법 중 하나는 mpeg2 전송 스트림의 UDP 스트리밍을 사용하는 것입니다.

당신이 다른 기술의 작동 방식을 생각 얻을 수 있습니다, 그래서 내가 매우 단순화 된 그림을 추가 할 것입니다

:

Streaming methods

은 또한 끊임없이 새로운 기술이오고됩니다, 예를 들어, 최근 응용 프로그램에서 HTML5 브라우저로 라이브 스트리밍하는 경우 WebRTC를 사용합니다.

이론적으로 .mp4 바이너리 데이터를 스트리밍 할 수는 있지만 클라이언트는이를 위해 매우 잘 준비되어야합니다. 클라이언트가 파일 시작 부분에 moov Atom을받지 못하면 실제로는 더 이상 mp4 스트림을 수신하지 않고 이진 AVC/AAC 스트림 만 수신합니다. 이것은 MPEG DASH가 작동하는 방식과 다소 차이가 있습니다. 짧은 시간 동안 바이너리 파일 청크와 함께 별도의 파일로 디코딩에 필요한 정보를 저장합니다.

난 그냥 그 위에, 여기에 관련된는 FFmpeg 명령을 밟은

[편집] :

ffmpeg -i D:\input.mxf -s 640x360 -hls_list_size 30 -hls_flags delete_segments+append_list+omit_endlist -hls_list_size 1 -f hls c:\xampp\htdocs\out.m3u8 
다음

내가 다운로드 및 내 웹 서버의 루트에이 추출 : 거기에서 https://github.com/video-dev/hls.js

을 나는 데모 페이지를 오픈 hls.js : http://localhost/hls/demo/index.html - 그리고 거기에 내 m3u8 "http://localhost/out.m3u8"에 대한 URL을 입력하고 내 라이브 비디오를 잘 해줬습니다.Change ffmpeg input on the fly

+0

제대로, 나는 라이브 스트리밍을위한 FastStart MP4를 사용할 수 없지만, 그것을 부분적으로 나눌 필요가있다. –

+0

예, 파일 청크가 항상 발생합니다. HLS와 마찬가지로 단일 청크의 크기는 클라이언트가 "라이브"스트림으로 이동할 수있는 "오프셋"을 정의합니다. 또한 클라이언트는 mp4 청크의 "끊김없는"재생을 위해 준비해야 할 필요가 있습니다. – Harry

+0

서버가 'moov'로 된 MP4 헤더를 생성 한 후 모든 스트림을 스트리밍하면 가능하다고 생각했습니다. 샘플 및 AvcSamples를 'mdat'에 넣지 만 가능하지 않다면 HLS 또는 MPEG-DASH를 사용해야합니다. 그게 HTML5 비디오 태그에 의해 지원되는지 모르겠습니다. –