1/* 2 * Copyright (c) 2023-2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#ifndef HISTREAMER_PLUGIN_MEDIA_SOURCE_H 17#define HISTREAMER_PLUGIN_MEDIA_SOURCE_H 18 19#include <map> 20#include <memory> 21#ifndef OHOS_LITE 22#include "common/media_data_source.h" 23#endif 24#include "meta/media_types.h" 25 26namespace OHOS { 27namespace Media { 28namespace Plugins { 29/// End of Stream Buffer Flag 30#define BUFFER_FLAG_EOS 0x00000001 31/// Video Key Frame Flag 32#define BUFFER_FLAG_KEY_FRAME 0x00000002 33/** 34 * @brief Unified enumerates media source types. 35 * 36 * @since 1.0 37 * @version 1.0 38 */ 39enum class SourceType : int32_t { 40 /** Local file path or network address */ 41 SOURCE_TYPE_URI = 0, 42 /** Local file descriptor */ 43 SOURCE_TYPE_FD, 44 /** Stream data */ 45 SOURCE_TYPE_STREAM, 46}; 47 48typedef struct PlayStrategy { 49 uint32_t width {0}; 50 uint32_t height {0}; 51 uint32_t duration {0}; 52 bool preferHDR {false}; 53 std::string audioLanguage {""}; 54 std::string subtitleLanguage {""}; 55} PlayStrategy; 56 57typedef struct DownloadInfo { 58 int32_t avgDownloadRate {0}; 59 int32_t avgDownloadSpeed {0}; 60 uint64_t totalDownLoadBits {0}; 61 bool isTimeOut {false}; 62} DownloadInfo; 63 64class AVMimeTypes { 65public: 66 static constexpr std::string_view APPLICATION_M3U8 = "application/m3u8"; 67}; 68 69typedef struct PlaybackInfo { 70 std::string serverIpAddress {}; 71 int64_t averageDownloadRate = 0; 72 int64_t downloadRate = 0; 73 bool isDownloading = false; 74 int64_t bufferDuration = 0; 75} PlaybackInfo; 76 77class MediaSource { 78public: 79 /// Construct an a specified URI. 80 explicit MediaSource(std::string uri); 81 82#ifndef OHOS_LITE 83 explicit MediaSource(std::shared_ptr<IMediaDataSource> dataSrc); 84#endif 85 86 MediaSource(std::string uri, std::map<std::string, std::string> header); 87 88 /// Destructor 89 virtual ~MediaSource() = default; 90 91 /// Obtains the source type. 92 SourceType GetSourceType() const; 93 94 /// Obtains the media source URI. 95 const std::string &GetSourceUri() const; 96 97 const std::map<std::string, std::string> &GetSourceHeader() const; 98 99 void SetPlayStrategy(const std::shared_ptr<PlayStrategy>& playStrategy); 100 101 std::shared_ptr<PlayStrategy> GetPlayStrategy() const; 102 103 void SetMimeType(const std::string& mimeType); 104 105 std::string GetMimeType() const; 106 107 void SetAppUid(int32_t appUid); 108 109 int32_t GetAppUid(); 110 111 //std::shared_ptr<DataConsumer> GetDataConsumer() const; 112#ifndef OHOS_LITE 113 std::shared_ptr<IMediaDataSource> GetDataSrc() const; 114#endif 115private: 116 std::string uri_ {}; 117 std::string mimeType_ {}; 118 SourceType type_ {}; 119 std::map<std::string, std::string> header_ {}; 120 std::shared_ptr<PlayStrategy> playStrategy_ {}; 121 int32_t appUid_ {-1}; 122 //std::shared_ptr<DataConsumer> dataConsumer_ {}; 123#ifndef OHOS_LITE 124 std::shared_ptr<IMediaDataSource> dataSrc_ {}; 125#endif 126}; 127} // namespace Plugins 128} // namespace Media 129} // namespace OHOS 130#endif