Changeset 103


Ignore:
Timestamp:
08/24/10 22:22:35 (18 months ago)
Author:
shiretu
Message:

-- added rolling playlists support

Location:
trunk/sources
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/androidapplestreaming/src/main.cpp

    r102 r103  
    112112//#define MY_SESSION_ID "playback=HTTP_CLOUD_MOBILE&contentId=100000000001&appAccountName=mlb&eventId=14-265677-2010-08-23&ipid=23272205&sessionKey=1Mdu%2B0CADyV4ewOJTgKsPSqMPQE%3D&deviceId=ANDROID_354957033071773&country=us&postalCode=10011&platform=ANDROID" 
    113113 
    114 #define MY_URL "http://mlbsegqa.mlb.com/mlbam/2010/08/17/MLB_GAME_VIDEO_DETNYA_HOME_20100817/master_mobile.m3u8" 
     114//#define MY_URL "http://mlbsegqa.mlb.com/mlbam/2010/08/17/MLB_GAME_VIDEO_DETNYA_HOME_20100817/master_mobile.m3u8" 
     115//#define MY_KEY "pFD3++v0LKfm38F2mCgIu0sXzn4=" 
     116//#define MY_SESSION_ID "playback=HTTP_CLOUD_MOBILE&contentId=10111969&appAccountName=mlb&eventId=14-265611-2010-08-18&ipid=23272205&sessionKey=6bdsqzUU7oBI4gixJxFFON2QHwA%3D&deviceId=ANDROID_354957033071773&country=us&postalCode=10011&platform=ANDROID" 
     117 
     118#define MY_URL "http://mlbsegqa.mlb.com/mlbam/2010/08/24/MLB_GAME_VIDEO_TBAANA_HOME_20100824/master_mobile.m3u8" 
    115119#define MY_KEY "pFD3++v0LKfm38F2mCgIu0sXzn4=" 
    116 #define MY_SESSION_ID "playback=HTTP_CLOUD_MOBILE&contentId=10111969&appAccountName=mlb&eventId=14-265611-2010-08-18&ipid=23272205&sessionKey=6bdsqzUU7oBI4gixJxFFON2QHwA%3D&deviceId=ANDROID_354957033071773&country=us&postalCode=10011&platform=ANDROID" 
     120#define MY_SESSION_ID "playback=HTTP_CLOUD_MOBILE&contentId=100000000087&appAccountName=mlb&eventId=14-265692-2010-08-24&ipid=23272205&sessionKey=6bdsqzUU7oBI4gixJxFFON2QHwA%3D&deviceId=ANDROID_354957033071773&country=us&postalCode=10011&platform=ANDROID" 
    117121 
    118122//#define CONDENSED_CONN_STRING "base64:aHR0cDovL21sYnZvZC1ha2MubWxiLmNvbS9tbGJhbS8yMDEwLzA0LzA4L01MQl9HQU1FX1ZJREVPX0xBTlBJVF9IT01FXzIwMTAwNDA4L21hc3Rlcl93aXJlZC5tM3U4fHlNQmVFcEl6OEJEaUFYV0k0dUdIUm1UaHdIRT18cGxheWJhY2s9SFRUUF9DTE9VRF9XSVJFRCZjb250ZW50SWQ9NzMyMDA4NSZhcHBBY2NvdW50TmFtZT1tbGImZXZlbnRJZD0xNC0yNjM4NDktMjAxMC0wNC0wOCZpcGlkPTExNjI3NzA2JnNlc3Npb25LZXk9cUNveGRIaUlOY3FDbHlEcEZoU2dma3dJSWc0JTNE" 
  • trunk/sources/applications/applestreamingclient/include/clientcontext.h

    r102 r103  
    7171        double _lastWallClock; 
    7272        map<uint32_t, uint32_t> _allowedBitrates; 
     73        map<uint32_t, uint32_t> _mediaSequences; 
    7374private: 
    7475        ClientContext(); 
     
    124125        bool ConsumeAVBuffer(); 
    125126private: 
     127        bool ReloadPlaylist(uint32_t bw); 
    126128        uint32_t GetOptimalBw(); 
    127129        bool ParseConnectingString(); 
  • trunk/sources/applications/applestreamingclient/include/playlist.h

    r58 r103  
    6262        void GetSeekRange(double &min, double &max); 
    6363        uint32_t GetItemIndex(double seekPoint); 
     64        uint32_t GetLastMediaSequence(); 
    6465}; 
    6566 
  • trunk/sources/applications/applestreamingclient/src/clientcontext.cpp

    r102 r103  
    291291 
    292292        //4. Is this the last item in the playlis? 
     293        FINEST("---------------------------------------------------"); 
    293294        if (_currentItemIndex >= pPlaylist->GetItemsCount()) { 
    294                 FINEST("End of list. Wait one sec and try again"); 
    295                 return EnqueueFetchChildPlaylist(_childPlaylists[optimalBw]->GetPlaylistUri(), optimalBw); 
    296         } 
     295                if (ReloadPlaylist(optimalBw)) { 
     296                        WARN("End of list. Wait one sec and try again"); 
     297                        FINEST("---------------------------------------------------"); 
     298                        return EnqueueFetchChildPlaylist(_childPlaylists[optimalBw]->GetPlaylistUri(), optimalBw); 
     299                } else { 
     300                        WARN("No playlist reload"); 
     301                        _currentItemIndex--; 
     302                } 
     303        } 
     304        FINEST("_currentItemIndex: %d", _currentItemIndex); 
     305        FINEST("---------------------------------------------------"); 
    297306 
    298307        //4. Get the item URI and the key URI if available 
    299308        string uri = pPlaylist->GetItemUri(_currentItemIndex); 
    300309        string keyUri = pPlaylist->GetItemKeyUri(_currentItemIndex); 
     310        _mediaSequences[optimalBw] = pPlaylist->GetItemMediaSequence(_currentItemIndex); 
    301311        if (keyUri != "") 
    302312                keyUri += "&" + _connectingString.sessionId; 
     
    392402        //7. Done 
    393403        return true; 
     404} 
     405 
     406bool ClientContext::ReloadPlaylist(uint32_t bw) { 
     407        if (!MAP_HAS1(_mediaSequences, bw)) { 
     408                FINEST("bw %d not in _mediaSequences", bw); 
     409                return true; 
     410        } 
     411        if (!MAP_HAS1(_childPlaylists, bw)) { 
     412                FINEST("bw %d not in playlists", bw); 
     413                return true; 
     414        } 
     415 
     416        uint32_t lastSequence = _mediaSequences[bw]; 
     417        FINEST("lastSequence: %d", lastSequence); 
     418        uint32_t playlistSequnece = _childPlaylists[bw]->GetLastMediaSequence(); 
     419        FINEST("playlistSequnece: %d", playlistSequnece); 
     420 
     421        return lastSequence == playlistSequnece; 
    394422} 
    395423 
  • trunk/sources/applications/applestreamingclient/src/playlist.cpp

    r81 r103  
    252252        return index; 
    253253} 
     254 
     255uint32_t Playlist::GetLastMediaSequence() { 
     256        if (_itemMediaSequences.size() == 0) 
     257                return 0; 
     258        return _itemMediaSequences[_itemMediaSequences.size() - 1]; 
     259} 
  • trunk/sources/thelib/src/protocols/rtp/streaming/outnetrtpudph264stream.cpp

    r88 r103  
    343343        return true; 
    344344} 
     345//bool OutNetRTPUDPH264Stream::FeedDataAudioMPEG4Generic_one_by_one(uint8_t *pData, uint32_t dataLength, 
     346//              uint32_t processedLength, uint32_t totalLength, 
     347//              double absoluteTimestamp) { 
     348//      return true; 
     349//      //1. We only support frame-by-frame approach 
     350//      if (dataLength != totalLength) { 
     351//              WARN("Chunked mode not yet supported"); 
     352//              return true; 
     353//      } 
     354//      /* 
     355//      0                   1                   2                   3 
     356//      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
     357//   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     358//   |V=2|P|X|  CC   |M|     PT      |       sequence number         | 
     359//   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     360//   |                           timestamp                           | 
     361//   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     362//   |           synchronization source (SSRC) identifier            | 
     363//   +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 
     364//   |            contributing source (CSRC) identifiers             | 
     365//   |                             ....                              | 
     366//   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     367// 
     368//   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- .. -+-+-+-+-+-+-+-+-+-+ 
     369//   |AU-headers-length|AU-header|AU-header|      |AU-header|padding| 
     370//   |                 |   (1)   |   (2)   |      |   (n)   | bits  | 
     371//   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- .. -+-+-+-+-+-+-+-+-+-+ 
     372//       */ 
     373// 
     374//      //      _audioData.msg_iov[0].iov_base[00] V,P,X,CC 
     375//      //      _audioData.msg_iov[0].iov_base[01] M,PT 
     376//      //      _audioData.msg_iov[0].iov_base[02] sequence number 
     377//      //      _audioData.msg_iov[0].iov_base[03] sequence number 
     378//      //      _audioData.msg_iov[0].iov_base[04] timestamp 
     379//      //      _audioData.msg_iov[0].iov_base[05] timestamp 
     380//      //      _audioData.msg_iov[0].iov_base[06] timestamp 
     381//      //      _audioData.msg_iov[0].iov_base[07] timestamp 
     382//      //      _audioData.msg_iov[0].iov_base[08] SSRC 
     383//      //      _audioData.msg_iov[0].iov_base[09] SSRC 
     384//      //      _audioData.msg_iov[0].iov_base[10] SSRC 
     385//      //      _audioData.msg_iov[0].iov_base[11] SSRC 
     386//      //      _audioData.msg_iov[0].iov_base[12] AU-headers-length 
     387//      //      _audioData.msg_iov[0].iov_base[13] AU-headers-length 
     388// 
     389//      //3. counter 
     390//      put_htons(((uint8_t *) _audioData.msg_iov[0].iov_base) + 2, _audioCounter); 
     391//      _audioCounter++; 
     392// 
     393//      //4. Timestamp 
     394//      put_htonl(((uint8_t *) _audioData.msg_iov[0].iov_base) + 4, 
     395//                      (uint32_t) (absoluteTimestamp 
     396//                      * (double) GetCapabilities()->audioCodecInfo.aac.sampleRate / 1000.000)); 
     397// 
     398//      put_htons(((uint8_t *) _audioData.msg_iov[0].iov_base) + 12, 16); 
     399// 
     400//      uint16_t auHeader = (uint16_t) ((dataLength - 7) << 3); 
     401//      put_htons(((uint8_t *) _audioData.msg_iov[1].iov_base), auHeader); 
     402//      _audioData.msg_iov[1].iov_len = 2; 
     403// 
     404//      FINEST("%02x%02x %02x%02x %02x%02x%02x%02x %02x%02x%02x%02x - %02x%02x %02x%02x %08x %.2f", 
     405//                      ((uint8_t *) _audioData.msg_iov[0].iov_base)[0], 
     406//                      ((uint8_t *) _audioData.msg_iov[0].iov_base)[1], 
     407//                      ((uint8_t *) _audioData.msg_iov[0].iov_base)[2], 
     408//                      ((uint8_t *) _audioData.msg_iov[0].iov_base)[3], 
     409//                      ((uint8_t *) _audioData.msg_iov[0].iov_base)[4], 
     410//                      ((uint8_t *) _audioData.msg_iov[0].iov_base)[5], 
     411//                      ((uint8_t *) _audioData.msg_iov[0].iov_base)[6], 
     412//                      ((uint8_t *) _audioData.msg_iov[0].iov_base)[7], 
     413//                      ((uint8_t *) _audioData.msg_iov[0].iov_base)[8], 
     414//                      ((uint8_t *) _audioData.msg_iov[0].iov_base)[9], 
     415//                      ((uint8_t *) _audioData.msg_iov[0].iov_base)[10], 
     416//                      ((uint8_t *) _audioData.msg_iov[0].iov_base)[11], 
     417//                      ((uint8_t *) _audioData.msg_iov[0].iov_base)[12], 
     418//                      ((uint8_t *) _audioData.msg_iov[0].iov_base)[13], 
     419//                      ((uint8_t *) _audioData.msg_iov[1].iov_base)[0], 
     420//                      ((uint8_t *) _audioData.msg_iov[1].iov_base)[1], 
     421//                      dataLength - 7, 
     422//                      absoluteTimestamp); 
     423// 
     424//      //6. put the actual buffer 
     425//      _audioData.msg_iov[2].iov_len = dataLength - 7; 
     426//      _audioData.msg_iov[2].iov_base = pData + 7; 
     427// 
     428//      return _pConnectivity->FeedAudioData(_audioData); 
     429//} 
    345430#endif /* HAS_PROTOCOL_RTP */ 
    346431 
Note: See TracChangeset for help on using the changeset viewer.