} //END InternalAudioSampleRecieved //------------------------------// private void CallStopRecordingEvent() //------------------------------// { #if NATCORDER if( NatCorder.IsRecording ) { if( showDebug ) Debug.Log( "BlockEventRecorder.cs CallStopRecordingEvent() calling NatCorder.StopRecording()" ); //If we were capturing audio samples from an AudioListener or AudioSource, destroy the AudioGetter.cs helper script attached to it if( audioGetter != null ) { audioGetter.StopRecordingAudio(); Destroy( audioGetter ); audioGetter = null; } //Stop the recording and convert the samples into a completed video file NatCorder.StopRecording(); if( onActionCompleted != null ) { onActionCompleted.Invoke(); } } #else Debug.LogError( "BlockEventRecorder.cs CallStopRecordingEvent() missing NATCORDER scripting define symbol under project settings" ); #endif } //END CallStopRecordingEvent
} //END CallStartRecordingBlockEventExternalCamera //-------------------------------// private void OnRecordingComplete( string path ) //-------------------------------// { //If our PersistentDataPath/VideoRecordings path does not exist, create it now if( !Directory.Exists( DatabaseStringHelper.CreatePersistentDataPath("VideoRecordings") ) ) { Directory.CreateDirectory( DatabaseStringHelper.CreatePersistentDataPath("VideoRecordings") ); } //Move the recording into the PersistentData folder under the 'VideoRecordings' subfolder if ( File.Exists( path ) ) { FileInfo fileInfo = new FileInfo( path ); if( fileInfo != null ) { File.Move( path, DatabaseStringHelper.CreatePersistentDataPath("VideoRecordings/" + fileInfo.Name ) ); path = DatabaseStringHelper.CreatePersistentDataPath("VideoRecordings/" + fileInfo.Name ); } } if( showDebug ) { Debug.Log( "BlockEventRecorder.cs OnRecordingComplete() adding path to list of captured videos = " + path ); } //Add our path to our list of recorded videos if( recordedVideos == null ) { recordedVideos = new List<string>(); } recordedVideos.Add( path ); #if NATCORDER //If we were capturing images from a passed in camera, dispose of the cameraRecorder at this time to free up memory if( cameraRecorder != null ) { cameraRecorder.Dispose(); cameraRecorder = null; } #endif //If we were capturing audio samples from an AudioListener or AudioSource, destroy the AudioGetter.cs helper script attached to it if( audioGetter != null ) { Destroy( audioGetter ); audioGetter = null; } #if NATCORDER //If we were capturing audio from the app, dispose of the audioRecorder at this time if( audioRecorder != null ) { audioRecorder.Dispose(); audioRecorder = null; } #endif if( onRecordingCompleted != null ) { onRecordingCompleted.Invoke( path ); } } //END OnRecordingComplete
} //END GetVideoFormatForBlockEventExternalCamera #endif //----------------------------------------------// private void CallStartRecordingBlockEventExternalCamera() //----------------------------------------------// { #if NATCORDER //We can only record one source at a time if( NatCorder.IsRecording ) { return; } //We can only record if the BlockEventExternalCamera is playing if( !blockEventExternalCamera.IsPlaying() ) { Debug.LogError( "BlockEventRecorder.cs CallStartRecordingBlockEventExternalCamera() We attempted to record from the attached BlockEventExternalCamera however it is not currently playing a camera stream" ); return; } //Tell our recording to begin expecting new frames //If our Video Container format is GIF, we cannot allow any kind of audio recording if( IsVideoContainerGIF() ) { NatCorder.StartRecording( container, GetVideoFormatForBlockEventExternalCamera(), AudioFormat.None, OnRecordingComplete ); } //If we are skipping audio recording, just record video in .MP4 format and skip audio else if( IsExtCameraAudioFormatNone() ) { NatCorder.StartRecording( container, GetVideoFormatForBlockEventExternalCamera(), AudioFormat.None, OnRecordingComplete ); } //Otherwise our audio should be based on the AudioSource or AudioListener via using the AudioGetter.cs script to grab audio samples else { //If our AudioListener or AudioSource has been setup properly, we can use it to grab audio samples if( IsRecordAudioTypeAudioListener() && audioListener != null ) { NatCorder.StartRecording( container, GetVideoFormatForBlockEventExternalCamera(), new AudioFormat( AudioSettings.outputSampleRate, (int)AudioSettings.speakerMode ), OnRecordingComplete ); //Remove any pre-existing audioGetter's if( audioGetter != null ) { Destroy( audioGetter ); audioGetter = null; } if( audioListener.gameObject.GetComponent<AudioGetter>() != null ) { Destroy( audioListener.gameObject.GetComponent<AudioGetter>() ); } //Add an AudioGetter to the linked AudioListener to recieve it's audio samples for encoding into the video audioGetter = audioListener.gameObject.AddComponent<AudioGetter>(); audioGetter.StartRecordingAudio( this ); } else if( IsRecordAudioTypeAudioSource() && audioSource != null ) { NatCorder.StartRecording( container, GetVideoFormatForBlockEventExternalCamera(), new AudioFormat( AudioSettings.outputSampleRate, (int)AudioSettings.speakerMode ), OnRecordingComplete ); //Remove any pre-existing audioGetter's if( audioGetter != null ) { Destroy( audioGetter ); audioGetter = null; } if( audioSource.gameObject.GetComponent<AudioGetter>() != null ) { Destroy( audioSource.gameObject.GetComponent<AudioGetter>() ); } //Add an AudioGetter to the linked AudioSource to recieve it's audio samples for encoding into the video audioGetter = audioSource.gameObject.AddComponent<AudioGetter>(); audioGetter.StartRecordingAudio( this ); } //If BlockAudio is selected... else if( IsRecordAudioTypeBlockAudio() && blockAudio != null ) { NatCorder.StartRecording( container, GetVideoFormatForBlockEventExternalCamera(), new AudioFormat( AudioSettings.outputSampleRate, (int)AudioSettings.speakerMode ), OnRecordingComplete ); //Remove any pre-existing audioGetter's if( audioGetter != null ) { Destroy( audioGetter ); audioGetter = null; } if( blockAudio.gameObject.GetComponent<AudioGetter>() != null ) { Destroy( blockAudio.gameObject.GetComponent<AudioGetter>() ); } //Add an AudioGetter to the linked blockAudio to recieve it's audio samples for encoding into the video audioGetter = blockAudio.gameObject.AddComponent<AudioGetter>(); audioGetter.StartRecordingAudio( this ); } //Otherwise set our AudioFormat to None, we do not need to recieve audio samples else { NatCorder.StartRecording( container, GetVideoFormatForBlockEventExternalCamera(), AudioFormat.None, OnRecordingComplete ); } } //Request the frames from the ExternalCamera, these frames are sent to _ExternalCameraFrameRecieved blockEventExternalCamera.RequestFrames( this ); #else Debug.LogError( "BlockEventRecorder.cs CallStartRecordingBlockEventExternalCamera() missing NATCORDER scripting define symbol under project settings" ); #endif } //END CallStartRecordingBlockEventExternalCamera