Index: mythtv/libs/libmythtv/mpegrecorder.h
===================================================================
--- mythtv/libs/libmythtv/mpegrecorder.h	(revision 24074)
+++ mythtv/libs/libmythtv/mpegrecorder.h	(working copy)
@@ -34,6 +34,7 @@ class MpegRecorder : public DTVRecorder,
     void Initialize(void) {}
     void StartRecording(void);
     void StopRecording(void);
+    void FinishRecording(void);
     void Reset(void);
 
     void Pause(bool clear = true);
Index: mythtv/libs/libmythtv/tv_play.cpp
===================================================================
--- mythtv/libs/libmythtv/tv_play.cpp	(revision 24074)
+++ mythtv/libs/libmythtv/tv_play.cpp	(working copy)
@@ -5167,6 +5167,12 @@ bool TV::StartPlayer(PlayerContext *mctx, PlayerCo
 
     InitUDPNotifyEvent();
     bool ok = false;
+    if (ctx->HasNVP())
+    {
+        VERBOSE(VB_PLAYBACK, LOC + QString("StartPlayer: tearing down existing NVP"));
+        ctx->SetNVP(NULL);
+    }
+
     if (ctx->IsNullVideoDesired())
     {
         ok = ctx->CreateNVP(this, NULL, desiredState, 0, NULL);
Index: mythtv/libs/libmythtv/mpegrecorder.cpp
===================================================================
--- mythtv/libs/libmythtv/mpegrecorder.cpp	(revision 24074)
+++ mythtv/libs/libmythtv/mpegrecorder.cpp	(working copy)
@@ -431,7 +431,7 @@ bool MpegRecorder::OpenV4L2DeviceAsInput(void)
         }
         else
         {
-            VERBOSE(VB_IMPORTANT, "\n\nNot ivtv or pvrusb2 or hdpvr driver\n\n");
+            VERBOSE(VB_IMPORTANT, QString("\n\nNot ivtv or pvrusb2 or hdpvr driver: %1\n\n").arg(driver));
             bufferSize    = 4096;
             usingv4l2     = has_v4l2_vbi = true;
             has_buggy_vbi = requires_special_pause = false;
@@ -1386,13 +1386,19 @@ bool MpegRecorder::ProcessAVTSPacket(const TSPacke
 void MpegRecorder::StopRecording(void)
 {
     QMutexLocker locker(&recording_wait_lock);
-    if (recording)
+    if (recording && encoding)
     {
         encoding = false; // force exit from StartRecording() while loop
         recording_wait.wait(&recording_wait_lock);
     }
 }
 
+void MpegRecorder::FinishRecording(void)
+{
+    DTVRecorder::FinishRecording();
+    TeardownAll();
+}
+
 void MpegRecorder::ResetForNewFile(void)
 {
     DTVRecorder::ResetForNewFile();
