157648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber/* 257648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * Copyright (C) 2010 The Android Open Source Project 357648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * 457648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 557648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * you may not use this file except in compliance with the License. 657648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * You may obtain a copy of the License at 757648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * 857648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 957648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * 1057648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * Unless required by applicable law or agreed to in writing, software 1157648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 1257648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1357648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * See the License for the specific language governing permissions and 1457648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber * limitations under the License. 1557648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber */ 1657648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 1757648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber#ifndef A_RTP_SESSION_H_ 1857648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 1957648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber#define A_RTP_SESSION_H_ 2057648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 2157648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber#include <media/stagefright/foundation/AHandler.h> 2257648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 2357648e4eec7dd2593af467877bc7cce4aa654759Andreas Hubernamespace android { 2457648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 2557648e4eec7dd2593af467877bc7cce4aa654759Andreas Huberstruct APacketSource; 2657648e4eec7dd2593af467877bc7cce4aa654759Andreas Huberstruct ARTPConnection; 2757648e4eec7dd2593af467877bc7cce4aa654759Andreas Huberstruct ASessionDescription; 2857648e4eec7dd2593af467877bc7cce4aa654759Andreas Huberstruct MediaSource; 2957648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 3057648e4eec7dd2593af467877bc7cce4aa654759Andreas Huberstruct ARTPSession : public AHandler { 3157648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber ARTPSession(); 3257648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 3357648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber status_t setup(const sp<ASessionDescription> &desc); 3457648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 3557648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber size_t countTracks(); 3657648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber sp<MediaSource> trackAt(size_t index); 3757648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 3857648e4eec7dd2593af467877bc7cce4aa654759Andreas Huberprotected: 3957648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber virtual void onMessageReceived(const sp<AMessage> &msg); 4057648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 4157648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber virtual ~ARTPSession(); 4257648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 4357648e4eec7dd2593af467877bc7cce4aa654759Andreas Huberprivate: 4457648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber enum { 4557648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber kWhatAccessUnitComplete = 'accu' 4657648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber }; 4757648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 4857648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber struct TrackInfo { 4957648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber int mRTPSocket; 5057648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber int mRTCPSocket; 5157648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 5257648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber sp<APacketSource> mPacketSource; 5357648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber }; 5457648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 5557648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber status_t mInitCheck; 5657648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber sp<ASessionDescription> mDesc; 5757648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber sp<ARTPConnection> mRTPConn; 5857648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 5957648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber Vector<TrackInfo> mTracks; 6057648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 6157648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber bool validateMediaFormat(size_t index, unsigned *port) const; 6257648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber static int MakeUDPSocket(unsigned port); 6357648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 6457648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(ARTPSession); 6557648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber}; 6657648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 6757648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber} // namespace android 6857648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber 6957648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber#endif // A_RTP_SESSION_H_ 70