RTSPSource.h revision 840667883fd09d44015716d79bc3ac4d60edc0f0
12bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber/* 22bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber * Copyright (C) 2010 The Android Open Source Project 32bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber * 42bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 52bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber * you may not use this file except in compliance with the License. 62bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber * You may obtain a copy of the License at 72bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber * 82bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 92bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber * 102bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber * Unless required by applicable law or agreed to in writing, software 112bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 122bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber * See the License for the specific language governing permissions and 142bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber * limitations under the License. 152bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber */ 162bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 172bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber#ifndef RTSP_SOURCE_H_ 182bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 192bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber#define RTSP_SOURCE_H_ 202bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 212bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber#include "NuPlayerSource.h" 222bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 232bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber#include <media/stagefright/foundation/AHandlerReflector.h> 242bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 252bfdd428c56c7524d1a11979f200a1762866032dAndreas Hubernamespace android { 262bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 272bfdd428c56c7524d1a11979f200a1762866032dAndreas Huberstruct ALooper; 282bfdd428c56c7524d1a11979f200a1762866032dAndreas Huberstruct AnotherPacketSource; 292bfdd428c56c7524d1a11979f200a1762866032dAndreas Huberstruct MyHandler; 302bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 312bfdd428c56c7524d1a11979f200a1762866032dAndreas Huberstruct NuPlayer::RTSPSource : public NuPlayer::Source { 322bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber RTSPSource( 332bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber const char *url, 342bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber const KeyedVector<String8, String8> *headers, 352bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber bool uidValid = false, 362bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber uid_t uid = 0); 372bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 382bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber virtual void start(); 392bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber virtual void stop(); 402bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 412bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber virtual status_t feedMoreTSData(); 422bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 432bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber virtual status_t dequeueAccessUnit(bool audio, sp<ABuffer> *accessUnit); 442bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 452bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber virtual status_t getDuration(int64_t *durationUs); 462bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber virtual status_t seekTo(int64_t seekTimeUs); 472bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber virtual bool isSeekable(); 482bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 492bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber void onMessageReceived(const sp<AMessage> &msg); 502bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 512bfdd428c56c7524d1a11979f200a1762866032dAndreas Huberprotected: 522bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber virtual ~RTSPSource(); 532bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 54840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber virtual sp<MetaData> getFormatMeta(bool audio); 55840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 562bfdd428c56c7524d1a11979f200a1762866032dAndreas Huberprivate: 572bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber enum { 582bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber kWhatNotify = 'noti', 592bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber kWhatDisconnect = 'disc', 60ee736e9e74c5368db8d63214513c85cb74bb0183Andreas Huber kWhatPerformSeek = 'seek', 612bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber }; 622bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 632bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber enum State { 642bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber DISCONNECTED, 652bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber CONNECTING, 662bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber CONNECTED, 672bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber SEEKING, 682bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber }; 692bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 702bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber enum Flags { 712bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber // Don't log any URLs. 722bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber kFlagIncognito = 1, 732bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber }; 742bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 752bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber struct TrackInfo { 762bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber sp<AnotherPacketSource> mSource; 772bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 782bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber int32_t mTimeScale; 792bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber uint32_t mRTPTime; 802bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber int64_t mNormalPlaytimeUs; 811906e5c7492b9cbc88601365536a69e9a490c963Andreas Huber bool mNPTMappingValid; 822bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber }; 832bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 842bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber AString mURL; 852bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber KeyedVector<String8, String8> mExtraHeaders; 862bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber bool mUIDValid; 872bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber uid_t mUID; 882bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber uint32_t mFlags; 892bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber State mState; 902bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber status_t mFinalResult; 912bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber uint32_t mDisconnectReplyID; 92bfd4d0d9fe0033abf3f55b94f30f6a58846a875eAndreas Huber bool mStartingUp; 932bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 942bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber sp<ALooper> mLooper; 952bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber sp<AHandlerReflector<RTSPSource> > mReflector; 962bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber sp<MyHandler> mHandler; 972bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 982bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber Vector<TrackInfo> mTracks; 992bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber sp<AnotherPacketSource> mAudioTrack; 1002bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber sp<AnotherPacketSource> mVideoTrack; 1012bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 102ee736e9e74c5368db8d63214513c85cb74bb0183Andreas Huber int32_t mSeekGeneration; 103ee736e9e74c5368db8d63214513c85cb74bb0183Andreas Huber 1042bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber sp<AnotherPacketSource> getSource(bool audio); 1052bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 1062bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber void onConnected(); 1072bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber void onDisconnected(const sp<AMessage> &msg); 1082bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber void finishDisconnectIfPossible(); 1092bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 110ee736e9e74c5368db8d63214513c85cb74bb0183Andreas Huber void performSeek(int64_t seekTimeUs); 111ee736e9e74c5368db8d63214513c85cb74bb0183Andreas Huber 112bfd4d0d9fe0033abf3f55b94f30f6a58846a875eAndreas Huber bool haveSufficientDataOnAllTracks(); 113bfd4d0d9fe0033abf3f55b94f30f6a58846a875eAndreas Huber 1142bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(RTSPSource); 1152bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber}; 1162bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 1172bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber} // namespace android 1182bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber 1192bfdd428c56c7524d1a11979f200a1762866032dAndreas Huber#endif // RTSP_SOURCE_H_ 120