Exemplo n.º 1
0
        public override void RecordFrame(RecordingSession session)
        {
            if (m_Inputs.Count != 1)
            {
                throw new Exception("Unsupported number of sources");
            }

            var input = (BaseRenderTextureInput)m_Inputs[0];
            var frame = input.outputRT;

            if (!m_ctx)
            {
                var webmSettings = m_Settings.m_WebmEncoderSettings;
                webmSettings.video       = true;
                webmSettings.audio       = false;
                webmSettings.videoWidth  = frame.width;
                webmSettings.videoHeight = frame.height;
                if (m_Settings.m_AutoSelectBR)
                {
                    webmSettings.videoTargetBitrate = (int)(((frame.width * frame.height / 1000.0) / 245 + 1.16) * (webmSettings.videoTargetFramerate / 48.0 + 0.5) * 1000000);
                }

                webmSettings.videoTargetFramerate = (int)Math.Ceiling(m_Settings.frameRate);
                m_ctx = fcAPI.fcWebMCreateContext(ref webmSettings);
                var path = m_Settings.fileNameGenerator.BuildAbsolutePath(session);
                m_stream = fcAPI.fcCreateFileStream(path);
                fcAPI.fcWebMAddOutputStream(m_ctx, m_stream);
            }

            fcAPI.fcLock(frame, TextureFormat.RGB24, (data, fmt) =>
            {
                fcAPI.fcWebMAddVideoFramePixels(m_ctx, data, fmt, session.recorderTime);
            });
        }
Exemplo n.º 2
0
        public override void Initialize(object config, string outPath)
        {
            if (!fcAPI.fcWebMIsSupported())
            {
                Debug.LogError("WebM encoder is not available on this platform.");
                return;
            }

            m_config = (fcAPI.fcWebMConfig)config;
            if (m_config.audio && m_config.audioEncoder == fcAPI.fcWebMAudioEncoder.Opus)
            {
                var sampleRate = AudioSettings.outputSampleRate;
                if (sampleRate != 8000 && sampleRate != 12000 && sampleRate != 16000 && sampleRate != 24000 && sampleRate != 48000)
                {
                    Debug.LogError("Current output sample rate is " + sampleRate + ". It must be 8000, 12000, 16000, 24000 or 48000 to use Opus audio encoder. Fallback to Vorbis.");
                    m_config.audioEncoder = fcAPI.fcWebMAudioEncoder.Vorbis;
                }
            }

            m_config.audioSampleRate  = AudioSettings.outputSampleRate;
            m_config.audioNumChannels = fcAPI.fcGetNumAudioChannels();
            m_ctx = fcAPI.fcWebMCreateContext(ref m_config);

            var path   = outPath + ".webm";
            var stream = fcAPI.fcCreateFileStream(path);

            fcAPI.fcWebMAddOutputStream(m_ctx, stream);
            stream.Release();
        }