public void FinallizeFile()
        {
            if (!Finallized)
            {
                lock (_writelock)
                {
                    try
                    {
                        Metadata.Meta["duration"]      = MaxTimeStamp / 1000.0;
                        Metadata.Meta["lasttimestamp"] = (double)MaxTimeStamp;
                        byte[] metadata = Metadata.ToBytes();


                        // 13 for FLV header & "0th" tag size
                        // 11 for 1st tag header
                        _fs?.Seek(13 + 11, SeekOrigin.Begin);
                        _fs?.Write(metadata, 0, metadata.Length);
                    }
                    catch (Exception ex)
                    {
                        logger.Error(ex, "保存录制文件时出错");
                    }
                    finally
                    {
                        _fs?.Close();
                        _buffer.Close();
                        _data.Close();
                        Tags.Clear();

                        Finallized = true;

                        StreamFinalized?.Invoke(this, new StreamFinalizedArgs()
                        {
                            StreamProcessor = this
                        });
                    }
                }
            }
        }
예제 #2
0
 internal void ReportStreamFinalized() => StreamFinalized?.Invoke();