139ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber/* 239ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * Copyright (C) 2010 The Android Open Source Project 339ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * 439ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 539ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * you may not use this file except in compliance with the License. 639ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * You may obtain a copy of the License at 739ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * 839ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 939ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * 1039ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * Unless required by applicable law or agreed to in writing, software 1139ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 1239ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1339ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * See the License for the specific language governing permissions and 1439ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber * limitations under the License. 1539ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber */ 1639ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 1739ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber#ifndef A_RTP_SESSION_H_ 1839ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 1939ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber#define A_RTP_SESSION_H_ 2039ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 2139ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber#include <media/stagefright/foundation/AHandler.h> 2239ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 2339ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Hubernamespace android { 2439ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 2539ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huberstruct APacketSource; 2639ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huberstruct ARTPConnection; 2739ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huberstruct ASessionDescription; 2839ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huberstruct MediaSource; 2939ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 3039ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huberstruct ARTPSession : public AHandler { 3139ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber ARTPSession(); 3239ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 3339ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber status_t setup(const sp<ASessionDescription> &desc); 3439ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 3539ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber size_t countTracks(); 3639ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber sp<MediaSource> trackAt(size_t index); 3739ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 3839ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huberprotected: 3939ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber virtual void onMessageReceived(const sp<AMessage> &msg); 4039ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 4139ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber virtual ~ARTPSession(); 4239ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 4339ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huberprivate: 4439ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber enum { 4539ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber kWhatAccessUnitComplete = 'accu' 4639ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber }; 4739ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 4839ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber struct TrackInfo { 4939ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber int mRTPSocket; 5039ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber int mRTCPSocket; 5139ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 5239ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber sp<APacketSource> mPacketSource; 5339ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber }; 5439ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 5539ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber status_t mInitCheck; 5639ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber sp<ASessionDescription> mDesc; 5739ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber sp<ARTPConnection> mRTPConn; 5839ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 5939ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber Vector<TrackInfo> mTracks; 6039ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 6139ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber bool validateMediaFormat(size_t index, unsigned *port) const; 6239ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber static int MakeUDPSocket(unsigned port); 6339ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 6439ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(ARTPSession); 6539ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber}; 6639ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 6739ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber} // namespace android 6839ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 6939ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber#endif // A_RTP_SESSION_H_ 70