RTMP를 통한 NodeJS 및 RED 5 미디어 서버
이것은 직접적인 "이를 수행하는 방법"이 아니라 개념적인 질문입니다.
일반적으로 HTML5 및 nodeJS / binaryJS에서 오디오를 스트리밍하는 플래시와 유사한 솔루션을 구현할 수 있습니까 (예 : webRTC 또는 기타에서 스트림 데이터를 가져 오는 위치에 관계없이). 그렇다면 어떻게 하시겠습니까?
여기서 발견 된 stackoverflow에 대한 문의 는 2010 년부터 한 번뿐입니다. NodeJS와 HTML5는 그 이후로 성장하고 성숙해졌습니다.
사람들이 일반적으로하는 일 : 멀티미디어 스트리밍 (예 : 비디오 또는 오디오)을 서버에 사용할 때 getUserMedia () 가 완전히 도착할 때까지 현재 시점에서 Flash를 능가 하는 것은 없습니다. 솔직히 99 년까지 시간 이 걸릴 수 있습니다. 브라우저 사용자의 %는 전혀 사용하게 될 것입니다.
데이터를 서버로 스트리밍하는 일반적인 방법은 클라이언트 Flash 또는 Flex 응용 프로그램을 사용한 다음 RED5 , FMS 또는 Wowza 와 같은 RTMP 프로토콜 기반 미디어 서버에 연결하는 것 입니다. 예를 들어 RTMP를 통해 마이크 입력을 전송하는 클라이언트 앱은 다음과 같을 수 있습니다 (단순 버전).
import flash.net.NetStream;
private var myMic:Microphone;
private var nc:NetConnection;
private var ns:NetStream
nc = new NetConnection();
ns = new NetStream(nc);
nc.connect(rtmp://localhost/serverApp);
myMic = Microphone.getMicrophone();
ns.attachAudio(myMic);
서버 응용 프로그램과 함께 데이터를 서버로 쉽게 스트리밍 할 수 있습니다.
내가하고 싶은 것 : 들어오는 RTMP 스트림을 포착하는 nodeJS (아마도 socketIO 및 binaryJS 구현) 에서 실행되는 앱 서버를 갖습니다 . 같은 것
//require
var rtmp = require('node-rtmp'),
var fs = require('fs');
//rtmp server address
var rtmpServer = 'rtmp://localhost';
//create a binary server listening that receives stream data
var RTMPServer = rtmp.RTMPServer();
var server = RTMPServer ({port: 1935});
server.on('connection', function(client){
//check if user is allowed to do so
rtmp.newStream(client.stream);
});
eventEmitters를 통한 사용자 상호 작용을 구별하기 위해 socketIO를 사용하는 것이 더 나을 수 있습니다.
장점은 무엇일까요? 일반적으로 말해서 이런 접근 방식을 만드는 것은 약간의 오버 헤드처럼 보이지만 저에게는 장점이있을 수 있으며 이에 대해 의견을 나누고 싶습니다.
- 예를 들어 express 및 socketIO를 실행하여 사용자 상호 작용을 쉽게 검증
- 플래시 (RTMP를 통해) 및 getUserMedia ()의 하이브리드 구현 (binaryJS 및 Mozilla AudioAPI를 추가하여 바이너리 전송 메커니즘을 통해)
- getUserMedia ()가 완전히 지원되면 플래시 구현을 쉽게 삭제할 수 있습니다.
- rtmp 후속 조치 및 일반적으로 사용자 상호 작용에 대한 더 많은 제어
- 서버 프레임 워크에 쉽게 구현
업데이트 : 저는 작성된 유일한 node-rtmp 패키지 를 책임지고있는 Mr. Malcontenti-Wilson과 이야기를 나눴습니다. 그 패키지 는 제대로 작성되지 않았고 그가 장애물에 부딪 혔기 때문에 8 개월 전에 작성되었지만 중단되었습니다. 이것을 사용하거나 코드를 확인할 수 있었던 사람이 있습니까?
업데이트 2 : Mr. Malcontenti-Wilson 은 우리가 원하는 일을하고있는 node-mtrude (일종의 이상한 이름)에 대한 나의 관심을 끌기 위해 메일을 보냅니다 . 이런 종류의 패키지로 작업하는 사람이 있습니까?
예, 가능하지만 몇 가지 문제가 있습니다.
1) Red5는 문서화가 매우 부족하고 버그가 있습니다.
2) rtmpe / rtmps
3) 성능 / 확장 성
4) 1부터 3까지는 극복 할 수 있지만 미디어 배포와 관련된 모든 문제를 매우 밀접하게 알지 못하면 극복 할 수 없습니다. 작업을 마치면 실제로 그것을 이해하는 800 명 중 한 명이 될 것입니다. 예기치 않은 문제를 해결하려면 긴 경로를 따라야합니다.
라는 플랫폼 지금이 vertx polygot 개발이 가능한 곳이 없습니다. 따라서 red5 jar는 기존 코드와 함께 서버 측에 포함될 수 있으며 rtmp 스트리밍 서버를 실행할 수 있습니다. 클라이언트 측에서는 video.js 또는 JW 플레이어와 같은 것을 사용하여 스트림을 재생할 수 있으며 플래시 폴백 정책이 있습니다. 클라이언트 측 게시, 사용 가능한 자바 스크립트 기반 RTMP 구현이 있는지 확실하지 않습니다.
WCS 는 Flash, WebRTC, SIP, Websockets 및 Wowza 호환 프로토콜 (RTSP, RTMP)을위한 하이브리드 구현입니다.
이것은 오래된 질문이지만, 나는 이것을 우연히 발견 할 사람들을 위해이 대안을 게시하고 있습니다. 노드 미디어 서버 는 꽤 좋은 미디어 서버입니다. 내 poc 중 하나에서 사용했으며 rtmp https://www.npmjs.com/package/node-media-server를 지원합니다.
git repo도 꽤 활발합니다. 사실 내 poc에서 사용하기 전에 몇 가지 변경 작업을 수행했습니다. 그리고 코드도 잘 작성되었습니다. https://github.com/illuspas/Node-Media-Server
추신. 라이브 스트리밍을위한 OBS의 매력처럼 작동합니다.
참고 URL : https://stackoverflow.com/questions/13052530/nodejs-and-red-5-media-server-via-rtmp
'development' 카테고리의 다른 글
중첩 된 HttpModule EndRequest 이벤트 핸들러가 실행되지 않는 이유는 무엇입니까? (0) | 2020.12.09 |
---|---|
Izpack이 '파일 확장자“.js”에 대한 스크립트 엔진이 없습니다. (0) | 2020.12.09 |
getToken ()이 실패했습니다. (0) | 2020.12.09 |
런타임에 결정된 대형 구조체 유형을 반환하는 IMP 함수를 구현하는 방법은 무엇입니까? (0) | 2020.12.09 |
Cassandra 서버에서 java.lang.AssertionError : DecoratedKey (…)! = DecoratedKey 발생 (0) | 2020.12.09 |