Need syntax for remap tablespaces for  Import datapump using API

Good day all,
I am not able to find an example for remap_tablespaces for import datapump using API. I am not able to perform the import as it complains it doesnt have grant to the exported tables's tablespace. I created a new user with new table spaces associated with it to import tables and other objects.
I have remap_schema in API procedure but not remap_tablesapce. Could you please tell me how to accomplish it.
Thanks a lot.
Maggie

Hi Maggie,
The other parameter is 'OBJECT_TYPE'
so you could have
DBMS_DATAPUMP.METADATA_REMAP (handle => k1, name => 'REMAP_TABLESPACE', OLD_VALUE =>'+ORIGINAL_TABLESPACE_NAME+', VALUE =>'+NEW_TABLESPACE_NAME+',OBJECT_TYPE=>'TABLE');The full list of options from the oracle docs is suposedly this:
TABLE, INDEX, ROLLBACK_SEGMENT, MATERIALIZED_VIEW, MATERIALIZED_VIEW_LOG,TABLE_SPACE
ref http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_datpmp.htm#i1007115
As for an example with table - here is one i did which also includes remap_data - you can ignore that part - the rest of the code shows you how to do a table level export based on a list of tables returned from a SQL query.
http://dbaharrison.blogspot.de/2013/04/dbmsdatapump-with-remapdata.html
Cheers,
Harry

Similar Messages

  • Do I need multiple DATA/INDX tablespaces for a DB on a SAN?

    Is there any advantage to creating multiple DATA and INDEX tablespaces for databases that are on a SAN? Database size is probably going to be around 1TB per year.
    Our databases are normally smaller and perform well with a single DATA tablespace and single INDEX tablespace. I would like to see if we need to use a different approach with a larger db and a SAN in place.
    Thanks

    Justin
    As a follow up to my previous post, yes I can confirm that extent allocation is round robin across all files in a TS. The test outline I gave mentioned rowid but as I reconstructed the test that turned out to be irrelevant.
    Here is the results:
    SQL> drop tablespace bubba_ts
    2      INCLUDING CONTENTS AND DATAFILES;
    Tablespace dropped.
    SQL> create SMALLFILE tablespace bubba_ts
    2      datafile 'c:\oradata\edst\bubbatbs_01.dbf'
    3           size 1m
    4           autoextend off,
    5           'c:\oradata\edst\bubbatbs_02.dbf'
    6           size 1m
    7           autoextend off,
    8           'c:\oradata\edst\bubbatbs_03.dbf'
    9           size 1m
    10           autoextend off
    11      EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64K;
    Tablespace created.
    SQL> drop user bubba;
    User dropped.
    SQL> create user bubba
    2      identified by bubbapw
    3      default tablespace bubba_ts
    4      temporary tablespace temp
    5      quota unlimited on bubba_ts;
    User created.
    SQL> grant create session,
    2      create table
    3 to bubba;
    Grant succeeded.
    SQL> create table bubba.rowid_test
    2      (
    3      key_col number,
    4      big_col1 char(2000),
    5      big_col2 char(2000),
    6      big_col3 char(2000)
    7      );
    Table created.
    SQL> BEGIN
    2      for i in 1..100 loop
    3      insert into bubba.rowid_test
    4      values (i,
    5           'xxxxx',
    6           'xxxxx',
    7           'xxxxx'
    8           );
    9      end loop;
    10 END;
    11 /
    PL/SQL procedure successfully completed.
    SQL> col file_name for a35
    SQL> select e.extent_id,
    2      e.file_id,
    3      f.file_name
    4 from dba_extents e,
    5      dba_data_files f
    6 where e.owner = 'BUBBA'
    7 and e.segment_name = 'ROWID_TEST'
    8 and e.file_id = f.file_id
    9 order by e.extent_id
    10 ;
    EXTENT_ID FILE_ID FILE_NAME
    0 10 C:\ORADATA\EDST\BUBBATBS_03.DBF
    1 8 C:\ORADATA\EDST\BUBBATBS_01.DBF
    2 9 C:\ORADATA\EDST\BUBBATBS_02.DBF
    3 10 C:\ORADATA\EDST\BUBBATBS_03.DBF
    4 8 C:\ORADATA\EDST\BUBBATBS_01.DBF
    5 9 C:\ORADATA\EDST\BUBBATBS_02.DBF
    6 10 C:\ORADATA\EDST\BUBBATBS_03.DBF
    7 8 C:\ORADATA\EDST\BUBBATBS_01.DBF
    8 9 C:\ORADATA\EDST\BUBBATBS_02.DBF
    9 10 C:\ORADATA\EDST\BUBBATBS_03.DBF
    10 8 C:\ORADATA\EDST\BUBBATBS_01.DBF
    11 9 C:\ORADATA\EDST\BUBBATBS_02.DBF
    12 10 C:\ORADATA\EDST\BUBBATBS_03.DBF
    13 8 C:\ORADATA\EDST\BUBBATBS_01.DBF

  • How to create a new channel for a role or an organization using API

    Hi all,
    I tryed to create a new channel using the method createChannel(...)+ in the class ContainerProviderContext+ of the package com.sun.portal.providers.context+ and everything is fine. The channel is created under the display profile of the authenticated user who asked for the new channel.
    But I'd like to create new channels for other users/roles/organizations. Does anybody know how to do that???
    Thanks in advance.

    Hi Juan,
    Yes you can use JDBC adapter to integrate with DB2 but you need to deploy the DB2 drivers.
    Possible options to integrate with DB2 are :
    We can integrate DB2 system with XI using different methods :
    a)For batch mode we can work with standard file adapter of XI
    b)Install MQ Series and use JMS Adaptersto send and receive messages with DB2
    c)Use the JDBC Adapters to directly write to the DB2 Database.These is for
      incoming interfaces
    d) Third Party Adapters provided by iway can also be utilized ,but it requires a separate license
    regards
    Gangaprasad

  • FDM Import Map using API - fImpTRx

    Hi,
    Has anyone used the function - fImpTRx to import a Map from a Location into FDM?
    I need to import Account Dimension for a Location, i have tried the below but receive an error:
    "Cannot use parentheses when calling a Sub at Line 13"
    API.IntBlockMgr.InterfaceMgr.flImpTRx(strLoc,strLoadFile,strDim)
    strLoadFile = "D:\Oracle\Middleware\EPMSystem11R1\products\FinancialDataQuality\FDMAPPS"
    strLoc="SAPFM"
    strDim="Account"
    MsgBox(strLoc & " Location Maps Imported to " &strFilePath)
    End Sub
    Thanks.

    Hi Ian,
    Thank you for the corrections, i have managed to get it the script to run without any errors
    BUT: The file does not update the Account Map?
    blnLoad = API.IntBlockMgr.InterfaceMgr.fImpTRx(strLoc,"D:\temp\SAPMAP\SAPFM-Account.tra",strDim)
    strLoc="SAPFM"
    strDim="Account"
    MsgBox(strLoc & " Location Maps Imported to SAPFM " &strFilePath)
    End Sub
    Anything obvious i may have missed here
    Thanks
    Nidhish

  • Reasons to use separate temp tablespace for user tablespace

    Hi,
    I know that guideline says is not use system tablespace for user tables. But need i create for user tablespace separate TEMP teblespace or i can use same TEMP tablespace for all tablespaces?

    Hi,
    >>But need i create for user tablespace separate TEMP tablespace or i can use same TEMP tablespace for all tablespaces?
    You can use one temp tablespace for a database , Temp tablespace usage are for sorting the data.
    for more detail you can go with  :Creating Tablespaces
    HTH

  • Separate tablespaces for indexes and LOBs

    I have modeled my db tables with jDeveloper. Now I would like to store my tables in default tables, my indexes in a separate tablespace, and LOBs in a 3rd tablespace.
    How can I best add the tablespace definitions to the table creation sql? I can't find such functionality in jDeveloper.
    If jDev does not support this, does Oracle have some other tools which could do this?
    Or can I set some ALTER SESSION parameter before creating the tables which would make my indexes and LOBs go to the correct tablespaces by default?

    I see jDeveloper 11g has a possibility for specifying tablespaces for the tables and LOBs.
    I cant figure out how to set tablespaces for indexes though. I can tell there is definately no way to set tablespace settings for primary key / foreign key indexes.
    So jDev 11g does not seem to solve my problem either.

  • Lightroom 5 Darkens Photos after Importing Images Used with Different Camera [NOT SHOOTING IN RAW NOR B

    I seriously need help, my whole entire catalog of photos just got darkened for some reason after importing photos used with a different camera. What happened is that I imported photos taken with a different camera (Canon EOS 60D) and when I did that, it darkened all the rest of my photos (taken with Canon EOS Rebel T3). Why did this happen? This is making my photos insanely hard to edit.

    If you always want Camera Neutral picture style to be applied, then open one of your images that you have imported and have changed nothing else in Lightroom.  Set the camera profile to Camera Neutral and save new camera default settings.  Then whenever you import that setting will be applied to all of your images.
    If you don't always want that style, you could save a preset that applies the Camera Neutral picture style, and then you could choose to use that preset during the import process.
    It is simply a matter of determining your workflow and then setting things the way you want them to work.

  • Is there anyway to use imp and rename a tablespace during import? Sort of what remap_tablespace for datapump import does?

    I have a dump file from a 9i Oracle database with tablespace USERDEL_DATA but my database in 11g has tablespace USER_DEL_DATA. I don't want to name the tablespace what it is called in the 9i database because the naming convention is not consistent with what I have been naming the tablespaces. There needs to be a '_' between USER and DEL.
    The problem I have is that, each time I try importing to 11g database, some tables that probably have USERDEL_DATA as their default tablespace in the 9i database would not import into the 11g database. Is there any parameter (I haven't found one yet) using native import (i.e. imp) to remap_tablespace? I know with impdp, I would be able to remap tablespace easily but this dump file is from a 9i database and impdp would not work on it. Please help.
    Thank you for your assistance.

    The old exp/imp utilities have a tablespace transport mode, sort of like the end goal, but maybe not quite exactly.
    >> tables that probably have USERDEL_DATA as their default tablespace
    That's not quite accurate, users have a default tablespace, used for table creation when a tablespace isn't specified in the DDL.
    What we've done when an export file has tablespaces that disagree with the tablespace names in the import target, go ahead and create the disagreeable tablepspace, and set the target schema(s) user(s) to have zero quota on the "bad" named tablespace. The IGNORE=Y imp setting will end up putting the tables into the user default tablespace, as long as the user(s) haven't picked up the unlimited tablespace system privilege somehow/somewhere.
    So when import is done, just drop the bad tablespace [including contents and datafiles]; and Problem Solved.
    >> the naming convention is not consistent
    Not seeing a problem there. Its got a name, tablespace(s) have to have one. Don't care what its called, just do have to know about it for backup/recovery, that would be the critical bit..

  • How can I view my pictures that were backed up to iTunes? I no longer have an apple product but need to view the pictures for very important reasons.

    How can I view my pictures that were backed up to iTunes? I no longer have an apple product but need to view the pictures for very important reasons.

    If you mean backed up as part of an iPhone backup in iTunes?  If so, you would have to use 3rd party software to extract them from the backup, such as iPhone Backup Extractor.

  • Import dumpfile with seperate tablespaces for table and index

    Hi,
    We have a schema for which the its tables are stored in seperate tablespace and indexes are stored in different tablespace. Now we have take full schema export. Now we want to import it on another schema. Now I want to know if the we have difference in the tablespace name we use REMAP_TABLESPACE clause of the impdp command but what about the seperate tablespace for table and indexes. How would Oracle handle this.
    Regards,
    Abbasi

    Hi,
    I hope you created the same tablespace structure on the target side if not so remap_tablespace option you have to use for specifying different tablespaces.Oracle will take care of putting data and index.Any how if a index is moved from one tablespace to other you have to rebuild them,once you rebuild them than only stattistics are gathered otherwise you
    might face some performance issue.
    Better option is to keep same tablespace structures in source and target environment.
    Best regards,
    Rafi.
    http://rafioracledba.blogspot.com
    Edited by: Rafi (Oracle DBA) on May 9, 2011 7:07 AM

  • Do we need to create message interfaces for idocs and rfcs thatare imported

    do we need to create message interfaces for idocs and rfcs thatare imported
    from sap server
    in scenarios from sap system to file or vice versa
    i knew that we need not create message types
    do we also skip creating message interfaces

    hi,
    you create an abstract message interface for IDOC only if you want to use
    them in a BPM (integration process)
    for more about IDOCs have a look at my book:
    <a href="/people/michal.krawczyk2/blog/2006/10/11/xi-new-book-mastering-idoc-business-scenarios-with-sap-xi"><b>Mastering IDoc Business Scenarios with SAP XI</b></a>
    Regards,
    michal
    <a href="/people/michal.krawczyk2/blog/2005/06/28/xipi-faq-frequently-asked-questions"><b>XI / PI FAQ - Frequently Asked Questions</b></a>

  • How to restore limited tablespace for table (drop table import)

    Hi All,
    Application user has drop one master table in database i want to restore it but now i don't hv logical backup
    i hv only rman backup,Is it possible to restore only limited tablespace and open the database n import that required table from tablespace.
    If its possible by auxiliary instance pls send me the required steps to create auxiliary instance for limited tablespace
    Waiting for immediate responce.
    Thanks & Regards,
    .......

    user9161658 wrote:
    Hi All,
    Application user has drop one master table in database i want to restore it but now i don't hv logical backup
    i hv only rman backup,Is it possible to restore only limited tablespace and open the database n import that required table from tablespace.
    If its possible by auxiliary instance pls send me the required steps to create auxiliary instance for limited tablespace
    Waiting for immediate responce.PLease note asking for an immediate response is not a good thing on a public and free forum. For immediate assistance, OSS is the place to go for.
    What you want to do is certainly possible and its possible to recover only the dropped object form the tablespace with the help of TSPITR . Please see the following link to understand and know about it. Since you haven't mentioned your version, I am giving 11.2's link.
    http://download.oracle.com/docs/cd/E11882_01/backup.112/e10642/rcmtspit.htm#BRADV89787
    http://download.oracle.com/docs/cd/E11882_01/backup.112/e10642/rcmtspit.htm#BRADV009
    HTH
    Aman....

  • Why transportable tablespace for platform migration of same endian format?

    RDBMS Version : 10.2.0.4
    We are planning to migrate our DB to a different platform. Both platforms are of BIG endian format. From googling , I came across the following link
    http://levipereira.files.wordpress.com/2011/01/oracle_generic_migration_version_1.pdf
    In this IBM document, they are migrating from Solaris 5.9 (SPARC) to AIX 6 . Both are of BIG endian format.Since they both are of same endian format can't they use TRANSPORTABLE DATABASE ? Why are they using RMAN COVERT DATAFILE (Transportable tablespace ) ?

    In this IBM document, they are migrating from Solaris 5.9 (SPARC) to AIX 6 . Both are of BIG endian format.Since they both are of same endian format can't they use TRANSPORTABLE DATABASE ? Why are they using RMAN COVERT DATAFILE (Transportable tablespace ) ?they are using transportable database - they are not importing data to dictionary, not creating users... - instead of using convert database, they used convert datafile to avoid of converting all datafiles (you need to convert only undo + system tablespace) - there's MOS note: Avoid Datafile Conversion during Transportable Database [ID 732053.1].
    Basic steps for convert database:
    1. Verify the prerequisites
    2. Identify any external files and directories with DBMS_TDB.CHECK_EXTERNAL.
    3. Shutdown (consistent) and restart the source database in READ ONLY mode.
    4. Use DBMS_TDB.CHECK_DB to make sure the database is ready to be transported.
    5. Run the RMAN convert database command.
    6. Copy the converted files to the target database. Note that this implies that you will need 2x the storage on the source database for the converted files.
    7. Copy the parameter file to the target database.
    8. Adjust configuration files as required (parameter, listener.ora, tnsnames, etc).
    9. Fire up the new database!
    All other details are in:
    http://docs.oracle.com/cd/B19306_01/backup.102/b14191/dbxptrn.htm#CHDFHBFI
    Lukas

  • Partial match for Value Mapping in Import Manager

    Hello Experts,
    We have a import map which is used to do mass insert of data into the main table. This is done as & when required by the end user.
    We have a qualified lookup field which has a flat lookup filed as the Non-Qualifier. This flat lookup field is refering to a Lookup Flat table, which has mulitple dispay fields like Code,Name, Status etc. (14 fields in total) where as only the Code is the unique field.
    We have only the unique field in our source file which we use for the import. Since we have only a part of the display fields in the source, the automap functionality in the Value maping section doesn't work. It becomes very tedious for the user to manually map all the values for this field.
    Is there any way by which we can convert the source or target values in the import map, so that we can map the values using the Automap feature?
    Your help & suggestion for alternate approach is highly appreciated.
    Thanks in advance.
    Regards,
    Uday
    P.S. We are using SAP MDM 5.5 SP6.

    Hi Uday,
    No need to enable remote key mapping for QLT. Please execute the below steps(stated with an example) -
    1.  Among all the fields in the referenced lookup table, identify the lookup fields and the tables they are looking up .
    For eg.If you have a lookup field as 'Country' as one of the fields, look up table will be 'Countries'
    2.For the identified lookup tables, set 'key mapping =Yes' in Console.
    For eg, For Country Lookup table ,set Key mapping to 'Yes'
    3.Import values into Lookup table (Import manager)/ Remote key update -
    In import manager, select source (local file) and destination as Countries flat table.This Table will be haing 2fields - Code and description.Clone the 'Code'field and map it to Remote key field in destination hierarchy.Map code and description to equivalent destination fields. Select 'Code' as matching field > Perform import into lookup table.
    Check if the records in countries table are updated with remote keys(in Data manager> right click on a record> select 'Edit key mappings' > view key mapping for the record)
    3.Import to Qualified table/Auto value mapping -
    Now, in the import map for qualified import , map the source field and destination field (of lookup type), all the values of this field will automatically map.
    Similarly, refresh remote keys mappings for all the lookup tables first and then you can see auto mappings of values happening for the lookup fields.
    Regards,
    Vinay M.S

  • DO i need some extra hardware interface for receving both Audio and video

    hi i m doing e-learning project. i have to capture video from webcam and voice from headphone and send to client.
    but my code is working fine for either one at a time.
    DO i need some extra hardware interface for receving both Audio and video. im using code AVTransmit and AVReceive found from this site only
    After running TX
    i give Dsound:// & vfw://0 in Media Locater only sound is received and no vedio
    and when i give vfw://0 in Media Locater only live video is transmited.
    im using JMF1.1.2e.
    if any one know the method to run or cause of it plz reply me soon. i will be very thankfull
    transmiter/server side code .first run TX on server
    import java.io.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.net.*;
    import java.util.*;
    import javax.media.rtp.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.border.*;
    public class Tx extends JFrame implements ActionListener, KeyListener,
    MouseListener, WindowListener {
    Vector targets;
    JList list;
    JButton startXmit;
    JButton rtcp;
    JButton update;
    JButton expiration;
    JButton statistics;
    JButton addTarget;
    JButton removeTarget;
    JTextField tf_remote_address;
    JTextField tf_remote_data_port;
    JTextField tf_media_file;
    JTextField tf_data_port;
    TargetListModel listModel;
    AVTransmitter avTransmitter;
    RTCPViewer rtcpViewer;
    JCheckBox cb_loop;
    Config config;
    public Tx() {
    setTitle( "JMF/RTP Transmitter");
         config= new Config();
         GridBagLayout gridBagLayout= new GridBagLayout();
         GridBagConstraints gbc;
         JPanel p= new JPanel();
         p.setLayout( gridBagLayout);
         JPanel localPanel= createLocalPanel();
         gbc= new GridBagConstraints();
         gbc.gridx= 0;
         gbc.gridy= 0;
         gbc.gridwidth= 2;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( localPanel, gbc);
         p.add( localPanel);
         JPanel targetPanel= createTargetPanel();
         gbc= new GridBagConstraints();
         gbc.gridx= 1;
         gbc.gridy= 1;
         gbc.weightx= 1.0;
         gbc.weighty= 1.0;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( targetPanel, gbc);
    p.add( targetPanel);
         JPanel mediaPanel= createMediaPanel();
         gbc= new GridBagConstraints();
         gbc.gridx= 1;
         gbc.gridy= 2;
         gbc.weightx= 1.0;
         gbc.weighty= 1.0;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( mediaPanel, gbc);
    p.add( mediaPanel);
    JPanel buttonPanel= new JPanel();
    rtcp= new JButton( "RTCP Monitor");
    update= new JButton( "Transmission Status");
         update.setEnabled( false);
         rtcp.addActionListener( this);
         update.addActionListener( this);
         buttonPanel.add( rtcp);
         buttonPanel.add( update);
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 3;
    gbc.gridwidth= 2;
         gbc.weightx = 1.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.CENTER;
         gbc.fill = GridBagConstraints.HORIZONTAL;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( buttonPanel, gbc);
         p.add( buttonPanel);
    getContentPane().add( p);
         list.addMouseListener( this);
         addWindowListener( this);
    pack();
    setVisible( true);
    private JPanel createMediaPanel() {
    JPanel p= new JPanel();
         GridBagLayout gridBagLayout= new GridBagLayout();
    GridBagConstraints gbc;
         p.setLayout( gridBagLayout);
         JLabel label= new JLabel( "Media Locator:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( label, gbc);
         p.add( label);
         tf_media_file= new JTextField( 35);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 0;
         gbc.weightx = 1.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.HORIZONTAL;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( tf_media_file, gbc);
         p.add( tf_media_file);
         tf_media_file.setText( config.media_locator);
         cb_loop= new JCheckBox( "loop");
         startXmit= new JButton( "Start Transmission");
         startXmit.setEnabled( true);
         startXmit.addActionListener( this);
         gbc= new GridBagConstraints();
         gbc.gridx = 2;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( cb_loop, gbc);
         p.add( cb_loop);
         cb_loop.setSelected( true);
         cb_loop.addActionListener( this);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.CENTER;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( startXmit, gbc);
         p.add( startXmit);
         TitledBorder titledBorder= new TitledBorder( new EtchedBorder(), "Source");
         p.setBorder( titledBorder);
         return p;
    private JPanel createTargetPanel() {
    JPanel p= new JPanel();
         GridBagLayout gridBagLayout= new GridBagLayout();
    GridBagConstraints gbc;
         p.setLayout( gridBagLayout);
         targets= new Vector();
         for( int i= 0; i < config.targets.size(); i++) {
         targets.addElement( config.targets.elementAt( i));
    listModel= new TargetListModel( targets);
    list= new JList( listModel);
         list.addKeyListener( this);
         list.setPrototypeCellValue( "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
    JScrollPane scrollPane= new JScrollPane( list,
    ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
    ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
         gbc= new GridBagConstraints();
         gbc.gridx= 0;
         gbc.gridy= 0;
         gbc.weightx= 1.0;
         gbc.weighty= 1.0;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( scrollPane, gbc);
         p.add( scrollPane);
    JPanel p1= new JPanel();
         p1.setLayout( gridBagLayout);
         JLabel label= new JLabel( "IP Address:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( label, gbc);
         p1.add( label);
         tf_remote_address= new JTextField( 15);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( tf_remote_address, gbc);
         p1.add( tf_remote_address);
         label= new JLabel( "Data Port:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( label, gbc);
         p1.add( label);
         tf_remote_data_port= new JTextField( 15);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( tf_remote_data_port, gbc);
         p1.add( tf_remote_data_port);     
    JPanel p2= new JPanel();
    addTarget= new JButton( "Add Target");     
    removeTarget= new JButton( "Remove Target");
         p2.add( addTarget);
         p2.add( removeTarget);
         addTarget.addActionListener( this);
         removeTarget.addActionListener( this);
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 2;
         gbc.weightx = 1.0;
         gbc.weighty = 0.0;
         gbc.gridwidth= 2;
         gbc.anchor = GridBagConstraints.CENTER;
         gbc.fill = GridBagConstraints.HORIZONTAL;
         gbc.insets = new Insets( 20,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( p2, gbc);
         p1.add( p2);
         gbc= new GridBagConstraints();
         gbc.gridx= 1;
         gbc.gridy= 0;
         gbc.weightx= 1.0;
         gbc.weighty= 1.0;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( p1, gbc);
         p.add( p1);
         TitledBorder titledBorder= new TitledBorder( new EtchedBorder(), "Targets");
         p.setBorder( titledBorder);
         return p;
    private JPanel createLocalPanel() {
    JPanel p= new JPanel();
         GridBagLayout gridBagLayout= new GridBagLayout();
    GridBagConstraints gbc;
         p.setLayout( gridBagLayout);
         JLabel label= new JLabel( "IP Address:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p.getLayout()).setConstraints( label, gbc);
         p.add( label);
         JTextField tf_local_host= new JTextField( 15);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p.getLayout()).setConstraints( tf_local_host, gbc);
         p.add( tf_local_host);
         try {
    String host= InetAddress.getLocalHost().getHostAddress();     
         tf_local_host.setText( host);
         } catch( UnknownHostException e) {
         label= new JLabel( "Data Port:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p.getLayout()).setConstraints( label, gbc);
         p.add( label);
         tf_data_port= new JTextField( 15);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( tf_data_port, gbc);
         p.add( tf_data_port);
         tf_data_port.setText( config.local_data_port);
         TitledBorder titledBorder= new TitledBorder( new EtchedBorder(), "Local Host");
         p.setBorder( titledBorder);
         return p;
    public void actionPerformed( ActionEvent event) {
    Object source= event.getSource();
         if( source == addTarget) {
         String ip= tf_remote_address.getText().trim();
         String port= tf_remote_data_port.getText().trim();
         String localPort= tf_data_port.getText().trim();
         addTargetToList( localPort, ip, port);
         if( avTransmitter != null) {
         avTransmitter.addTarget( ip, port);
         } else if( source == removeTarget) {
         int index= list.getSelectedIndex();
         if( index != -1) {
              Target target= (Target) targets.elementAt( index);
              if( avTransmitter != null) {
         avTransmitter.removeTarget( target.ip, target.port);
              targets.removeElement( target);
              listModel.setData( targets);          
         } else if( source == startXmit) {
         if( startXmit.getLabel().equals( "Start Transmission")) {          
         int data_port= new Integer( tf_data_port.getText()).intValue();
              avTransmitter= new AVTransmitter( this, data_port);
         avTransmitter.start( tf_media_file.getText().trim(), targets);          
              avTransmitter.setLooping( cb_loop.isSelected());
         startXmit.setLabel( "Stop Transmission");
         } else if( startXmit.getLabel().equals( "Stop Transmission")) {
              avTransmitter.stop();
              avTransmitter= null;
              removeNonBaseTargets();
              listModel.setData( targets);
         startXmit.setLabel( "Start Transmission");          
         } else if( source == rtcp) {
         if( rtcpViewer == null) {
         rtcpViewer= new RTCPViewer();
         } else {
              rtcpViewer.setVisible( true);
              rtcpViewer.toFront();
         } else if( source == cb_loop) {
         if( avTransmitter != null) {
              avTransmitter.setLooping( cb_loop.isSelected());
    private void removeNonBaseTargets() {
         String localPort= tf_data_port.getText().trim();
         for( int i= targets.size(); i > 0;) {
         Target target= (Target) targets.elementAt( i - 1);
         if( !target.localPort.equals( localPort)) {
    targets.removeElement( target);
         i--;
    public void addTargetToList( String localPort,
                             String ip, String port) {     
    ListUpdater listUpdater= new ListUpdater( localPort, ip,
                                  port, listModel, targets);
    SwingUtilities.invokeLater( listUpdater);           
    public void rtcpReport( String report) {
         if( rtcpViewer != null) {
         rtcpViewer.report( report);
    public void windowClosing( WindowEvent event) {
         config.local_data_port= tf_data_port.getText().trim();
         config.targets= new Vector();
         for( int i= 0; i < targets.size(); i++) {
         Target target= (Target) targets.elementAt( i);
         if( target.localPort.equals( config.local_data_port)) {
              config.addTarget( target.ip, target.port);
         config.media_locator= tf_media_file.getText().trim();
         config.write();
    System.exit( 0);
    public void windowClosed( WindowEvent event) {
    public void windowDeiconified( WindowEvent event) {
    public void windowIconified( WindowEvent event) {
    public void windowActivated( WindowEvent event) {
    public void windowDeactivated( WindowEvent event) {
    public void windowOpened( WindowEvent event) {
    public void keyPressed( KeyEvent event) {
    public void keyReleased( KeyEvent event) {
    Object source= event.getSource();
         if( source == list) {
         int index= list.getSelectedIndex();
    public void keyTyped( KeyEvent event) {
    public void mousePressed( MouseEvent e) {
    public void mouseReleased( MouseEvent e) {
    public void mouseEntered( MouseEvent e) {
    public void mouseExited( MouseEvent e) {
    public void mouseClicked( MouseEvent e) {
    Object source= e.getSource();
         if( source == list) {
         int index= list.getSelectedIndex();
         if( index != -1) {
              Target target= (Target) targets.elementAt( index);
              tf_remote_address.setText( target.ip);
              tf_remote_data_port.setText( target.port);
         int index= list.locationToIndex( e.getPoint());
    public static void main( String[] args) {
    new Tx();
    class TargetListModel extends AbstractListModel {
    private Vector options;
    public TargetListModel( Vector options) {
         this.options= options;
    public int getSize() {
         int size;
         if( options == null) {
         size= 0;
         } else {
         size= options.size();
         return size;
    public Object getElementAt( int index) {
    String name;
    if( index < getSize()) {
         Target o= (Target)options.elementAt( index);
    name= o.localPort + " ---> " + o.ip + ":" + o.port;
         } else {
         name= null;
         return name;
    public void setData( Vector data) {
         options= data;
         fireContentsChanged( this, 0, data.size());
    class ListUpdater implements Runnable {
    String localPort, ip, port;
    TargetListModel listModel;
    Vector targets;
    public ListUpdater( String localPort, String ip, String port,
                   TargetListModel listModel, Vector targets) {
         this.localPort= localPort;
         this.ip= ip;
         this.port= port;
         this.listModel= listModel;
         this.targets= targets;
    public void run() {
    Target target= new Target( localPort, ip, port);
         if( !targetExists( localPort, ip, port)) {
         targets.addElement( target);
    listModel.setData( targets);
    public boolean targetExists( String localPort, String ip, String port) {
         boolean exists= false;
         for( int i= 0; i < targets.size(); i++) {
         Target target= (Target) targets.elementAt( i);
         if( target.localPort.equals( localPort)
         && target.ip.equals( ip)
              && target.port.equals( port)) {          
              exists= true;
         break;
         return exists;
    >>>>>>>>>>>>>>>>>
    import java.awt.*;
    import java.io.*;
    import java.net.InetAddress;
    import java.util.*;
    import javax.media.*;
    import javax.media.protocol.*;
    import javax.media.format.*;
    import javax.media.control.TrackControl;
    import javax.media.control.QualityControl;
    import javax.media.rtp.*;
    import javax.media.rtp.event.*;
    import javax.media.rtp.rtcp.*;
    public class AVTransmitter implements ReceiveStreamListener, RemoteListener,
    ControllerListener {
    // Input MediaLocator
    // Can be a file or http or capture source
    private MediaLocator locator;
    private String ipAddress;
    private int portBase;
    private Processor processor = null;
    private RTPManager rtpMgrs[];
    private int localPorts[];
    private DataSource dataOutput = null;
    private int local_data_port;
    private Tx tx;
    public AVTransmitter( Tx tx, int data_port) {
         this.tx= tx;
         local_data_port= data_port;
    * Starts the transmission. Returns null if transmission started ok.
    * Otherwise it returns a string with the reason why the setup failed.
    public synchronized String start( String filename, Vector targets) {
         String result;
         locator= new MediaLocator( filename);
         // Create a processor for the specified media locator
         // and program it to output JPEG/RTP
         result = createProcessor();
         if (result != null) {
         return result;
         // Create an RTP session to transmit the output of the
         // processor to the specified IP address and port no.
         result = createTransmitter( targets);
         if (result != null) {
         processor.close();
         processor = null;
         return result;
         // Start the transmission
         processor.start();
         return null;
    * Use the RTPManager API to create sessions for each media
    * track of the processor.
    private String createTransmitter( Vector targets) {
         // Cheated. Should have checked the type.
         PushBufferDataSource pbds = (PushBufferDataSource)dataOutput;
         PushBufferStream pbss[] = pbds.getStreams();
         rtpMgrs = new RTPManager[pbss.length];
         localPorts = new int[ pbss.length];
         SessionAddress localAddr, destAddr;
         InetAddress ipAddr;
         SendStream sendStream;
         int port;
         SourceDescription srcDesList[];
         for (int i = 0; i < pbss.length; i++) {
         // for (int i = 0; i < 1; i++) {
         try {
              rtpMgrs[i] = RTPManager.newInstance();     
              port = local_data_port + 2*i;
              localPorts[ i]= port;
              localAddr = new SessionAddress( InetAddress.getLocalHost(),
                                  port);
              rtpMgrs.initialize( localAddr);          
              rtpMgrs[i].addReceiveStreamListener(this);
              rtpMgrs[i].addRemoteListener(this);
         for( int k= 0; k < targets.size(); k++) {
              Target target= (Target) targets.elementAt( k);
              int targetPort= new Integer( target.port).intValue();
              addTarget( localPorts[ i], rtpMgrs[ i], target.ip, targetPort + 2*i);
              sendStream = rtpMgrs[i].createSendStream(dataOutput, i);          
              sendStream.start();
         } catch (Exception e) {
              e.printStackTrace();
              return e.getMessage();
         return null;
    public void addTarget( String ip, String port) {
         for (int i= 0; i < rtpMgrs.length; i++) {
         int targetPort= new Integer( port).intValue();
         addTarget( localPorts[ i], rtpMgrs[ i], ip, targetPort + 2*i);
    public void addTarget( int localPort, RTPManager mgr, String ip, int port) {
         try {
         SessionAddress addr= new SessionAddress( InetAddress.getByName( ip),
                                  new Integer( port).intValue());
         mgr.addTarget( addr);
         tx.addTargetToList( localPort + "", ip, port + "");
         } catch( Exception e) {
         e.printStackTrace();
    public void removeTarget( String ip, String port) {
         try {     
         SessionAddress addr= new SessionAddress( InetAddress.getByName( ip),
                                  new Integer( port).intValue());
         for (int i= 0; i < rtpMgrs.length; i++) {
         rtpMgrs[ i].removeTarget( addr, "target removed from transmitter.");
         } catch( Exception e) {
         e.printStackTrace();
    boolean looping= true;
    public void controllerUpdate( ControllerEvent ce) {
         System.out.println( ce);
         if( ce instanceof DurationUpdateEvent) {
         Time duration= ((DurationUpdateEvent) ce).getDuration();
         System.out.println( "duration: " + duration.getSeconds());
         } else if( ce instanceof EndOfMediaEvent) {
         System.out.println( "END OF MEDIA - looping=" + looping);
         if( looping) {
         processor.setMediaTime( new Time( 0));
              processor.start();
    public void setLooping( boolean flag) {
         looping= flag;
    public void update( ReceiveStreamEvent event) {
         String timestamp= getTimestamp();
         StringBuffer sb= new StringBuffer();
         if( event instanceof InactiveReceiveStreamEvent) {
         sb.append( timestamp + " Inactive Receive Stream");
         } else if( event instanceof ByeEvent) {
         sb.append( timestamp + " Bye");
         } else {
         System.out.println( "ReceiveStreamEvent: "+ event);
         tx.rtcpReport( sb.toString());     
    public void update( RemoteEvent event) {     
         String timestamp= getTimestamp();
         if( event instanceof ReceiverReportEvent) {
         ReceiverReport rr= ((ReceiverReportEvent) event).getReport();
         StringBuffer sb= new StringBuffer();
         sb.append( timestamp + " RR");
         if( rr != null) {
              Participant participant= rr.getParticipant();
              if( participant != null) {
              sb.append( " from " + participant.getCNAME());
              sb.append( " ssrc=" + rr.getSSRC());
              } else {
              sb.append( " ssrc=" + rr.getSSRC());
              tx.rtcpReport( sb.toString());
         } else {
         System.out.println( "RemoteEvent: " + event);
    private String getTimestamp() {
         String timestamp;
         Calendar calendar= Calendar.getInstance();
         int hour= calendar.get( Calendar.HOUR_OF_DAY);
         String hourStr= formatTime( hour);
         int minute= calendar.get( Calendar.MINUTE);
         String minuteStr= formatTime( minute);
         int second= calendar.get( Calendar.SECOND);
         String secondStr= formatTime( second);
         timestamp= hourStr + ":" + minuteStr + ":" + secondStr;     
         return timestamp;
    private String formatTime( int time) {     
         String timeStr;
         if( time < 10) {
         timeStr= "0" + time;
         } else {
         timeStr= "" + time;
         return timeStr;
    * Stops the transmission if already started
    public void stop() {
         synchronized (this) {
         if (processor != null) {
              processor.stop();
              processor.close();
              processor = null;
         for (int i= 0; i < rtpMgrs.length; i++) {
         rtpMgrs[ i].removeTargets( "Session ended.");
              rtpMgrs[ i].dispose();
    public String createProcessor() {
         if (locator == null) {
         return "Locator is null";
         DataSource ds;
         DataSource clone;
         try {
         ds = javax.media.Manager.createDataSource(locator);
         } catch (Exception e) {
         return "Couldn't create DataSource";
         // Try to create a processor to handle the input media locator
         try {
         processor = javax.media.Manager.createProcessor(ds);
         processor.addControllerListener( this);     
         } catch (NoProcessorException npe) {
         return "Couldn't create processor";
         } catch (IOException ioe) {
         return "IOException creating processor";
         // Wait for it to configure
         boolean result = waitForState(processor, Processor.Configured);
         if (result == false)
         return "Couldn't configure processor";
         // Get the tracks from the processor
         TrackControl [] tracks = processor.getTrackControls();
         // Do we have atleast one track?
         if (tracks == null || tracks.length < 1)
         return "Couldn't find tracks in processor";
         // Set the output content descriptor to RAW_RTP
         // This will limit the supported formats reported from
         // Track.getSupportedFormats to only valid RTP formats.
         ContentDescriptor cd = new ContentDescriptor(ContentDescriptor.RAW_RTP);
         processor.setContentDescriptor(cd);
         Format supported[];
         Format chosen;
         boolean atLeastOneTrack = false;
         // Program the tracks.
         for (int i = 0; i < tracks.length; i++) {
         Format format = tracks[i].getFormat();
         if (tracks[i].isEnabled()) {
              supported = tracks[i].getSupportedFormats();
              // We've set the output content to the RAW_RTP.
              // So all the supported formats should work with RTP.
              // We'll just pick the first one.
              if (supported.length > 0) {
              if (supported[0] instanceof VideoFormat) {
                   // For video formats, we should double check the
                   // sizes since not all formats work in all sizes.
                   chosen = checkForVideoSizes(tracks[i].getFormat(),
                                       supported[0]);
              } else
                   chosen = supported[0];
              tracks[i].setFormat(chosen);
              System.err.println("Track " + i + " is set to transmit as:");
              System.err.println(" " + chosen);
              atLeastOneTrack = true;
              } else
              tracks[i].setEnabled(false);
         } else
              tracks[i].setEnabled(false);
         if (!atLeastOneTrack)
         return "Couldn't set any of the tracks to a valid RTP format";
         // Realize the processor. This will internally create a flow
         // graph and attempt to create an output datasource for JPEG/RTP
         // audio frames.
         result = waitForState(processor, Controller.Realized);
         if (result == false)
         return "Couldn't realize processor";
         // Set the JPEG quality to .5.
         setJPEGQuality(processor, 0.5f);
         // Get the output data source of the processor
         dataOutput = processor.getDataOutput();
         return null;
    static SessionAddress destAddr1, destAddr2;
    * For JPEG and H263, we know that they only work for particular
    * sizes. So we'll perform extra checking here to make sure they
    * are of the right sizes.
    Format checkForVideoSizes(Format original, Format supported) {
         int width, height;
         Dimension size = ((VideoFormat)original).getSize();
         Format jpegFmt = new Format(VideoFormat.JPEG_RTP);
         Format h263Fmt = new Format(VideoFormat.H263_RTP);
         if (supported.matches(jpegFmt)) {
         // For JPEG, make sure width and height are divisible by 8.
         width = (size.width % 8 == 0 ? size.width :
                        (int)(size.width / 8) * 8);
         height = (size.height % 8 == 0 ? size.height :
                        (int)(size.height / 8) * 8);
         } else if (supported.matches(h263Fmt)) {
         // For H.263, we only support some specific sizes.
         if (size.width < 128) {
              width = 128;
              height = 96;
         } else if (size.width < 176) {
              width = 176;
              height = 144;
         } else {
              width = 352;
              height = 288;
         } else {
         // We don't know this particular format. We'll just
         // leave it alone then.
         return supported;
         return (new VideoFormat(null,
                        new Dimension(width, height),
                        Format.NOT_SPECIFIED,
                        null,
                        Format.NOT_SPECIFIED)).intersects(supported);
    * Setting the encoding quality to the specified value on the JPEG encoder.
    * 0.5 is a good default.
    void setJPEGQuality(Player p, float val) {
         Control cs[] = p.getControls();
         QualityControl qc = null;
         VideoFormat jpegFmt = new VideoFormat(VideoFormat.JPEG);
         // Loop through the controls to find the Quality control for
         // the JPEG encoder.
         for (int i = 0; i < cs.length; i++) {
         if (cs[i] instanceof QualityControl &&
              cs[i] instanceof Owned) {
              Object owner = ((Owned)cs[i]).getOwner();
              // Check to see if the owner is a Codec.
              // Then check for the output format.
              if (owner instanceof Codec) {
              Format fmts[] = ((Codec)owner).getSupportedOutputFormats(null);
              for (int j = 0; j < fmts.length; j++) {
                   if (fmts[j].matches(jpegFmt)) {
                   qc = (QualityControl)cs[i];
                   qc.setQuality(val);
                   System.err.println("- Setting quality to " +
                             val + " on " + qc);
                   break;
              if (qc != null)
              break;
    * Convenience methods to handle processor's state changes.
    private Integer stateLock = new Integer(0);
    private boolean failed = false;
    Integer getStateLock() {
         return stateLock;
    void setFailed() {
         failed = true;
    private synchronized boolean waitForState(Processor p, int state) {
         p.addControllerListener(new StateListener());
         failed = false;
         // Call the required method on the processor
         if (state == Processor.Configured) {
         p.configure();
         } else if (state == Processor.Realized) {
         p.realize();
         // Wait until we get an event that confirms the
         // success of the method, or a failure event.
         // See StateListener inner class
         while (p.getState() < state && !failed) {
         synchronized (getStateLock()) {
              try {
              getStateLock().wait();
              } catch (InterruptedException ie) {
              return false;
         if (failed)
         return false;
         else
         return true;
    * Inner Classes
    class StateListener implements ControllerListener {
         public void controllerUpdate(ControllerEvent ce) {
         // If there was an error during configure or
         // realiz

    I do this all the time, I put my MBP to a 60 inch Sharp. If you have the video working do the simple thing first. Check to make sure your sound is on your TV and Mac. Then if that doesn't work go to System Prefrences and under sound go to a tab called Output and see if your TV is listed and if it is change it to that setting
    Hope It Works

Maybe you are looking for