diff --git a/src/cam/main.cpp b/src/cam/main.cpp
index da05612b1c347b31..da5ca3402ce1a823 100644
--- a/src/cam/main.cpp
+++ b/src/cam/main.cpp
@@ -23,6 +23,7 @@ using namespace libcamera;
 
 OptionsParser::Options options;
 std::shared_ptr<Camera> camera;
+std::map<Stream *, std::string> streamInfo;
 EventLoop *loop;
 BufferWriter *writer;
 
@@ -87,9 +88,12 @@ static int prepareCameraConfig(CameraConfiguration *config)
 {
 	std::vector<StreamUsage> roles;
 
+	streamInfo.clear();
+
 	/* If no configuration is provided assume a single video stream. */
 	if (!options.isSet(OptStream)) {
 		*config = camera->streamConfiguration({ Stream::VideoRecording() });
+		streamInfo[config->front()] = "stream0";
 		return 0;
 	}
 
@@ -142,31 +146,42 @@ static int prepareCameraConfig(CameraConfiguration *config)
 			(*config)[stream].pixelFormat = conf["pixelformat"];
 	}
 
+	for (unsigned int i = 0; i < config->size(); i++)
+		streamInfo[(*config)[i]] = "stream" + std::to_string(i);
+
 	return 0;
 }
 
 static void requestComplete(Request *request, const std::map<Stream *, Buffer *> &buffers)
 {
 	static uint64_t last = 0;
+	double fps = 0.0;
 
 	if (request->status() == Request::RequestCancelled)
 		return;
 
-	Buffer *buffer = buffers.begin()->second;
+	for (auto it = buffers.begin(); it != buffers.end(); ++it) {
+		Stream *stream = it->first;
+		Buffer *buffer = it->second;
+		std::string name = streamInfo[stream];
 
-	double fps = buffer->timestamp() - last;
-	fps = last && fps ? 1000000000.0 / fps : 0.0;
-	last = buffer->timestamp();
+		if (it == buffers.begin()) {
+			fps = buffer->timestamp() - last;
+			fps = last && fps ? 1000000000.0 / fps : 0.0;
+			last = buffer->timestamp();
+		}
 
-	std::cout << "seq: " << std::setw(6) << std::setfill('0') << buffer->sequence()
-		  << " buf: " << buffer->index()
-		  << " bytesused: " << buffer->bytesused()
-		  << " timestamp: " << buffer->timestamp()
-		  << " fps: " << std::fixed << std::setprecision(2) << fps
-		  << std::endl;
+		std::cout << name << " seq: " << std::setw(6)
+			  << std::setfill('0') << buffer->sequence()
+			  << " buf: " << buffer->index()
+			  << " bytesused: " << buffer->bytesused()
+			  << " timestamp: " << buffer->timestamp()
+			  << " fps: " << std::fixed << std::setprecision(2) << fps
+			  << std::endl;
 
-	if (writer)
-		writer->write(buffer, "stream0");
+		if (writer)
+			writer->write(buffer, name);
+	}
 
 	request = camera->createRequest();
 	if (!request) {
