2014-09-02 10 views
-2

비디오 채팅이 진행될 때 생성되는로드와 비슷한 Red5 서버에로드를 생성하는 응용 프로그램을 작성하려고합니다. 모든 것이 자동으로 실행되어야합니다. 그래서 채팅 응용 프로그램이 어떻게 작동하는지 이해하려고합니다. 여기에 내가 알아 낸 것이있다. 내가 틀렸다면 나를 바로 잡아주세요 :카메라 및 마이크없이 RTMP 및 Red5를 사용하여 비디오 채팅 시뮬레이션

User1과 User2는 채팅 중입니다. 플렉스 클라이언트가 작성되어 User1과 User2의 로컬에서 실행됩니다. Flex 클라이언트 User1과 User2는 동시에 웹캠 비디오 및 마이크 오디오 녹음을 시작합니다. 그러면 스트리밍되는 원시 비디오 파일 (이 비디오의 형식은 무엇입니까?)이 만들어집니다. 스트림 채널은 Red5와 함께 설정됩니다. Flex 코드에서 NetConnection 명령을 사용하여 Red5 응용 프로그램에 대한 스트림을 설정합니다. 클라이언트 측의 원본 오디오 비디오는 서버로 스트리밍되며 FLV 파일로 저장됩니다. User1의 FLV 파일은 .flv로 저장되고 User2의 FLV 파일은 .flv로 저장됩니다. 이제 User2는 Red5와의 연결을 설정하여 .flv로 스트리밍하고 User1은 Red5와의 연결을 설정하여 .flv로 스트리밍합니다. 모든 사용자 측에서 비디오가 업데이트 될 때마다 해당 FLV 파일이 업데이트됩니다. 최종 사용자는 여전히 스트림을 열어두고 새 비디오는 최종 사용자에게 스트리밍됩니다. 이것은 비디오 채팅이 작동하는 방식입니다.

  1. 은 웹캠과 마이크없이 대화를 시뮬레이션 I가 플렉스 클라이언트를 작성 할 수 있습니다 단지 클라이언트 측에서 FLV 파일을 업로드하려면이 올바른 이해 경우

    지금, 나는 다음과 같은 질문이 설정된 스트림을 통해 서버 측으로? 클라이언트 측에서 NetConnection을 사용하여 스트림에 연결합니다. 어떤 종류의 서버 측 코드가 클라이언트 측에서 FLV를 수신하여 서버 측에서 저장하도록 작성해야합니까? 그리고이 스트리밍은 웹캠 비디오의 스트리밍과 비슷해야합니다.

  2. User1에 의해 업로드 된 동일한 FLV 파일을 스트림 다운로드하도록 어떻게 User2에 지시 할 수 있습니까? 내 말은, 여러 사용자가 "채팅"하기를 원한다고 가정 해보십시오. 즉, 여러 스트림이 만들어집니다. 각 최종 용도는 어떻게 알 수 있습니까? 어떤 특정 FLV 파일을 다운로드해야합니까? 또한 최종 사용자는 FLV 파일 다운로드를 언제 시작할 수 있습니까? User1이 지속적으로 서버 측에 저장되는 FLV 파일을 업데이트하고 있습니다. User2는 비디오 파일이 업데이트되었고 스트림을 스트리밍 할 시점을 어떻게 알 수 있습니까?

귀하의 도움에 감사드립니다 !!

답변

1

Red5 1.0 최종 버전을 사용하고 있다고 가정합니다.

"스트림 비디오의 형식은 무엇입니까?"라고 대답하는 것으로 시작하겠습니다. Red5는 FLV 비디오 및 MP3 오디오를 스트리밍 할 수 있지만 FLV 만 기록합니다 (이제는 red5가 h264 비디오를 스트리밍 할 수 있음).

테스트를 위해 webcam (...) juste를 대체하는 데 FLV 파일을 사용하는 방법에 대해 물어 보았습니다.이 방법은 좋은 생각이 아니므로 간단한 방법이 있습니다. 그러나 응용 프로그램을 테스트하는 데 도움이되는 manycam.com과 같은 세 번째 소프트웨어를 사용하여 많은 가상 웹캠을 만들 수 있습니다.

하지만 red5 서버에 비디오를 업로드 (실시간으로 게시하지 않음)하고 싶다면 red5 서비스가 없어도 가능합니다. red5는 Tomcat 서버이므로 Java 웹처럼 비디오를 업로드 할 수 있습니다. 응용 프로그램, rtmp를 잊어 버리고 간단한 자바 HTTP 파일 업로드를 사용하면이 비디오를 브로드 캐스트 할 수 있습니다.

해당 FLV를 수신하려면 어떤 종류의 서버 측 코드를 작성해야합니까? 동영상을 스트리밍하면 서버 측에서 생각할 필요가 없습니다. red5/webapps/your_application_name에 응용 프로그램 빈 폴더를 만드십시오.그러나 더 많은 일을해야 할 경우 애플리케이션을 구현해야합니다.

다음은이 작업에 도움이되는 주석 처리 된 코드 모음입니다! RED5 서버에

스트림 웹캠/마이크 :

var nsOut:NetStream; //Out NetStream var cam:Camera; //camera instance var mic:Microphone;//microphone instance //"nc" is a NetConnection instance connected to red5 application. nsOut = new NetStream(nc); //setting the microphone mic = Microphone.getMicrophone(0); mic.codec = SoundCodec.SPEEX; mic.encodeQuality = 4; mic.setUseEchoSuppression(true); //setting the microphone try{ //Create camera instance using Camera.names array to choose the right one! cam = Camera.getCamera(Camera.names[0]); //Camera.names[1] for second camera and so on. //Camera Settings cam.setKeyFrameInterval (15); cam.setMode (240,180,15,false); cam.setMotionLevel (35,3000); cam.setQuality (40000/8,0); }catch(e:Error){ Alert.show("Webcam error!"); } nsOut.attachCamera (cam); // attach camera to NetStream nsOut.attachAudio(mic); //attach microphone to NetStream nsOut.publish ("client_1_stream"); //start streaming //finaly to show outgoing cam video var vid:Video = new Video(160,120); this.addChild (vid); vid.attachCamera(cam);

재생 비디오 스트림 : 이것은 client_1에서 RED5 서버에 웹캠/마이크를 게시 어떻게 exemple 코드 이제 Red5 서버에 NetStream "client_1_stream"이 게시되어 다른 연결된 사용자가 재생할 준비가되었습니다. 그러면 client_2가이 str을 표시하는 방법입니다 EAM :이 어떤 서버 측 코드가 필요하지 않습니다에 대한 지금 당신은 아이디어가

var nsIn:NetStream; //Incoming NetStream nsIn = new NetStream(nc); nsIn.play("client_1_stream"); //finaly to show incoming video var vid:Video = new Video(160,120); this.addChild(vid); vid.attachNetStream(nsIn);

에 대해,/플레이 동영상을 게시 할 수 있습니다.

파일을 red5 서버에 업로드 : java 서블릿을 사용하여 파일을 red5에 업로드하는 것에 대한 좋은 게시물입니다. Upload file to Red5 server

어떻게 같은 FLV 파일 client_1에 의해 업로드 된 를 다운로드 client_2를 스트리밍하려면 알 수 있나요?

우리의 목표는 업로드 된 파일 이름을 client_2로 보내어 재생하는 것입니다. 이를 완료하려면 client_1은 client_2 코드에서 함수를 호출하는 서버 측 함수를 호출해야합니다. client_1 function -- call --> server function -- call --> client_2 function.

클라이언트 측에서는 서버 측에서 견인 기능과 하나의 기능이 필요합니다! fileUploadSuccess()라는 첫 번째 클라이언트 함수는 red5 응용 프로그램 userFileUploded (fileName)에서 함수를 호출합니다.이 함수는 올바른 사용자를 찾고 onFileUploadSuccess (fileName)라는 client_2 함수를 호출합니다. fileUploadSuccess() -- call --> userFileUploded(fileName) -- call --> onFileUploadSuccess(fileName).

이것은 FMS 및 red5 응용 프로그램에서 사용되는 매우 잘 알려진 기술입니다. 많은 도움이 필요하면 많은 예제를 찾을 수 있습니다. 그렇지 않으면 일부 코드를 공유 할 수 있습니다.

red5 sharedObject를 사용하여이 작업을 수행 할 수도 있지만 개인적으로는 첫 번째 해결 방법을 선호합니다.

당신 생각 :

+0

답장을 보내 주셔서 감사합니다. 이것은 정말 도움이됩니다! 내가 가진 한 가지 질문. 일련의 작업 : 웹캠 화면 캡처, Red5로 스트리밍 한 다음 다른 사용자가 읽는 것은 비디오가 서버 측 어디에서나 녹화되는 것입니까? 아니면, client1 스트림이 파일에 client2 스트림에 의해 읽혀지며, 아무 것도 저장되지 않습니다. 서버 측에서 스트리밍하는 웹캠을 녹화하려면 (FLV 파일로 저장하기 위해) 어떤 코드를 작성해야합니까? – kajarigd

+0

클라이언트 측에서는 비디오 게시를 시작할 때 다음과 같이해야합니다. nsOut.publish ("client_1_stream", "record"); – Gouba