• 七牛直播推流端flutter插件,支持Android和iOS


    1. // Android native 侧参数,用于推流相关参数配置,参数名称和七牛推流SDK基本一致
    2. data class AVStreamingConfig(
    3. /**
    4. * 忽略HTTPS证书验证
    5. */
    6. var disableCertificateValidation: Boolean = false,
    7. var logLevel: Int? = null,
    8. var isLogFileEnabled: Boolean = false,
    9. var isTorchOn: Boolean = false,
    10. var publishUrl: String? = null,
    11. var uid: String? = null,
    12. var isQuicEnabled: Boolean = false,
    13. var isSrtEnabled: Boolean = false,
    14. /**
    15. * StreamingProfile
    16. */
    17. var isAudioOnly: Boolean = false,
    18. var videoQuality: Int = VIDEO_QUALITY_HIGH1,
    19. var encodingSizeLevel: Int? = null,
    20. var encodingOrientation: ENCODING_ORIENTATION = ENCODING_ORIENTATION.PORT,
    21. var encoderRCMode: EncoderRCModes = EncoderRCModes.QUALITY_PRIORITY,
    22. var isVideoFPSControl: Boolean = true,
    23. var pictureStreamingAssetName: String? = null,
    24. var audioQuality: Int = AUDIO_QUALITY_MEDIUM2,
    25. var audioQualitySampleRate: Int? = null,
    26. var audioQualityBitrate: Int? = null,
    27. var videoQualityFPS: Int? = null,
    28. var videoQualityBitrate: Int? = null,
    29. var videoQualityMaxKeyFrameInterval: Int? = null,
    30. var videoQualityProfile: H264Profile? = null,
    31. var preferredVideoEncodingWidth: Int = 480,
    32. var preferredVideoEncodingHeight: Int = 848,
    33. var bitrateAdjustMode: BitrateAdjustMode = BitrateAdjustMode.Auto,
    34. /**
    35. * bitrateAdjustMode == BitrateAdjustMode.Auto 时生效
    36. */
    37. var videoAdaptiveBitrateMin: Int = 800,
    38. /**
    39. * bitrateAdjustMode == BitrateAdjustMode.Auto 时生效
    40. */
    41. var videoAdaptiveBitrateMax: Int = 1500,
    42. var codecType: AVCodecType = AVCodecType.HW_VIDEO_CODEC,
    43. var yuvFilterMode: YuvFilterMode = YuvFilterMode.Linear,
    44. var tcpSendTimeAdjustThreshold: Int? = null,
    45. var fpsAdjustThreshold: Int? = null,
    46. var isFpsControllerEnable: Boolean? = null,
    47. var latency: Int? = null,
    48. var localFileAbsolutePath: String? = null,
    49. var pictureStreamingFilePath: String? = null,
    50. var pictureStreamingFps: Float? = null,
    51. var pictureStreamingResourceName: String? = null,
    52. var preferredVideoEncodingStartPointX: Int? = null,
    53. var preferredVideoEncodingStartPointY: Int? = null,
    54. var preferredVideoEncodingImgWidth: Int? = null,
    55. var preferredVideoEncodingImgHeight: Int? = null,
    56. //setRtmpOptions
    57. var sendingBufferLowThreshold: Float? = null,
    58. var sendingBufferHighThreshold: Float? = null,
    59. var sendingBufferDurationLimit: Float? = null,
    60. var sendingBufferLowThresholdTimeout: Long? = null,
    61. var sendTimeoutInSecond: Int? = null,
    62. var streamId: String? = null,
    63. var streamHubName: String? = null,
    64. var streamTitle: String? = null,
    65. var streamPublishKey: String? = null,
    66. var streamPublishSecurity: String? = null,
    67. var streamPublishRtmpHost: String? = null,
    68. /**
    69. * [StreamStatusConfig]
    70. */
    71. var streamIntervalMs: Int? = null,
    72. /**
    73. * 是否开启水印
    74. */
    75. var watermarkAssetName: String? = null, // 水印图片名称(flutter端 yaml 文件中的名称)
    76. var watermarkResourcePath: String? = null, // 水印图片名称(手机文件存储的文件路径)
    77. var watermarkResourceName: String? = null, // 水印图片资源名称(Android端 R.drawable. 中的
    78. var watermarkLocation: WATERMARK_LOCATION = WATERMARK_LOCATION.NORTH_WEST, // WatermarkSetting.setLocation()
    79. var watermarkLocationX: Float? = null, // WatermarkSetting.setCustomPosition()
    80. var watermarkLocationY: Float? = null, // WatermarkSetting.setCustomPosition()
    81. var watermarkAlpha: Int = 100, // WatermarkSetting.alpha
    82. var watermarkSize: WATERMARK_SIZE = WATERMARK_SIZE.MEDIUM, // WatermarkSetting.setSize()
    83. var watermarkWidth: Int? = null, // WatermarkSetting.setCustomSize()
    84. var watermarkHeight: Int? = null, // WatermarkSetting.setCustomSize()
    85. var watermarkIsInJustDecodeBoundsEnabled: Boolean? = null,
    86. /**
    87. * DNS配置
    88. */
    89. var httpDnsServers: List? = null,
    90. var udpDnsServers: List? = null,
    91. /**
    92. * Camera配置
    93. */
    94. var frontFacing: Boolean = true, // 是否使用前置摄像头
    95. var cameraPrvSizeLevel: PREVIEW_SIZE_LEVEL = PREVIEW_SIZE_LEVEL.MEDIUM, // CameraStreamingSetting.setCameraPrvSizeLevel()
    96. var cameraPrvSizeRatio: PREVIEW_SIZE_RATIO = PREVIEW_SIZE_RATIO.RATIO_16_9, // CameraStreamingSetting.setCameraPrvSizeRatio()
    97. var focusMode: String = FocusMode.CONTINUOUS_VIDEO.mode, // CameraStreamingSetting.focusMode
    98. var videoFilter: VIDEO_FILTER_TYPE = VIDEO_FILTER_TYPE.VIDEO_FILTER_BEAUTY, // CameraStreamingSetting.setVideoFilter()
    99. var isBuiltInFaceBeautyEnabled: Boolean = false, // CameraStreamingSetting.setBuiltInFaceBeautyEnabled
    100. var faceBeautyLevel: Float = 0.6f, // CameraStreamingSetting.FaceBeautySetting
    101. var faceBeautyWhiten: Float = 0.6f, // CameraStreamingSetting.FaceBeautySetting
    102. var faceBeautyRedden: Float = 0.6f, // CameraStreamingSetting.FaceBeautySetting
    103. var isContinuousFocusModeEnabled: Boolean = true, // CameraStreamingSetting.setContinuousFocusModeEnabled()
    104. var isFrontCameraPreviewMirror: Boolean = false, // CameraStreamingSetting.isFrontCameraPreviewMirror
    105. var isFrontCameraMirror: Boolean = false, // CameraStreamingSetting.isFrontCameraMirror
    106. var isPreviewAdaptToEncodingSize: Boolean? = null,
    107. var isPreviewSizeOptimize: Boolean? = null,
    108. var isCaptureCameraFrameOnly: Boolean? = null,
    109. var isRecordingHint: Boolean? = null,
    110. var resetTouchFocusDelayInMs: Int? = null,
    111. /**
    112. * Microphone配置
    113. */
    114. var isBluetoothScoEnabled: Boolean? = null,
    115. var isAECEnabled: Boolean? = null, // MicrophoneStreamingSetting.setAECEnabled(boolean)
    116. var isAudioPtsOptimizeEnabled: Boolean? = null, // MicrophoneStreamingSetting.setAudioPtsOptimizeEnabled(boolean)
    117. var isCaptureAudioFrameOnly: Boolean? = null,
    118. var sampleRate: Int? = null,
    119. /**
    120. * [MediaRecorder.AudioSource]
    121. */
    122. var audioSource: Int? = null, // 设置 MediaRecorder.AudioSource.VOICE_COMMUNICATION
    123. /**
    124. * [AudioFormat]
    125. */
    126. var channelConfig: Int? = null, // 立体声,不是所有手机都有效,设置 AudioFormat.CHANNEL_IN_STEREO
    127. var isMuted: Boolean = false // 是否静音
    128. ) {}
    1. import 'dart:core';
    2. // flutter端的参数配置
    3. class AndroidAVStreamingConfig {
    4. /// 忽略HTTPS证书验证
    5. bool? disableCertificateValidation;
    6. /// 2: VERBOSE
    7. /// 3: DEBUG
    8. /// 4: INFO
    9. /// 5: WARN
    10. /// 6: ERROR
    11. /// other: ERROR
    12. int? logLevel;
    13. bool? logFileEnabled;
    14. String? publishUrl;
    15. String? uid;
    16. bool? isQuicEnabled;
    17. bool? isSrtEnabled;
    18. /// StreamingProfile
    19. bool? isAudioOnly;
    20. /// 0: VIDEO_QUALITY_LOW1
    21. /// 1: VIDEO_QUALITY_LOW2
    22. /// 2: VIDEO_QUALITY_LOW3
    23. /// 3: VIDEO_QUALITY_MEDIUM1
    24. /// 4: VIDEO_QUALITY_MEDIUM2
    25. /// 5: VIDEO_QUALITY_MEDIUM3
    26. /// 6: VIDEO_QUALITY_HIGH1
    27. /// 7: VIDEO_QUALITY_HIGH2
    28. /// 8: VIDEO_QUALITY_HIGH3
    29. /// default 6
    30. int? videoQuality;
    31. int? encodingSizeLevel;
    32. /// 0: PORT
    33. /// 1: LAND
    34. /// default 0
    35. int? encodingOrientation;
    36. /// 0: QUALITY_PRIORITY
    37. /// 1: BITRATE_PRIORITY
    38. /// default 0
    39. int? encoderRCMode;
    40. /// default true
    41. bool? isVideoFPSControl;
    42. String? pictureStreamingAssetName;
    43. /// 0: AUDIO_QUALITY_LOW1
    44. /// 1: AUDIO_QUALITY_LOW2
    45. /// 2: AUDIO_QUALITY_MEDIUM1
    46. /// 3: AUDIO_QUALITY_MEDIUM2
    47. /// 4: AUDIO_QUALITY_HIGH1
    48. /// 5: AUDIO_QUALITY_HIGH2
    49. /// default 3
    50. int? audioQuality;
    51. int? audioQualitySampleRate;
    52. int? audioQualityBitrate;
    53. int? videoQualityFPS;
    54. int? videoQualityBitrate;
    55. int? videoQualityMaxKeyFrameInterval;
    56. /// 0: BASELINE
    57. /// 1: MAIN
    58. /// 2: HIGH
    59. /// default null
    60. int? videoQualityProfile;
    61. /// default 480
    62. int? preferredVideoEncodingWidth;
    63. /// default 848
    64. int? preferredVideoEncodingHeight;
    65. /// 0: Auto
    66. /// 1: Manual
    67. /// 2: Disable
    68. /// default 0
    69. int? bitrateAdjustMode;
    70. /// bitrateAdjustMode == BitrateAdjustMode.Auto 时生效, default 800
    71. int? videoAdaptiveBitrateMin;
    72. /// bitrateAdjustMode == BitrateAdjustMode.Auto 时生效, default 1500
    73. int? videoAdaptiveBitrateMax;
    74. /// 0: HW_VIDEO_WITH_HW_AUDIO_CODEC
    75. /// 1: SW_VIDEO_WITH_HW_AUDIO_CODEC
    76. /// 2: SW_VIDEO_WITH_SW_AUDIO_CODEC
    77. /// 3: SW_AUDIO_CODEC
    78. /// 4: HW_AUDIO_CODEC
    79. /// 5: SW_VIDEO_CODEC
    80. /// 6: HW_VIDEO_CODEC
    81. /// 7: HW_VIDEO_SURFACE_AS_INPUT_WITH_HW_AUDIO_CODEC
    82. /// 8: HW_VIDEO_YUV_AS_INPUT_WITH_HW_AUDIO_CODEC
    83. /// 9: HW_VIDEO_SURFACE_AS_INPUT_WITH_SW_AUDIO_CODEC
    84. /// default 6
    85. int? codecType;
    86. /// 0: None
    87. /// 1: Linear
    88. /// 2: Bilinear
    89. /// 3: Box
    90. /// default 1
    91. int? yuvFilterMode;
    92. /// 水印图片名称(flutter端 yaml 文件中的名称)
    93. String? watermarkAssetName;
    94. /// 水印图片名称(手机文件存储的文件路径)
    95. String? watermarkResourcePath;
    96. /// 水印图片资源名称(Android端 R.drawable.<ResourceName> 中的<ResourceName>
    97. String? watermarkResourceName;
    98. /// 0: NORTH_WEST
    99. /// 1: NORTH_EAST
    100. /// 2: SOUTH_WEST
    101. /// 3: SOUTH_EAST
    102. int? watermarkLocation;
    103. /// default 0.5
    104. double? watermarkLocationX;
    105. /// default 0.5
    106. double? watermarkLocationY;
    107. /// default 100
    108. int? watermarkAlpha;
    109. /// 0: LARGE
    110. /// 1: MEDIUM
    111. /// 2: SMALL
    112. /// default 1
    113. int? watermarkSize;
    114. int? watermarkWidth;
    115. int? watermarkHeight;
    116. bool? watermarkIsInJustDecodeBoundsEnabled;
    117. int? tcpSendTimeAdjustThreshold;
    118. int? fpsAdjustThreshold;
    119. bool? isFpsControllerEnable;
    120. int? latency;
    121. String? localFileAbsolutePath;
    122. String? pictureStreamingFilePath;
    123. double? pictureStreamingFps;
    124. String? pictureStreamingResourceName;
    125. int? preferredVideoEncodingStartPointX;
    126. int? preferredVideoEncodingStartPointY;
    127. int? preferredVideoEncodingImgWidth;
    128. int? preferredVideoEncodingImgHeight;
    129. double? sendingBufferLowThreshold;
    130. double? sendingBufferHighThreshold;
    131. double? sendingBufferDurationLimit;
    132. int? sendingBufferLowThresholdTimeout;
    133. int? sendTimeoutInSecond;
    134. String? streamId;
    135. String? streamHubName;
    136. String? streamTitle;
    137. String? streamPublishKey;
    138. String? streamPublishSecurity;
    139. String? streamPublishRtmpHost;
    140. int? streamIntervalMs;
    141. /// DNS配置
    142. List<String>? httpDnsServers;
    143. List<String>? udpDnsServers;
    144. /// Camera配置
    145. /// 是否使用前置摄像头
    146. bool? frontFacing;
    147. /// 0: SMALL
    148. /// 1: MEDIUM
    149. /// 2: LARGE
    150. /// default 1
    151. int? cameraPrvSizeLevel;
    152. /// 0: RATIO_4_3
    153. /// 1: RATIO_16_9
    154. /// default 1
    155. int? cameraPrvSizeRatio;
    156. /// 0: FOCUS_MODE_AUTO
    157. /// 1: FOCUS_MODE_CONTINUOUS_PICTURE
    158. /// 2: FOCUS_MODE_CONTINUOUS_VIDEO
    159. /// default 1
    160. int? focusMode;
    161. /// 0: VIDEO_FILTER_NONE,
    162. /// 1: VIDEO_FILTER_BEAUTY;
    163. int? videoFilter;
    164. bool? isBuiltInFaceBeautyEnabled;
    165. /// default 0.6
    166. double? faceBeautyLevel;
    167. /// default 0.6
    168. double? faceBeautyWhiten;
    169. /// default 0.6
    170. double? faceBeautyRedden;
    171. /// default true
    172. bool? isContinuousFocusModeEnabled;
    173. bool? isFrontCameraPreviewMirror;
    174. bool? isFrontCameraMirror;
    175. bool? isPreviewAdaptToEncodingSize;
    176. bool? isPreviewSizeOptimize;
    177. bool? isCaptureCameraFrameOnly;
    178. bool? isRecordingHint;
    179. int? resetTouchFocusDelayInMs;
    180. /// Microphone配置
    181. bool? isBluetoothScoEnabled;
    182. bool? isAECEnabled;
    183. bool? isAudioPtsOptimizeEnabled;
    184. bool? isCaptureAudioFrameOnly;
    185. int? sampleRate;
    186. /// MediaRecorder.AudioSource, 设置 MediaRecorder.AudioSource.VOICE_COMMUNICATION
    187. int? audioSource;
    188. /// AudioFormat, 立体声,不是所有手机都有效,设置 AudioFormat.CHANNEL_IN_STEREO
    189. int? channelConfig;
    190. bool? isMuted;
    191. }
    1. // Swift, iOS端参数, 参数名称和七牛直播推流SDK iOS端基本一致
    2. import Foundation
    3. import PLMediaStreamingKit
    4. import AVFoundation
    5. import HappyDNS
    6. class AVStreamingConfig {
    7. /*************** PLVideoCaptureConfiguration ***************/
    8. /**
    9. * 采集的视频数据的帧率,默认为 24
    10. */
    11. var videoFrameRate: Int? = nil
    12. /**
    13. * 采集的视频的 sessionPreset,默认为 AVCaptureSessionPreset640x480
    14. */
    15. var sessionPreset: String? = nil
    16. /**
    17. * 前置预览是否开启镜像,默认为 YES 开启
    18. */
    19. var previewMirrorFrontFacing: Bool? = nil
    20. /**
    21. * 后置预览是否开启镜像,默认为 NO 关闭
    22. */
    23. var previewMirrorRearFacing: Bool? = nil
    24. /**
    25. * 前置摄像头,推的流是否开启镜像,默认为 NO 关闭
    26. */
    27. var streamMirrorFrontFacing: Bool? = nil
    28. /**
    29. * 后置摄像头,推的流是否开启镜像,默认为 NO 关闭
    30. */
    31. var streamMirrorRearFacing: Bool? = nil
    32. /**
    33. * 开启 camera 时的采集摄像头位置,默认为 AVCaptureDevicePositionBack
    34. */
    35. var position: AVCaptureDevice.Position? = nil
    36. /**
    37. * 开启 camera 时的采集摄像头的旋转方向,默认为 AVCaptureVideoOrientationPortrait
    38. */
    39. var videoOrientation: AVCaptureVideoOrientation? = nil
    40. /*************** PLAudioCaptureConfiguration ***************/
    41. /**
    42. * 采集音频数据的声道数,默认为 1
    43. * 并非所有采集设备都支持多声道数据的采集,可以通过检查 [AVAudioSession sharedInstance].maximumInputNumberOfChannels 得到当前采集设备支持的最大声道数
    44. */
    45. var channelsPerFrame: Int? = nil
    46. /**
    47. * 回声消除开关,默认为 NO
    48. * 普通直播用到回声消除的场景不多,当用户开启返听功能,并且使用外放时,可打开这个开关,防止产生尖锐的啸叫声。
    49. */
    50. var acousticEchoCancellationEnable: Bool? = nil
    51. /*************** PLVideoStreamingConfiguration ***************/
    52. /**
    53. * kPLVideoStreamingQualityLow1
    54. * kPLVideoStreamingQualityLow2
    55. * kPLVideoStreamingQualityLow3
    56. * kPLVideoStreamingQualityMedium1
    57. * kPLVideoStreamingQualityMedium2
    58. * kPLVideoStreamingQualityMedium3
    59. * kPLVideoStreamingQualityHigh1
    60. * kPLVideoStreamingQualityHigh2
    61. * kPLVideoStreamingQualityHigh3
    62. */
    63. var videoStreamingQuality: String? = nil
    64. /**
    65. * videoProfileLevel
    66. * H.264 编码时使用的 Profile Level。
    67. * 默认情况下使用 AVVideoProfileLevelH264Baseline31,如果对于视频编码有额外的需求并且知晓该参数带来的影响可以自行更改。
    68. * 当你不清楚该参数更改对分辨率要求,码率等影响时,请不要随意更改。
    69. */
    70. var videoProfileLevel: String? = nil
    71. /**
    72. * videoSize
    73. * 编码时的视频分辨率。
    74. * 需要注意的是,这个参数影响的是视频编码时的分辨率,而非摄像头采集到数据的预览大小,传递给编码器的图像尺寸与此尺寸不同时,会按照 AVVideoScalingModeResizeAspectFill
    75. * 对图像做剪切,从而确保图像不会出现压缩的现象。
    76. */
    77. var videoSize: CGSize? = nil
    78. /**
    79. * expectedSourceVideoFrameRate
    80. * 预期视频的帧率。
    81. * 预期视频的编码帧率,这个数值对编码器的来说并不是直接限定了 fps, 而是给编码器一个预期的视频帧率,最终编码的视频帧率,是由实际输入的数据决定的。
    82. */
    83. var expectedSourceVideoFrameRate: Int? = nil
    84. /**
    85. * videoMaxKeyframeInterval
    86. * 视频编码关键帧最大间隔(GOP)。
    87. * h.264 编码时,两个关键帧之间间隔的最多的帧数,一般为 fps 的两倍或者三倍。
    88. */
    89. var videoMaxKeyframeInterval: Int? = nil
    90. /**
    91. * averageVideoBitRate
    92. * 平均视频编码码率。
    93. * 单位为 bps(Bits per Second)。该参数的视频编码实际过程中,并不是恒定的数值,所以只能设定平均视频编码码率。
    94. */
    95. var averageVideoBitRate: Int? = nil
    96. /**
    97. * videoEncoderType
    98. * H.264 编码器类型
    99. * 默认采用 PLH264EncoderType_AVFoundation 编码方式,在 iOS 8 及以上的系统可采用 PLH264EncoderType_VideoToolbox。
    100. */
    101. var videoEncoderType: PLH264EncoderType? = nil
    102. /*************** PLAudioStreamingConfiguration ***************/
    103. /**
    104. * kPLAudioStreamingQualityHigh1
    105. * kPLAudioStreamingQualityHigh2
    106. * kPLAudioStreamingQualityHigh3
    107. */
    108. var audioStreamingQuality: String? = nil
    109. /**
    110. * 音频编码的采样率, 默认为设备采样率
    111. */
    112. var encodedAudioSampleRate: PLStreamingAudioSampleRate? = nil
    113. /**
    114. * 音频编码比特率,默认为 96kbps
    115. */
    116. var audioBitRate: PLStreamingAudioBitRate? = nil
    117. /**
    118. * 编码的声道数,默认为 1
    119. */
    120. var encodedNumberOfChannels: Int? = nil
    121. /**
    122. * 编码模式,默认为 PLAACEncoderType_iOS_AAC
    123. */
    124. var audioEncoderType: PLAACEncoderType? = nil
    125. /**
    126. * 输入的音频流描述,默认为单路音频 @[kPLAudioChannelDefault]
    127. * 目前提供两路音频流混音功能,对于ReplayKit录屏推流,若要实现 App Audio 与 Mic Audio 的混音,需设置该属性为 @[kPLAudioChannelApp, kPLAudioChannelMic]
    128. */
    129. var inputAudioChannelDescriptions: Array<String>? = nil
    130. /**
    131. * PLVideoFillModeStretch: Stretch to fill the full view, which may distort the image outside of its normal aspect ratio
    132. * PLVideoFillModePreserveAspectRatio: Maintains the aspect ratio of the source image, adding bars of the specified background color
    133. * PLVideoFillModePreserveAspectRatioAndFill: Maintains the aspect ratio of the source image, zooming in on its center to fill the view
    134. */
    135. var fillMode: PLVideoFillModeType? = PLVideoFillModePreserveAspectRatioAndFill
    136. /**
    137. * PLProtocolModel.modelrtmp
    138. * PLProtocolModel.modelsrt
    139. */
    140. var protocolModel: PLProtocolModel? = PLProtocolModel.modelrtmp
    141. /**
    142. * 自适应码率
    143. */
    144. var isDynamicFrameEnable: Bool = false
    145. /**
    146. * 自动重连
    147. */
    148. var isAutoReconnectEnable: Bool = true
    149. /**
    150. * 监听网络切换
    151. */
    152. var isMonitorNetworkStateEnable: Bool = true
    153. /**
    154. * 回调方法的调用间隔
    155. */
    156. var statusUpdateInterval: TimeInterval?
    157. /**
    158. * 流信息更新间隔
    159. */
    160. var threshold: Float?
    161. /**
    162. * 发送队列最大容纳包数量
    163. */
    164. var maxCount: Int?
    165. /**
    166. * 控制系统屏幕自动锁屏是否关闭
    167. */
    168. var isIdleTimerDisable: Bool?
    169. /**
    170. *
    171. */
    172. var isTouchToFocusEnable: Bool?
    173. /**
    174. *
    175. */
    176. var isSmoothAutoFocusEnabled: Bool?
    177. /**
    178. *
    179. */
    180. var isPlayback: Bool?
    181. /**
    182. *
    183. */
    184. var inputGain: Float?
    185. /**
    186. *
    187. */
    188. var allowAudioMixWithOthers: Bool?
    189. /**
    190. * 最小平均码率
    191. */
    192. var minVideoBitRate: Int = 0
    193. /**
    194. * iOS/Android 通用参数
    195. */
    196. var logLevel: Int? = nil
    197. var isLogFileEnabled: Bool = false
    198. var isTorchOn: Bool = false
    199. var publishUrl: String? = nil
    200. var uid: String? = nil
    201. var isQuicEnabled: Bool = false
    202. var isAudioOnly: Bool = false
    203. var isContinuousFocusModeEnabled: Bool = false
    204. var isMuted: Bool = false
    205. /**
    206. * 水印
    207. */
    208. var watermarkAssertName: String? = nil
    209. var watermarkSize: CGSize? = nil
    210. var watermarkPosition: CGPoint = CGPoint(x: 0, y: 0)
    211. /**
    212. * 美颜
    213. */
    214. var isBeautifyModeOn: Bool = false
    215. var faceBeautyLevel: Float = 0.6
    216. var faceBeautyWhiten: Float = 0.6
    217. var faceBeautyRedden: Float = 0.6
    218. /**
    219. * DNS配置
    220. */
    221. var httpDnsServers: Array<String>? = nil
    222. var udpDnsServers: Array<String>? = nil
    223. }
    1. /// AVStreamingView 使用, 可以使用上述Android端和iOS端的参数配置 AVStreamingView
    2. @override
    3. Widget build(BuildContext context) {
    4. return MaterialApp(
    5. home: Scaffold(
    6. appBar: AppBar(
    7. title: const Text('Plugin example app'),
    8. ),
    9. body: Center(
    10. child: AVStreamingView(
    11. androidDisableCertificateValidation: true,
    12. //publishUrl: "rtmp://pili-publish.qhdayang.com/testroom2022/t0511?e=1661928820&token=aFpVTdHoT0N5W7lFZqN4UPVMpbx_x6jvU8IlMRNy:yDX3msI5-F9oNiJHiC_OOYkDea0=",
    13. publishUrl: "rtmp://pili-publish.qnsdk.com/sdk-live/bddef867-46ad-4266-91aa-1b876ae709b9?e=1661615426&token=QxZugR8TAhI38AiJ_cptTl3RbzLyca3t-AAiH-Hh:3eFZtUzMRywt0ZmrtLbbuYAWOfo=",
    14. httpDnsServers: const ["https://223.6.6.6/dns-query", "https://8.8.8.8/dns-query"],
    15. udpDnsServers: const ["223.5.5.5", "114.114.114.114", "1.1.1.1", "208.67.222.222"],
    16. onViewCreated: (controller) {
    17. controller.checkAuthentication();
    18. controller.setPublishUrl(url: "rtmp://pili-publish.qnsdk.com/sdk-live/bddef867-46ad-4266-91aa-1b876ae709b9?e=1661615426&token=QxZugR8TAhI38AiJ_cptTl3RbzLyca3t-AAiH-Hh:3eFZtUzMRywt0ZmrtLbbuYAWOfo=");
    19. controller.startStreaming();
    20. },
    21. ),
    22. ),
    23. ),
    24. );
    25. }

     源码下载:https://download.csdn.net/download/songtao542/86514096

  • 相关阅读:
    WEIXIN day_02(8.17)小程序组件库
    微服务项目:尚融宝(31)(前端搭建:会员列表搭建(2))
    如何实现设备组缓存的正确清除?——基于心跳请求和心跳响应的解决方案
    构建灵活、高效的HTTP/1.1应用:探索h11库
    推荐十个优秀的ASP.NET Core第三方中间件,你用过几个?
    【k8s部署elasticsearch】k8s环境下安装elasticsearch集群和kibana
    新手必知!----哈夫曼树和哈夫曼编码
    golang 通用的 grpc http 基础开发框架
    认识前端包常用包管理工具(npm、cnpm、pnpm、nvm、yarn)
    关于python中正则表达式的一些笔记
  • 原文地址:https://blog.csdn.net/songtao542/article/details/126819210