//This function needs to be called before
        //every connection
        /// <summary>
        /// Initializes and retrieves the ogg header packets from libogg and libvorbis.
        /// Must be called after <see cref="Init(Dictionary{string, string})"/> and before <see cref="Encode(byte[], byte[], int)"/>
        /// </summary>
        public void WriteHeader()
        {
            // Comments from vorbis ecoder example
            /* set up our packet->stream encoder */

            /* pick a random serial number; that way we can more likely build
             * chained streams just by concatenation */
            ogg_stream_init(osh.AddrOfPinnedObject(), m_rand.Next());
            ogg_packet header      = default(ogg_packet);
            ogg_packet header_comm = default(ogg_packet);
            ogg_packet header_code = default(ogg_packet);

            vorbis_analysis_headerout(vdh.AddrOfPinnedObject(), vch.AddrOfPinnedObject(), ref header, ref header_comm, ref header_code);
            ogg_stream_packetin(osh.AddrOfPinnedObject(), ref header); /* automatically placed in its own page */
            ogg_stream_packetin(osh.AddrOfPinnedObject(), ref header_comm);
            ogg_stream_packetin(osh.AddrOfPinnedObject(), ref header_code);
        }
 public static extern int ogg_stream_packetin(IntPtr os, ref ogg_packet op);
 public static extern int vorbis_analysis_headerout(IntPtr v, IntPtr vc, ref ogg_packet op, ref ogg_packet op_comm, ref ogg_packet op_code);