2010-01-21 4 views
8

사용자 로컬 하드 디스크에 저장된 FLV 파일에 웹캠의 비디오 및 오디오를 기록하려고합니다. 네트워크에서 FMS (Red5) 서버로 비디오를 스트리밍하기 위해 NetConnection 및 NetStream을 사용하는이 코드 버전이 있지만 대역폭이 낮거나 불안정한 네트워크 상황에서 로컬로 비디오를 저장할 수 있어야합니다. 저는 FLex 3.2와 AIR 1.5를 사용하고 있습니다. 따라서이 문제를 방지하는 샌드 박스 제한이 있어야한다고 생각하지 않습니다.비디오를 AIR의 로컬 디스크에 어떻게 기록합니까?

상황은 내가 본 적이 :

  • FileStream - 한 FLV를 만들기위한 로컬 파일하지만 .attachCamera 및 .attachAudio의 methids을 reading.writing 수 있도록합니다.
  • flvrecorder - 웹캠에서 화면 캡처를 생성하고 자체 flv 파일을 만듭니다. 오디오를 지원하지 않습니다. 라이센스로 인해 상업적 사용이 금지됩니다.
  • SimpleFLVWriter.as - wierd 라이센스가없는 flvrecorder와 유사합니다. 오디오를 지원하지 않습니다.
  • This stackoverflow post - NetConnection/NetStream을 사용하여 로컬 디스크에서 비디오를 재생하는 방법을 보여줍니다.

NetStream을 사용하여 서버로 스트리밍하는 버전이 있으므로 가장 마지막에 가장 유망한 것으로 생각하고이 데모 응용 프로그램을 작성했습니다. 코드는 오류없이 컴파일되고 실행되지만 디스크에 중지 버튼이 클릭 된 FLV 파일이 없습니다. 는 -

<mx:Script> 
    <![CDATA[ 

     private var _diskStream:NetStream; 
     private var _diskConn:NetConnection; 
     private var _camera:Camera; 
     private var _mic:Microphone; 

     public function cmdStart_Click():void { 
      _camera = Camera.getCamera(); 
      _camera.setQuality(144000, 85); 
      _camera.setMode(320, 240, 15); 
      _camera.setKeyFrameInterval(60); 

      _mic = Microphone.getMicrophone(); 

      videoDisplay.attachCamera(_camera); 

      _diskConn = new NetConnection(); 
      _diskConn.connect(null); 

      _diskStream = new NetStream(_diskConn); 
      _diskStream.client = this; 
      _diskStream.attachCamera(_camera); 
      _diskStream.attachAudio(_mic); 
      _diskStream.publish("file://c:/test.flv", "record"); 

     } 

     public function cmdStop_Click() { 
      _diskStream.close(); 
      videoDisplay.close(); 
     } 

    ]]> 
</mx:Script>  
    <mx:VideoDisplay x="10" y="10" width="320" height="240" id="videoDisplay" /> 
    <mx:Button x="10" y="258" label="Start" click="cmdStart_Click()" id="cmdStart"/> 
    <mx:Button x="73" y="258" label="Stop" id="cmdStop" click="cmdStop_Click()"/> 

</mx:WindowedApplication> 

작업, 또는 NetStream을 그냥 비디오를 녹화하려면이 WANY에 악용 될 수 없습니다에서 그것을 방해하는 위의 코드에 뭔가 문제 중 하나가 있다는 것을 나에게 보인다.

내가 알고 싶은 것은 위의 코드에 무엇이 (있는 경우) 무엇입니까? b) NetStream이 디스크에 레코딩을 지원하지 않으면 오디오 및 비디오를 사용자 로컬 하드 디스크의 파일에 캡처하는 다른 방법이 있습니까?

미리 감사드립니다.

+0

가 왜 AIR 2.0을 사용하는? 마이크 녹음을 위해 AIR 2.0 기능을 사용하는 것이 더 쉬울 수도 있습니다 ... AIR 2.0을 사용하면 적어도 비디오를 압축 할 수 있습니다 (Alchemy를 사용하지 않음). 또는 적어도 스트림 파일 시스템에 쓰지 않기 위해 재생할 수 있습니다. – Rella

+0

묻는 시점에 AIR 2.0은 아직 베타 버전이었습니다. 나는 그것을 들여다 보았고, 가능하게 만들 카메라 나 FileStrewam 객체를위한 추가 API를 가지고 있지 않은 것으로 보입니다. 그러나 AIR 2.0이 카메라의 로컬 기록을 허용한다면, 확실히 사용할 것입니다. –

답변

2

Windows Media 인코더 또는 Red5 또는 Adobe 미디어 서버 또는 다른 것과 같은 일부 스트리밍 서비스를 사용하지 않고 비디오를 로컬 디스크로 직접 스트리밍 할 수 없습니다.

나는 현재까지 해결책이없는 인터넷에서 모든 샘플을 시험해 보았습니다.

또 다른 가능성이 링크에서보기 :

http://www.zeropointnine.com/blog/updated-flv-encoder-alchem/

0

나는 또한 똑같은 일을하려하지만, avchat.net의 개발자로부터 AIR로이 작업을 수행 할 수 없다는 말을 들었습니다. 당신이 그것을하는 방법을 찾으면, 나는 알고 싶습니다!

또한 난 그냥 아무것도에 연결시키는 (NULL)이 작동하지 않는 생각, 그것은 잘 http://www.zeropointnine.com/blog/webcam-dvr-for-apollo/

+0

안녕하세요, 웹캠 DVR 뒤에있는 비디오 녹화 백엔드는 제가 좋아했던 SimpleFLVRecorder.as입니다. SimpleFLVWriter.as의 주요 문제점은 웹캠 비디오와 함께 오디오 녹음을 지원하지 않는다는 것입니다. 내 응용 프로그램에서 오디오는 매우 중요합니다 (실제로 오디오 만 녹음하는 솔루션이며 오디오가없는 비디오보다 비디오가 더 좋을 수 없습니다). –

0

입니다 확실하지 얼마나 도움이 링크를 발견했다. 이미 localhost에 연결하려고했지만 이미 해결되지 않았습니다. 나는 이것이 가능하다고 생각하지 않는다. 스트리밍 비디오는 로컬이 아닌 Flash Media Server 및 Red5에서만 작동합니다. PC에 Red5를 설치할 수 있습니까?

+0

목적은 사용자가 비디오를 녹화하고 나중에 Red5 서버에 업로드하는 데 사용할 수있는 웹 사이트 (AIR가 허용하는대로 이상적으로 설치되는)에서 사용자가 다운로드하는 "응용 프로그램"을 제공하는 것입니다. Red5를 로컬 시스템에 설치하면 응용 프로그램을 설치하는 별도의 설치 프로그램을 만들고 사용자를 위해 Red5를 만들어야합니다. 우리가 원하는 seamles 경험이 아닙니다. –

0

슬프게도 카메라의 플래시 비디오 지원은 매우입니다. 원시 스트림을 스트리밍 할 때 FLV로 인코딩해야하고 실시간으로 처리하면 매우 빠른 컴퓨터가 필요합니다. 1 세대 개념은 파일에 원시 비트 맵을 쓰거나 배열을 직렬화 한 다음 두 번째 방법은 파일을 FLV로 변환합니다. 기본적으로 카메라를 폴링하고 각 프레임을 비트 맵으로 저장 한 다음 배열에 스택해야합니다. 이것은 매우 제한되어 있으며 오디오를 재생할 수 없습니다. 5-10fps 이상으로 올라가는 것도 매우 어려웠습니다.

제로 포인트 9의 신사는 새로운 버전과 함께 올바른 경로를 찾아 냈습니다.the new flv recorder을보십시오. 나는이 작업을 위해 많은 시간을 보냈지 만, 내 필요 (2 대의 카메라)를 위해 일하지는 못했습니다. 나는 단지 필요한 FPS를 얻을 수 없었다. 그러나 그것은 당신을 위해 일할 수도 있습니다. 그것은 원래의 방법보다 훨씬 빠릅니다.

내가 아는 유일한 작업 옵션은 Red5에서 비디오를 저장하고 다시 응용 프로그램에 다운로드하는 것입니다.

2

내 솔루션은 Red5를 AIR에 포함시키는 것이 었습니다. 당신과 함께 공유 내 기사 일반적으로

http://mydevrecords.blogspot.com/2012/01/local-recording-in-adobe-air-using-red5.html

이 솔루션은 자산처럼 AIR에 무료로 미디어 서버 Red5의를 포함하는 것입니다. 따라서 서버는 AIR 응용 프로그램 폴더에 있습니다. 그런 다음 NativeProcess를 통해 Red5를 실행하고 해당 인스턴스를 메모리에 저장할 수 있습니다. 결과적으로 네트워크 문제없이 로컬 비디오 녹화를 할 수 있습니다.

+0

스택 오버플로에 오신 것을 환영합니다! 이것이 이론적으로 질문에 대답 할 수 있지만 여기에 답의 핵심 부분을 포함하고 참조 용 링크를 제공하는 것이 바람직합니다 (http://meta.stackexchange.com/q/8259). –

+0

안녕하세요. 감사. 문제는 단지 의견의 본문에 솔루션을 설명하기가 약간 어렵다는 것입니다. 일반적으로 솔루션은 무료 미디어 서버 인 Red5를 자산처럼 AIR에 포함시키는 것입니다. 따라서 서버는 AIR 응용 프로그램 폴더에 있습니다. NativeProcess를 통해 Red5를 실행하고 인스턴스를 메모리에 저장할 수 있습니다. 결과적으로 네트워크 문제없이 로컬 비디오 녹화를 할 수 있습니다. – walv

+0

감사. 귀하의 답변에 귀하의 의견을 기재했습니다. –

관련 문제