Ivtv Channel changer

From MythTV Official Wiki
Revision as of 06:57, 28 April 2010 by Sphery (talk | contribs) (Add script info.)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Important.png Note: The correct title of this article is ivtv Channel changer. It appears incorrectly here due to technical restrictions.


Author Nick Fox
Description Channel-change script using ivtv-utils tools to perform channel changing.
Supports



This is a script to use the ivtv-utils tools to perform channel changing.

This script is designed to work around an issue in ivtv drivers that results in audio-quality problems ("tinny audio"), as mentioned on the ivtv wiki.


Script.png myth-chan

#!/usr/bin/env python
#
#       myth-chan
#		A wrapper for MythTV external channel changers
#		This is setup to remedy a known audio instability with certian
#		TV Capture devices.
#       
#       Copyright 2009 Nick Fox ( nfox a foxmediasystems d com )
#       
#       This program is free software; you can redistribute it and/or modify
#       it under the terms of the GNU General Public License as published by
#       the Free Software Foundation; either version 2 of the License, or
#       (at your option) any later version.
#       
#       This program is distributed in the hope that it will be useful,
#       but WITHOUT ANY WARRANTY; without even the implied warranty of
#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#       GNU General Public License for more details.
#       
#       You should have received a copy of the GNU General Public License
#       along with this program; if not, write to the Free Software
#       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#       MA 02110-1301, USA.


# Get python defaults
import os
import sys
from optparse import OptionParser
import subprocess


def main(self):
	# Go Baby GO!
	# Setup the options
	parser = OptionParser()
	parser.add_option("-c", "--dct-channel", nargs=3, help="Use DCT Channel Binary to change channels.\
	usage: myth-chan <-c | --dct-channel> <port> <video_source> <channel>", dest="dct")
	parser.add_option("-d", "--direct-tv", nargs=4, help="Use the DirectTV external channel changer.\
	usage: myth-chan <-d | --direct-tv> <set-top-box-type> <port> <video_source> <channel>", dest="dtv")
		
	(options, args) = parser.parse_args()

	if options.dct:
		dct_channel(options.dct[0],options.dct[1],options.dct[2])
	if options.dtv:
		dtv_channel(options.dtv[0],options.dtv[1],options.dtv[2],options.dtv[3])

def dct_channel(port, vidsrc, chan):
	# Wrapper up and Use the channel binary
	try:
		if os.path.exists("/usr/local/bin/channel"):
			cmd = "/usr/local/bin/channel -p " + port + " " + chan
			subprocess.Popen4(["v4l2-ctl -d " + vidsrc + " --set-audio-input=2"])
			subprocess.Popen4([cmd])
			subprocess.Popen4(["v4l2-ctl -d " + vidsrc + " --set-audio-input=1"])
		else:
			print "/usr/local/bin/channel not found!"
	except:
		print "Channel Binary failed to change channels."

def dtv_channel(stb_type, port, vidsrc, chan):
	# directtv.pl wrapper
	try:
		if os.path.exists("/usr/local/bin/directv.pl"):
			cmd = "/usr/local/bin/directtv.pl port " + port + " box_type " + stb_type + " setup_channel " + chan
			subprocess.Popen4(["v4l2-ctl -d " + vidsrc + " --set-audio-input=2"])
			subprocess.Popen4([cmd])
			subprocess.Popen4(["v4l2-ctl -d " + vidsrc + " --set-audio-input=1"])
		else:
			print "/usr/local/bin/directv.pl not found!"
	except:
		print "directv.pl failed to change channels."
	
if __name__ == "__main__":
    main(sys.argv[1:])