package jp.ac.naka.ec.media;

import java.awt.Component;
import java.io.IOException;

import javax.media.MediaException;

import net.sourceforge.jsdp.SessionDescription;

public interface MediaPlayer {

	/**
	 * 送信用のSDPの取得。
	 * 
	 * @param version
	 * @param userName
	 * @param sessionName
	 * @throws MediaException
	 * @return
	 */
	public String getRequestSessionDescription(int version, String userName,
			String sessionName);

	/**
	 * JMFでレスポンス可能なフォーマットタイプを返す
	 * 
	 * @param sdp_str
	 */
	public int[] getReceivableFormats(String sdp_str);

	/**
	 * 受け取り可能なフォーマットの追加
	 * @param payload
	 */
	public void addAvailableFormat(int payload);

	/**
	 * 指定のSDPから生成されるSDPの取得
	 * @param sdp_string
	 * @param version
	 * @param userName
	 * @param sessionName
	 * @return
	 */
	public String getResponseSessionDescription(String sdp_string, int version,
			String userName, String sessionName);

	/**
	 * 指定のSDPから生成されるSDPの取得
	 * @param sdp
	 * @return
	 */
	public SessionDescription getResponseSessionDescription(SessionDescription sdp);
	
	/**
	 * RTPストリームの受信
	 * 
	 * @param sdp_string
	 */
	public void receiveMediaStream(String sdp_string)throws MediaException;

	/**
	 * キャプチャで取得したメディアのRTPによる送信。
	 * 
	 * @param sdp_string
	 * @throws MediaException 
	 */

	public void sendMediaStream(String path, int port) throws  MediaException;
	
	/**
	 * キャプチャで取得したメディアのRTPによる送信。
	 * @param sdp_string
	 * @throws MediaException
	 * @throws IOException
	 */
	public void sendMediaStream(String sdp_string) throws  MediaException, IOException;

	
	/**
	 * ファイルから取得したメディアからのRTP送信。
	 * 
	 * @param sdp_String
	 * @param path
	 * @throws MediaException 
	 */
	public void sendMediaStream(String path, int port, String media) throws MediaException;

	/**
	 * RTPメディアの受信を止める。
	 * 
	 */
	public void stopReceivingMediaStream();

	/**
	 * RTPによるメディアの送信をやめる。
	 * 
	 */
	public void stopSendingMediaStream() ;
	
	/**
	 * 指定のSDPで通信が可能かどうかを検証
	 * 
	 * @param sdp_string
	 * @return
	 */
	public boolean isAvailable(String sdp_string);

	/**
	 * オーディオの受信中かどうかの検証。
	 * 
	 * @return
	 */
	public boolean isPlaying();

	/**
	 * RTP送信のためのコントローラ取得
	 * @return
	 */
	public Component getTransmitterController();

	/**
	 * RTP受信のためのコントローラ取得
	 * @return
	 */
	public Component getReceiverController();
	
	/**
	 * 受信した動画の描画用コンポーネントの取得
	 * @return
	 */
	public Component getVisualComponent();

	/**
	 * オーディオの送信中かどうかの検証。
	 * 
	 * @return
	 */
	public boolean isSending();

	/**
	 * 送信用のSDPの取得
	 * @param user_name　ユーザ名
	 * @param session_name　セッション名
	 * @throws MediaException
	 * @return
	 */
	public SessionDescription getRequestSessionDescription(String user_name, String session_name) throws MediaException;

}