Mythtv MPlayer Playback Issue with Ubuntu Karmic Koala

I have just finished upgrading my Mythtv setup to Ubuntu 9.10 and mostly everything still works (I upgraded from 8.10). Luckily the only thing that broke was lirc and it was the old config pointing at the incorrect /dev entry. The biggest problem was when I played video from inside mythtv using mplayer the video locked up. It acted like it was paused, you could seek and the video would advance but it would never play.

After searching through forums and mailing lists I was unable to find an answer so I started looking into mplayer itself. If i used mplayer on it’s own while Mythtv was running the same problem would occur. If I exited Mythtv then mplayer functioned perfectly. I found a possible idea from the Ubuntu forums whereby someone else was having slight playback issues (no mention of Mythtv though).

The problem appears to be with the audio driver mplayer tries to use. On my system it comes up with an error about pulse (that is something to fix some other time). To fix this I told mplayer to use ALSA instead, and it worked!!

So to fix with MythTV go into the Setup -> Media Settings -> Video Settings -> Player Settings then set Default Video Player to

mplayer -fs -zoom -ontop -ao alsa %s

Alternatively you could just add

-ao alsa

before the %s.

RS232 (Serial) Control of LG LCD TV via MythTV

I got sick of having a remote control for everything, so I have started down the path of using RS232 (Serial) control where I can. Currently that is only my TV, but when the Decoder and DVD player get replaced I will be looking for models with remote control capability (I know I could use an IR blaster, but that can impede using the real remote and looks kind of ugly).

So I started by deciding the basic features I used on my TV all the time and how to remap them to the remote control I use for MythTV (I haven’t done every button, I figured if I need to use the remote once a month then so be it). The features required for me were:

  • On/Off
  • Aspect Ratio
  • Input (DTV, Comp, RCA, VGA)

I found the codes required to send to the TV on the LG website somewhere. If your TV supports RS232 there should be a document somewhere that describes the protocol used you will just need to find it.

I found the following code somewhere, it was originally used just to send and receive data via a serial port so I have modified it to send what I need to the TV and removed everything else.

Just drop the following in a file called tvcontrol in /usr/local/bin

#!/usr/bin/python

#allows you to capture the command switches
import sys

#get serial features for python
import serial

#this next line sets up the serial port to allow for communication
#and opens the serial port you may need to change
#ttyS0 to S1, S2, ect. The rest shouldn't need to change.
ser = serial.Serial('/dev/ttyS0', 9600, 8, serial.PARITY_NONE,
         serial.STOPBITS_ONE, xonxoff=0, rtscts=0, timeout=1)

#default COMMAND is bogus
COMMAND = "nope"
aspect169 = "kc 00 02n"
aspect43 = "kc 00 01n"
poweron = "ka 00 01n"
poweroff = "ka 00 00n"
inputdtv = "kb 00 00n"
inputav1 = "kb 00 02n"
inputcomp1 = "kb 00 04n"
inputpc = "kb 00 06n"

if sys.argv[1:] == ['--aspect169'] :
    COMMAND = aspect169

if sys.argv[1:] == ['--aspect43'] :
    COMMAND = aspect43

if sys.argv[1:] == ['--poweron'] :
    COMMAND = poweron

if sys.argv[1:] == ['--poweroff'] :
    COMMAND = poweroff

if sys.argv[1:] == ['--inputdtv'] :
    COMMAND = inputdtv

if sys.argv[1:] == ['--inputav1'] :
    COMMAND = inputav1

if sys.argv[1:] == ['--inputcomp1'] :
    COMMAND = inputcomp1

if sys.argv[1:] == ['--inputpc'] :
    COMMAND = inputpc

#This is when it actually writes the command to the serial port.
ser.write(COMMAND)

#all done now close the port.
ser.close()

The following is an example of using this script with LIRC, this is a small part of my lircrc file. This map the buttons that I use on my DVICO remote control.

begin
    remote = *
    button = live
    prog   = irexec
    config = tvcontrol --aspect169
end
begin
    remote = *
    button = folder
    prog   = irexec
    config = tvcontrol --aspect43
end
begin
    remote = *
    button = tv_onoff
    prog   = irexec
    config = tvcontrol --poweron
end
begin
    remote = *
    button = power_onoff
    prog   = irexec
    config = tvcontrol --poweroff
end
begin
    remote = *
    button = dtv
    prog   = irexec
    config = tvcontrol --inputdtv
end
begin
    remote = *
    button = mp3
    prog   = irexec
    config = tvcontrol --inputav1
end
begin
    remote = *
    button = dvd
    prog   = irexec
    config = tvcontrol --inputcomp
end
begin
    remote = *
    button = cpf
    prog   = irexec
    config = tvcontrol --inputpc
end

You mileage my vary, you will need to understand how your remote control functions and what the current button assignments are.

Another possiblity is to have the tvcontrol script run via a Cron entry or controlled via a webpage, use your mobile phone as a remote instead. The possiblities are endless. Have Fun.