Flex 와.NET 의 상호작용(13):FluorineFX.Net 은 영상 녹화 와 영상 재생 을 실현 합 니 다.
8198 단어 FluorineFX.Net 비디오 녹화비디오 재생
이 글 에서 저 는 FMS 를 통 해 온라인 동 영상 녹화 와 동 영상 재생 기능 을 실현 하 는 것 을 썼 습 니 다.클 라 이언 트 의 개발 은 이 글 과 같 고 다른 것 은 본 고 는 Flex 를 사용 하여 개발 할 것 입 니 다.
먼저 FluorineFx 서버 를 사용 하여 어떻게 개 발 했 는 지 살 펴 보 겠 습 니 다.ApplicationAdapter 를 구축 하 는 것 은 필연 적 인 것 입 니 다.여기 서 본 논문 의 예제 프로그램 을 위해 만들어 진 ApplicationAdapter 는 VideoApplication 이 고 Remoting Service Attribute 는 다음 과 같은 코드 블록 을 추가 합 니 다.
namespace Fx.Adapter{ ///
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):온라인 비디오 녹화,비디오 재생
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C\#SDL 2 를 실현 하여 영상 재생 창 캡 처 와 자막 추가SDL 2 를 사용 하여 영상 재생 창 캡 처 와 자막 추가 작업 을 진행 합 니 다. 주:이 캡 처 는 재생 창의 이미지 픽 셀 을 직접 가 져 와 서 이 루어 집 니 다. 재생 과정 에서 자막 을 표시 하려 면 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.