private void EncodeAndWritePacket() { byte[] frameBuffer = new byte[FrameSize]; m_buffer.Read(frameBuffer, 0, frameBuffer.Length); fixed(byte *pcmSamples = frameBuffer) { if (m_disposed) { throw new ObjectDisposedException(this.ToString()); } AVPacket outPacket = new AVPacket(); FFmpeg.av_init_packet(ref outPacket); byte[] buffer = new byte[FFmpeg.FF_MIN_BUFFER_SIZE]; fixed(byte *encodedData = buffer) { try { outPacket.size = FFmpeg.avcodec_encode_audio(ref m_avCodecCtx, encodedData, FFmpeg.FF_MIN_BUFFER_SIZE, (short *)pcmSamples); outPacket.pts = m_avCodecCtx.coded_frame->pts; outPacket.flags |= FFmpeg.PKT_FLAG_KEY; outPacket.stream_index = m_avStream.index; outPacket.data = (IntPtr)encodedData; if (outPacket.size > 0) { if (FFmpeg.av_write_frame(ref m_avFormatCtx, ref outPacket) != 0) { throw new IOException("Error while writing encoded audio frame to file"); } } } finally { FFmpeg.av_free_packet(ref outPacket); } } } }