| Year | Title | Role | Notes |
| 1975 | Edward the Seventh | Albert Victor 'Eddy' – Aged 5 | Episode 6: "The Invisible Queen" |
| 1981 | Nanny | James Lamerton | Series 1, Episode 6: "Goats and Tigers" |
| 1985 | Screen Two | Johnnie Mallett | Series 2, Episode 4: "Frankie and Johnnie" |
| 1989 | The Voyage of the Dawn Treader | King Caspian | |
| 1991 | Stanley and the Women | Stephen Duke | |
| 1993 | Screen Two | Mark | Series 9, Episode 8: "Voices in the Garden" |
| The Inspector Alleyn Mysteries | Donald Potter | Series 1, Episode 5: "Death in a White Tie" |
| Performance | Jack Maitland | Series 3, Episode 2: "The Maitlands" |
| Doctor Who: Dimensions in Time | Cyrian | |
| 1994 | As Time Goes By | Terry | Series 3, Episode 1: "We'll Always Have Paris" |
| Screen One | Lt. Charles Thoroughgood | Series 6, Episode 2: "A Breed of Heroes" |
| 1996 | Strangers | Simon | Series 1, Episode 10: "Costumes" |
| Over Here | Archie Bunting | |
| 1997 | The Nazis: A Warning from History | Narrator | |
| 1999 | Hornblower | Major Edrington | Series 1, Episode 4: "The Frogs and the Lobsters" |
| The Planets | Narrator | |
| Living Britain | Narrator | |
| War of the Century: When Hitler Fought Stalin | Narrator | |
| 2000 | Longitude | Nevil Maskelyne | |
| 2001 | Horror in the East | Narrator | |
| 2001–2002 | Timewatch | Narrator | |
| 2002 | Waking the Dead | Thomas Rice | Series 1, Episodes 1–2: "Life Sentence" |
| 2002–2006 | The Private Life of a Masterpiece | Narrator | |
| 2003 | Cambridge Spies | Anthony Blunt | |
| Imagine | Wightwick | Series 2, Episode 3: "Entertaining Mr. Soane" |
| 2004 | Foyle's War | Lt. Col. James Wintringham | Series 3, Episode 1: "The French Drop" |
| 2005 | Nova | Humphry Davy | Series 33, Episode 3: "E=mc²: Einstein's Big Idea" |
| Auschwitz: The Nazis and 'The Final Solution' | Narrator | |
| 2006 | The Inspector Lynley Mysteries | Tony Wainwright | Series 5, Episode 3: "Chinese Walls" |
| 2007 | Midsomer Murders | Jeremy Thacker | Series 10, Episode 2: "The Animal Within" |
| 2008 | World War II Behind Closed Doors: Stalin, the Nazis and the West | Narrator | |
| 2009 | New Tricks | David Fleeting | Series 6, Episode 3: "Fresh Starts" |
| Desperate Romantics | Lord Rosterley | Series 1, Episode 4 |
| 2010 | Garrow's Law | Thomas Erskine | Series 2, Episode 4 |
| Any Human Heart | Peter Scabius | Series 1, Episodes 1–4 |
| Agatha Christie's Poirot | Dr Constantine | Series 12, Episode 3: "Murder on the Orient Express" |
| 2011 | Law & Order: UK | Lucas Boyd | Series 5, Episode 5: "Intent" |
| 2012 | Eternal Law | Zak Gist | |
| 2012–15 | Mr Selfridge | Frank Edwards | Character based on journalist and publisher Frank Harris |
| 2014 | Fleming: The Man Who Would Be Bond | Admiral John Godfrey | Character was Ian Fleming's model for "M" |
| The Crimson Field | Elliot Vincent | Series 1, Episode 4 |
| 2015 | W1A | Richard Cartwright | Series 2, Episode 1 |
| Jonathan Strange & Mr Norrell | Sir Walter Pole | |
| 2016 | The Hollow Crown: The Wars of the Roses | Bishop of Winchester | Henry VI Part 1 |
| 2017 | Midsomer Murders | James Oswood | Episode: "Death by Persuasion" |
| 2019 | The Crown | Anthony Blunt | Season 3, episode 1 "Olding" |
| 2020 | Death in Paradise | Donald McCormack | Series 9, Episode 1 |
| 2020– | All Creatures Great and Small | Siegfried Farnon |
| 2022– | Slow Horses | Peter Judd | Recurring cast |