Flex 와.NET 의 상호작용(13):FluorineFX.Net 은 영상 녹화 와 영상 재생 을 실현 합 니 다.

이 를 통 해 우 리 는 온라인 영상 녹화,영상 생방송,영상 채 팅 과 영상 회의 등 유사 한 응용 프로그램의 개발 을 매우 편리 하 게 실현 할 수 있다.
 이 글 에서 저 는 FMS 를 통 해 온라인 동 영상 녹화 와 동 영상 재생 기능 을 실현 하 는 것 을 썼 습 니 다.클 라 이언 트 의 개발 은 이 글 과 같 고 다른 것 은 본 고 는 Flex 를 사용 하여 개발 할 것 입 니 다.
      먼저 FluorineFx 서버 를 사용 하여 어떻게 개 발 했 는 지 살 펴 보 겠 습 니 다.ApplicationAdapter 를 구축 하 는 것 은 필연 적 인 것 입 니 다.여기 서 본 논문 의 예제 프로그램 을 위해 만들어 진 ApplicationAdapter 는 VideoApplication 이 고 Remoting Service Attribute 는 다음 과 같은 코드 블록 을 추가 합 니 다.
namespace Fx.Adapter{    ///     /// 비디오 응용    ///     [RemotingService]    public class VideoApplication : ApplicationAdapter    {        public override bool AppStart(IScope application)        {            return base.AppStart(application);        }        public override bool AppConnect(IConnection connection, object[] parameters)        {            return base.AppConnect(connection, parameters);        }    }}
      ApplicationAdapter 템 플 릿 이 제공 하 는 방법 은 실제 프로젝트 개발 에서 자신의 수요 에 따라 재 작성 합 니 다.여 기 는 너무 많은 소 개 를 하지 않 습 니 다.이렇게 만 해도 영상의 녹화 와 재생 기능 을 실현 할 수 없다.이것 은 기본 적 인 시작 응용 프로그램 과 클 라 이언 트 연결 등 기본 적 인 기능 을 실 현 했 을 뿐이다.영상 녹화 와 재생 을 실현 하려 면 우 리 는 VideoApplication 으로 하여 금 ISTreamService 인 터 페 이 스 를 실현 하 게 해 야 한다.이 인 터 페 이 스 는 영상 발표 와 재생 을 실현 하 는 해당 기능 을 제공 하고 그 정 의 는 다음 과 같다.
namespace FluorineFx.Messaging.Api.Stream{    [CLSCompliant(false)]    public interface IStreamService : IScopeService, IService    {        void closeStream();        int createStream();        void deleteStream(int streamId);        void deleteStream(IStreamCapableConnection connection, int streamId);        void pause(bool pausePlayback, double position);        void play(bool dontStop);        void play(string name);        void play(string name, double start);        void play(string name, double start, double length);        void play(string name, double start, double length, bool flushPlaylist);        void publish(bool dontStop);        void publish(string name);        void publish(string name, string mode);        void receiveAudio(bool receive);        void receiveVideo(bool receive);        void releaseStream(string streamName);        void seek(double position);    }}
      OK,애플 리 케 이 션 프로세서 가 있 으 면 FluorineFx 사이트 의 apps 에 애플 리 케 이 션(VideoApp)을 추가 하고 이 프로 세 서 를 설정 하여 비디오 녹화 와 재생 을 처리 합 니 다.
    
      RTMP 프로 토 콜 을 사용 하려 면 RTMP 통신 채널 을 설정 하 는 것 이 빠 질 수 없습니다.설정 파일 WEB-INF/flex/service-config.xml 에 RTMP 프로 토 콜 을 사용 하 는 통신 채널 을 설정 합 니 다.
?xml version="1.0" encoding="utf-8" ?>                  
       이 FluorineFx 서버 의'기본'은 완 성 된 셈 입 니 다.다음은 클 라 이언 트 의 개발 로 넘 어가 Flex 프로젝트 를 구축 하고 인 터 페 이 스 를 설계 합 니 다.다음 그림:                        
      FluorineFx 서버 에 있 는 응용 프로그램 과 의 연결 을 구축 하고 연결 에 성공 하면 자신의 영상 데 이 터 를 인터페이스 에 표시 합 니 다.다음 과 같은 실현 코드 입 니 다.
private function connectionServer(event:MouseEvent):void{    nc = new NetConnection();    nc.connect("rtmp://localhost:1617/VideoRecord","beniao","123456");    nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStautsHandler);    nc.client = this;}private function onNetStautsHandler(event:NetStatusEvent):void{    if(event.info.code == "NetConnection.Connect.Success")    {        cam = Camera.getCamera();        if(cam != null)        {            this.myVideo.attachCamera(cam);        }        else        {            Alert.yesLabel = ""확인";            Alert.show("비디오 카메라 가 감지 되 지 않 았 습 니 다","시스템 알림");        }    }}
      동 영상 녹화 란 자신 이 본 컴퓨터 의 동 영상 카메라 에서 얻 은 동 영상 데이터 와 오디 오 장치 의 데 이 터 를 네트워크 스 트림(NetStream)에 추가 하고,네트워크 스 트림 을 사용 하 는 publish()방법 으로 서버 에 스 트림 하 는 것 으로,이 는 FMS 를 사용 하 는 것 과 같다.
private function onRecordVideo(event:MouseEvent):void{    if(this.nc)    {        var mic:Microphone = Microphone.getMicrophone();        ns = new NetStream(this.nc);        ns.attachCamera(cam);        ns.attachAudio(mic);        ns.client = this;        ns.publish(this.videoName.text,"record");        this.btnStart.enabled = false;        this.btnEnd.enabled = true;                    }}private function onStopRecord(event:MouseEvent):void{    if(this.nc)    {        this.nc.close();        this.btnStart.enabled = true;        this.btnEnd.enabled = false;        this.btnPlay.enabled = true;    }}
      비디오 녹 화 를 중단 하 는 기능 은 더욱 간단 합 니 다.현재 클 라 이언 트 와 서버 의 연결 을 직접 끊 으 면 네트워크 연결(NetConnection)의 close()방법 을 사용 할 수 있 습 니 다. 
              
     녹 화 된 동 영상 은 사이트 아래 의 apps/VideoApp/stream 디 렉 터 리 에 저 장 됩 니 다.다음 그림:                              
            
      녹 화 된 비디오 재생 을 실현 하 는 것 은 실제 적 으로 서버 에 있 는'flv 비디오 파일'을 재생 하 는 것 입 니 다.마찬가지 로 서버 측 과 의 네트워크 연결 을 먼저 구축 하고 네트워크 흐름 을 통 해 지정 한 비디오 파일 을 불 러 오고 마지막 으로 응용 인터페이스 에 표시 해 야 합 니 다.
private function onPlayVideo(event:MouseEvent):void{    nc = new NetConnection();    nc.connect("rtmp://localhost:1617/VideoRecord","beniao","123456");    nc.addEventListener(NetStatusEvent.NET_STATUS,onPlayNetStautsHandler);    nc.client = this;}private function onPlayNetStautsHandler(event:NetStatusEvent):void{    if(event.info.code == "NetConnection.Connect.Success")    {        ns = new NetStream(this.nc);        ns.client = this;        var video:Video = new Video();        video.width = 320;        video.height = 240;        video.attachNetStream(this.ns);        this.myVideo.addChild(video);        this.ns.play(this.videoName.text);    }}
      이로써 FluorineFX.Net 을 사용 하여 영상 녹화 와 재생 을 실현 하 는 기능 을 완 성 했 습 니 다.다음은 FluorineFX 가 녹화 영상 흐름 발표 와 실황 영상 흐름 의 안전 에 대해 어떻게 처리 하 는 지 살 펴 보 겠 습 니 다.FluorineFX.Messaging.api.stream.ISTream PublishSecurity 인 터 페 이 스 는 발표 흐름 을 처리 하 는 안전 처리 입 니 다.발표 흐름 을 안전 하 게 처리 하려 면 이 인 터 페 이 스 를 실현 하 는 안전 전략 류 를 사용자 정의 하고 전략 류 에서 자신의 실제 상황 에 따라 안전 설정 을 처리 합 니 다.
      이 안전 전략 류 를 통 해 발표 흐름 의 유형,흐름 의 이름,발표 흐름 에 대한 권한 수여 등 관련 작업 을 편리 하 게 판단 할 수 있다.다음 보안 정책 종류:
namespace Fx.Adapter{    public class PublishSecurity : IStreamPublishSecurity    {        public bool IsPublishAllowed(IScope scope, string name, string mode)        {            //스 트림            if (!"record".Equals(mode))            {                return false;            }            //파일 이름 이 test 로 시작 할 지 여부            if (!name.StartsWith("test"))                return false;            else                return true;        }    }}
      응용 프로그램 에서 응용 프로그램 어댑터 가 제공 하 는 RegisterStreamPublishSecurity()방법 으로 보안 정책 을 등록 합 니 다.이 방법의 정 의 는 다음 과 같 습 니 다.
public void RegisterStreamPublishSecurity(IStreamPublishSecurity handler); 
      
      발표 흐름 의 보안 정책 을 등록 하려 면 보통 응용 프로그램 시작 에 등록 합 니 다.다음 코드 블록:
public override bool AppStart(IScope application){    RegisterStreamPublishSecurity(new PublishSecurity());    return base.AppStart(application);}
      RegisterStreamPublishSecurity()방법 을 통 해 발표 흐름 의 보안 정책 을 등록 한 후,발표 흐름 이 사용자 정의 보안 정책 을 통 해 현재 발표 흐름 이 사용자 정의 보안 규칙 에 부합 되 는 지 확인 합 니 다.이렇게 편리 하면 다른 사람 이 악의 적 으로 당신 의 응용 프로그램 에 연결 하여 흐 르 는 발 표를 할 수 있 고 네트워크 대역 폭 을 소모 하 는 등 여러 가지 불리 한 현상 을 확보 할 수 있 으 며 더 많은 장점 은 연구 가 필요 합 니 다.FMS 3 시리즈(4):온라인 비디오 녹화,비디오 재생

좋은 웹페이지 즐겨찾기