development

RTMP를 통한 NodeJS 및 RED 5 미디어 서버

big-blog 2020. 12. 9. 21:10
반응형

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 (아마도 socketIObinaryJS 구현) 에서 실행되는 앱 서버를 갖습니다 . 같은 것

//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

반응형