// Copyright 2014 Google Inc. All rights reserved. // // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file or at // https://developers.google.com/open-source/licenses/bsd #ifndef APP_STREAM_DESCRIPTOR_H_ #define APP_STREAM_DESCRIPTOR_H_ #include #include #include #include "packager/media/base/container_names.h" namespace shaka { namespace media { /// Defines a single input/output stream, it's input source, output destination, /// stream selector, and optional segment template and user-specified bandwidth. struct StreamDescriptor { StreamDescriptor(); ~StreamDescriptor(); std::string stream_selector; std::string input; std::string output; std::string segment_template; uint32_t bandwidth = 0; std::string language; MediaContainerName output_format = CONTAINER_UNKNOWN; std::string hls_name; std::string hls_group_id; std::string hls_playlist_name; uint32_t trick_play_factor = 0; }; class StreamDescriptorCompareFn { public: bool operator()(const StreamDescriptor& a, const StreamDescriptor& b) { if (a.input == b.input) { if (a.stream_selector == b.stream_selector) // Stream with high trick_play_factor is at the beginning. return a.trick_play_factor > b.trick_play_factor; else return a.stream_selector < b.stream_selector; } return a.input < b.input; } }; /// Sorted list of StreamDescriptor. typedef std::multiset StreamDescriptorList; /// Parses a descriptor string, and inserts into sorted list of stream /// descriptors. /// @param descriptor_string contains comma separate name-value pairs describing /// the stream. /// @param descriptor_list is a pointer to the sorted descriptor list into /// which the new descriptor should be inserted. /// @return true if successful, false otherwise. May print error messages. bool InsertStreamDescriptor(const std::string& descriptor_string, StreamDescriptorList* descriptor_list); } // namespace media } // namespace shaka #endif // APP_STREAM_DESCRIPTOR_H_