diff -ruN mythtv-0.25.0~master.20120316.53761e2/mythtv/libs/libmythtv/firewirerecorder.cpp mythtv-0.25.0~master.20120316.53761e2-asp1/mythtv/libs/libmythtv/firewirerecorder.cpp
--- mythtv-0.25.0~master.20120316.53761e2/mythtv/libs/libmythtv/firewirerecorder.cpp	2012-03-20 21:36:33.183671751 -0300
+++ mythtv-0.25.0~master.20120316.53761e2-asp1/mythtv/libs/libmythtv/firewirerecorder.cpp	2012-03-23 18:22:36.891044758 -0300
@@ -159,8 +159,16 @@
         // Pass or reject packets based on PID, and parse info from them
         if (lpid == GetStreamData()->VideoPIDSingleProgram())
         {
-            _buffer_packets = !FindMPEG2Keyframes(&tspacket);
-            BufferedWrite(tspacket);
+            ProgramMapTable *pmt = _stream_data->PMTSingleProgram();
+            uint video_stream_type = pmt->StreamType(pmt->FindPID(lpid));
+
+            if (video_stream_type == StreamID::H264Video)
+                _buffer_packets = !FindH264Keyframes(&tspacket);
+            else if (StreamID::IsVideo(video_stream_type))
+                _buffer_packets = !FindMPEG2Keyframes(&tspacket);
+
+            if ((video_stream_type != StreamID::H264Video) || _seen_sps)
+                BufferedWrite(tspacket);
         }
         else if (GetStreamData()->IsAudioPID(lpid))
         {
