diff --git a/components/audio/src/software_encoder.cpp b/components/audio/src/software_encoder.cpp
index 4a135e821afc46e3e2c13382fdcf6ad827510f7c..9a5da23a02982e492123bfb72063d609878d6c9b 100644
--- a/components/audio/src/software_encoder.cpp
+++ b/components/audio/src/software_encoder.cpp
@@ -91,16 +91,20 @@ bool SoftwareEncoder::_encodeOpus(const std::vector<short> &in, ftl::codecs::Pac
 
 	int channels = (cur_stereo_) ? 2 : 1;
 
-	pkt.data.resize(MAX_PACKET_SIZE);
+	int frame_est = (in.size() / (channels*FRAME_SIZE))+1;
+	pkt.data.resize(MAX_PACKET_SIZE*frame_est);
 	int count = 0;
 	int frames = 0;
 
 	unsigned char *outptr = pkt.data.data();
 
+	//LOG(INFO) << "Encode " << (in.size() / (channels*FRAME_SIZE)) << " audio frames";
+
 	for (unsigned int i=0; i<in.size(); i+=channels*FRAME_SIZE) {
 		short *len = (short*)outptr;
 		outptr += 2;
 		int nbBytes = opus_multistream_encode(opus_encoder_, &in.data()[i], FRAME_SIZE, outptr, MAX_PACKET_SIZE);
+		//LOG(INFO) << "Opus encode: " << nbBytes << ", " << (in.size()-i);
 		if (nbBytes <= 0) return false;
 
 		//if (nbBytes > 32000) LOG(WARNING) << "Packet exceeds size limit";