Compare commits
32 Commits
Author | SHA1 | Date |
---|---|---|
![]() |
1d851afe32 | |
![]() |
74ca73795a | |
![]() |
b383042509 | |
![]() |
56e817669f | |
![]() |
442077e218 | |
![]() |
0d3e7b7572 | |
![]() |
7867c44a27 | |
![]() |
cfba9b6be2 | |
![]() |
c6901ba7a1 | |
![]() |
0994741b7c | |
![]() |
2310c2403c | |
![]() |
876ccf1699 | |
![]() |
f6489f866a | |
![]() |
b5c59a7424 | |
![]() |
dd1899c8e0 | |
![]() |
1b1d613950 | |
![]() |
52ad7d6ad4 | |
![]() |
1cebb9c91c | |
![]() |
591e090925 | |
![]() |
5c09825119 | |
![]() |
5d4787383a | |
![]() |
6cef14c59d | |
![]() |
eef9eb0cb5 | |
![]() |
8675b37473 | |
![]() |
b252405083 | |
![]() |
d72ae256da | |
![]() |
cd57781dd3 | |
![]() |
28da84c16c | |
![]() |
39c03c3e17 | |
![]() |
7b4f896c16 | |
![]() |
efa5c5e980 | |
![]() |
da0abce59d |
|
@ -1 +1 @@
|
||||||
2.7.4
|
3.0.6
|
||||||
|
|
|
@ -21,7 +21,7 @@ final class PlaybackViewController: UIViewController {
|
||||||
override func viewWillAppear(_ animated: Bool) {
|
override func viewWillAppear(_ animated: Bool) {
|
||||||
logger.info("viewWillAppear")
|
logger.info("viewWillAppear")
|
||||||
super.viewWillAppear(animated)
|
super.viewWillAppear(animated)
|
||||||
(view as? NetStreamDrawable)?.attachStream(rtmpStream)
|
(view as? (any NetStreamDrawable))?.attachStream(rtmpStream)
|
||||||
if #available(iOS 15.0, *), let layer = view.layer as? AVSampleBufferDisplayLayer {
|
if #available(iOS 15.0, *), let layer = view.layer as? AVSampleBufferDisplayLayer {
|
||||||
pictureInPictureController = AVPictureInPictureController(contentSource: .init(sampleBufferDisplayLayer: layer, playbackDelegate: self))
|
pictureInPictureController = AVPictureInPictureController(contentSource: .init(sampleBufferDisplayLayer: layer, playbackDelegate: self))
|
||||||
}
|
}
|
||||||
|
|
20
Gemfile.lock
20
Gemfile.lock
|
@ -16,16 +16,16 @@ GEM
|
||||||
artifactory (3.0.15)
|
artifactory (3.0.15)
|
||||||
atomos (0.1.3)
|
atomos (0.1.3)
|
||||||
aws-eventstream (1.2.0)
|
aws-eventstream (1.2.0)
|
||||||
aws-partitions (1.757.0)
|
aws-partitions (1.771.0)
|
||||||
aws-sdk-core (3.171.0)
|
aws-sdk-core (3.173.1)
|
||||||
aws-eventstream (~> 1, >= 1.0.2)
|
aws-eventstream (~> 1, >= 1.0.2)
|
||||||
aws-partitions (~> 1, >= 1.651.0)
|
aws-partitions (~> 1, >= 1.651.0)
|
||||||
aws-sigv4 (~> 1.5)
|
aws-sigv4 (~> 1.5)
|
||||||
jmespath (~> 1, >= 1.6.1)
|
jmespath (~> 1, >= 1.6.1)
|
||||||
aws-sdk-kms (1.63.0)
|
aws-sdk-kms (1.64.0)
|
||||||
aws-sdk-core (~> 3, >= 3.165.0)
|
aws-sdk-core (~> 3, >= 3.165.0)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.1)
|
||||||
aws-sdk-s3 (1.121.0)
|
aws-sdk-s3 (1.122.0)
|
||||||
aws-sdk-core (~> 3, >= 3.165.0)
|
aws-sdk-core (~> 3, >= 3.165.0)
|
||||||
aws-sdk-kms (~> 1)
|
aws-sdk-kms (~> 1)
|
||||||
aws-sigv4 (~> 1.4)
|
aws-sigv4 (~> 1.4)
|
||||||
|
@ -116,8 +116,8 @@ GEM
|
||||||
faraday-retry (1.0.3)
|
faraday-retry (1.0.3)
|
||||||
faraday_middleware (1.2.0)
|
faraday_middleware (1.2.0)
|
||||||
faraday (~> 1.0)
|
faraday (~> 1.0)
|
||||||
fastimage (2.2.6)
|
fastimage (2.2.7)
|
||||||
fastlane (2.212.2)
|
fastlane (2.213.0)
|
||||||
CFPropertyList (>= 2.3, < 4.0.0)
|
CFPropertyList (>= 2.3, < 4.0.0)
|
||||||
addressable (>= 2.8, < 3.0.0)
|
addressable (>= 2.8, < 3.0.0)
|
||||||
artifactory (~> 3.0)
|
artifactory (~> 3.0)
|
||||||
|
@ -141,7 +141,7 @@ GEM
|
||||||
json (< 3.0.0)
|
json (< 3.0.0)
|
||||||
jwt (>= 2.1.0, < 3)
|
jwt (>= 2.1.0, < 3)
|
||||||
mini_magick (>= 4.9.4, < 5.0.0)
|
mini_magick (>= 4.9.4, < 5.0.0)
|
||||||
multipart-post (~> 2.0.0)
|
multipart-post (>= 2.0.0, < 3.0.0)
|
||||||
naturally (~> 2.2)
|
naturally (~> 2.2)
|
||||||
optparse (~> 0.1.1)
|
optparse (~> 0.1.1)
|
||||||
plist (>= 3.1.0, < 4.0.0)
|
plist (>= 3.1.0, < 4.0.0)
|
||||||
|
@ -160,7 +160,7 @@ GEM
|
||||||
fourflusher (2.3.1)
|
fourflusher (2.3.1)
|
||||||
fuzzy_match (2.0.4)
|
fuzzy_match (2.0.4)
|
||||||
gh_inspector (1.1.3)
|
gh_inspector (1.1.3)
|
||||||
google-apis-androidpublisher_v3 (0.40.0)
|
google-apis-androidpublisher_v3 (0.42.0)
|
||||||
google-apis-core (>= 0.11.0, < 2.a)
|
google-apis-core (>= 0.11.0, < 2.a)
|
||||||
google-apis-core (0.11.0)
|
google-apis-core (0.11.0)
|
||||||
addressable (~> 2.5, >= 2.5.1)
|
addressable (~> 2.5, >= 2.5.1)
|
||||||
|
@ -213,7 +213,7 @@ GEM
|
||||||
minitest (5.18.0)
|
minitest (5.18.0)
|
||||||
molinillo (0.8.0)
|
molinillo (0.8.0)
|
||||||
multi_json (1.15.0)
|
multi_json (1.15.0)
|
||||||
multipart-post (2.0.0)
|
multipart-post (2.3.0)
|
||||||
nanaimo (0.3.0)
|
nanaimo (0.3.0)
|
||||||
nap (1.1.0)
|
nap (1.1.0)
|
||||||
naturally (2.2.1)
|
naturally (2.2.1)
|
||||||
|
@ -286,4 +286,4 @@ DEPENDENCIES
|
||||||
synx
|
synx
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
2.1.4
|
2.2.33
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
Pod::Spec.new do |s|
|
Pod::Spec.new do |s|
|
||||||
|
|
||||||
s.name = "HaishinKit"
|
s.name = "HaishinKit"
|
||||||
s.version = "1.5.0"
|
s.version = "1.5.2"
|
||||||
s.summary = "Camera and Microphone streaming library via RTMP, HLS for iOS, macOS and tvOS."
|
s.summary = "Camera and Microphone streaming library via RTMP, HLS for iOS, macOS and tvOS."
|
||||||
s.swift_version = "5.7"
|
s.swift_version = "5.7"
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,6 @@
|
||||||
293B42E92340B4840086F973 /* RTMPObjectEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293B42E82340B4840086F973 /* RTMPObjectEncoding.swift */; };
|
293B42E92340B4840086F973 /* RTMPObjectEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293B42E82340B4840086F973 /* RTMPObjectEncoding.swift */; };
|
||||||
293B42EA2340B4840086F973 /* RTMPObjectEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293B42E82340B4840086F973 /* RTMPObjectEncoding.swift */; };
|
293B42EA2340B4840086F973 /* RTMPObjectEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293B42E82340B4840086F973 /* RTMPObjectEncoding.swift */; };
|
||||||
293B42EB2340B4840086F973 /* RTMPObjectEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293B42E82340B4840086F973 /* RTMPObjectEncoding.swift */; };
|
293B42EB2340B4840086F973 /* RTMPObjectEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293B42E82340B4840086F973 /* RTMPObjectEncoding.swift */; };
|
||||||
2940EF4F2380116500430456 /* RingBufferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2940EF4E2380116500430456 /* RingBufferTests.swift */; };
|
|
||||||
2941746B22D069B300A2944F /* AudioEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2941746A22D069B300A2944F /* AudioEffect.swift */; };
|
2941746B22D069B300A2944F /* AudioEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2941746A22D069B300A2944F /* AudioEffect.swift */; };
|
||||||
2941746C22D069B300A2944F /* AudioEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2941746A22D069B300A2944F /* AudioEffect.swift */; };
|
2941746C22D069B300A2944F /* AudioEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2941746A22D069B300A2944F /* AudioEffect.swift */; };
|
||||||
2941746D22D069B300A2944F /* AudioEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2941746A22D069B300A2944F /* AudioEffect.swift */; };
|
2941746D22D069B300A2944F /* AudioEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2941746A22D069B300A2944F /* AudioEffect.swift */; };
|
||||||
|
@ -55,13 +54,9 @@
|
||||||
2942A4FA21A9418A004E1BEE /* Running.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2942A4F721A9418A004E1BEE /* Running.swift */; };
|
2942A4FA21A9418A004E1BEE /* Running.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2942A4F721A9418A004E1BEE /* Running.swift */; };
|
||||||
2942EF841DFF4D06008E620C /* HaishinKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2945CBBD1B4BE66000104112 /* HaishinKit.framework */; };
|
2942EF841DFF4D06008E620C /* HaishinKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2945CBBD1B4BE66000104112 /* HaishinKit.framework */; };
|
||||||
2942EF861DFF4D3C008E620C /* HaishinKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 2945CBBD1B4BE66000104112 /* HaishinKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
2942EF861DFF4D3C008E620C /* HaishinKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 2945CBBD1B4BE66000104112 /* HaishinKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
294637A41EC8961C008EEC71 /* RTMPReaderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294637A31EC8961C008EEC71 /* RTMPReaderTests.swift */; };
|
|
||||||
294637A81EC89BC9008EEC71 /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294637A71EC89BC9008EEC71 /* Config.swift */; };
|
294637A81EC89BC9008EEC71 /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294637A71EC89BC9008EEC71 /* Config.swift */; };
|
||||||
294637AA1EC8A79F008EEC71 /* SampleVideo_360x240_5mb.flv in Resources */ = {isa = PBXBuildFile; fileRef = 294637A91EC8A79F008EEC71 /* SampleVideo_360x240_5mb.flv */; };
|
294637AA1EC8A79F008EEC71 /* SampleVideo_360x240_5mb.flv in Resources */ = {isa = PBXBuildFile; fileRef = 294637A91EC8A79F008EEC71 /* SampleVideo_360x240_5mb.flv */; };
|
||||||
294852571D852499002DE492 /* RTMPTSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294852551D84BFAD002DE492 /* RTMPTSocket.swift */; };
|
294852571D852499002DE492 /* RTMPTSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294852551D84BFAD002DE492 /* RTMPTSocket.swift */; };
|
||||||
294B2D3223785E3800CE7BDC /* RingBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294B2D3123785E3800CE7BDC /* RingBuffer.swift */; };
|
|
||||||
294B2D3323785E3800CE7BDC /* RingBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294B2D3123785E3800CE7BDC /* RingBuffer.swift */; };
|
|
||||||
294B2D3423785E3800CE7BDC /* RingBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294B2D3123785E3800CE7BDC /* RingBuffer.swift */; };
|
|
||||||
294CC9B422D9BEC000F9DD5C /* DisplayLink-macOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294CC9B322D9BEC000F9DD5C /* DisplayLink-macOS.swift */; };
|
294CC9B422D9BEC000F9DD5C /* DisplayLink-macOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294CC9B322D9BEC000F9DD5C /* DisplayLink-macOS.swift */; };
|
||||||
295018201FFA1BD700358E10 /* AudioCodecTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950181F1FFA1BD700358E10 /* AudioCodecTests.swift */; };
|
295018201FFA1BD700358E10 /* AudioCodecTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2950181F1FFA1BD700358E10 /* AudioCodecTests.swift */; };
|
||||||
295018221FFA1C9D00358E10 /* SinWaveUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295018211FFA1C9D00358E10 /* SinWaveUtil.swift */; };
|
295018221FFA1C9D00358E10 /* SinWaveUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295018211FFA1C9D00358E10 /* SinWaveUtil.swift */; };
|
||||||
|
@ -70,18 +65,12 @@
|
||||||
2955F51F1D09EBAD004CC995 /* VisualEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 296897461CDB01D20074D5F0 /* VisualEffect.swift */; };
|
2955F51F1D09EBAD004CC995 /* VisualEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 296897461CDB01D20074D5F0 /* VisualEffect.swift */; };
|
||||||
29562B881E6BFFE000BB940A /* HaishinKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B8761B1CD701F900FC07DA /* HaishinKit.framework */; };
|
29562B881E6BFFE000BB940A /* HaishinKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B8761B1CD701F900FC07DA /* HaishinKit.framework */; };
|
||||||
29562B891E6BFFE000BB940A /* HaishinKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 29B8761B1CD701F900FC07DA /* HaishinKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
29562B891E6BFFE000BB940A /* HaishinKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 29B8761B1CD701F900FC07DA /* HaishinKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
2958910A1EEB8D1800CE51E1 /* FLVReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891091EEB8D1800CE51E1 /* FLVReader.swift */; };
|
|
||||||
2958910B1EEB8D1800CE51E1 /* FLVReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891091EEB8D1800CE51E1 /* FLVReader.swift */; };
|
|
||||||
2958910C1EEB8D1800CE51E1 /* FLVReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891091EEB8D1800CE51E1 /* FLVReader.swift */; };
|
|
||||||
2958910E1EEB8D3C00CE51E1 /* FLVVideoCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2958910D1EEB8D3C00CE51E1 /* FLVVideoCodec.swift */; };
|
2958910E1EEB8D3C00CE51E1 /* FLVVideoCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2958910D1EEB8D3C00CE51E1 /* FLVVideoCodec.swift */; };
|
||||||
2958910F1EEB8D3C00CE51E1 /* FLVVideoCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2958910D1EEB8D3C00CE51E1 /* FLVVideoCodec.swift */; };
|
2958910F1EEB8D3C00CE51E1 /* FLVVideoCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2958910D1EEB8D3C00CE51E1 /* FLVVideoCodec.swift */; };
|
||||||
295891101EEB8D3C00CE51E1 /* FLVVideoCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2958910D1EEB8D3C00CE51E1 /* FLVVideoCodec.swift */; };
|
295891101EEB8D3C00CE51E1 /* FLVVideoCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2958910D1EEB8D3C00CE51E1 /* FLVVideoCodec.swift */; };
|
||||||
295891121EEB8D7200CE51E1 /* FLVFrameType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891111EEB8D7200CE51E1 /* FLVFrameType.swift */; };
|
295891121EEB8D7200CE51E1 /* FLVFrameType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891111EEB8D7200CE51E1 /* FLVFrameType.swift */; };
|
||||||
295891131EEB8D7200CE51E1 /* FLVFrameType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891111EEB8D7200CE51E1 /* FLVFrameType.swift */; };
|
295891131EEB8D7200CE51E1 /* FLVFrameType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891111EEB8D7200CE51E1 /* FLVFrameType.swift */; };
|
||||||
295891141EEB8D7200CE51E1 /* FLVFrameType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891111EEB8D7200CE51E1 /* FLVFrameType.swift */; };
|
295891141EEB8D7200CE51E1 /* FLVFrameType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891111EEB8D7200CE51E1 /* FLVFrameType.swift */; };
|
||||||
295891161EEB8DFC00CE51E1 /* FLVTagType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891151EEB8DFC00CE51E1 /* FLVTagType.swift */; };
|
|
||||||
295891171EEB8DFC00CE51E1 /* FLVTagType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891151EEB8DFC00CE51E1 /* FLVTagType.swift */; };
|
|
||||||
295891181EEB8DFC00CE51E1 /* FLVTagType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891151EEB8DFC00CE51E1 /* FLVTagType.swift */; };
|
|
||||||
2958911A1EEB8E3F00CE51E1 /* FLVAudioCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891191EEB8E3F00CE51E1 /* FLVAudioCodec.swift */; };
|
2958911A1EEB8E3F00CE51E1 /* FLVAudioCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891191EEB8E3F00CE51E1 /* FLVAudioCodec.swift */; };
|
||||||
2958911B1EEB8E3F00CE51E1 /* FLVAudioCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891191EEB8E3F00CE51E1 /* FLVAudioCodec.swift */; };
|
2958911B1EEB8E3F00CE51E1 /* FLVAudioCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891191EEB8E3F00CE51E1 /* FLVAudioCodec.swift */; };
|
||||||
2958911C1EEB8E3F00CE51E1 /* FLVAudioCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891191EEB8E3F00CE51E1 /* FLVAudioCodec.swift */; };
|
2958911C1EEB8E3F00CE51E1 /* FLVAudioCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295891191EEB8E3F00CE51E1 /* FLVAudioCodec.swift */; };
|
||||||
|
@ -133,7 +122,7 @@
|
||||||
29B876791CD70ACE00FC07DA /* HTTPStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876721CD70ACE00FC07DA /* HTTPStream.swift */; };
|
29B876791CD70ACE00FC07DA /* HTTPStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876721CD70ACE00FC07DA /* HTTPStream.swift */; };
|
||||||
29B8767A1CD70ACE00FC07DA /* M3U.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876731CD70ACE00FC07DA /* M3U.swift */; };
|
29B8767A1CD70ACE00FC07DA /* M3U.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876731CD70ACE00FC07DA /* M3U.swift */; };
|
||||||
29B876831CD70AE800FC07DA /* AudioSpecificConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767D1CD70AE800FC07DA /* AudioSpecificConfig.swift */; };
|
29B876831CD70AE800FC07DA /* AudioSpecificConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767D1CD70AE800FC07DA /* AudioSpecificConfig.swift */; };
|
||||||
29B876841CD70AE800FC07DA /* AVCConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767E1CD70AE800FC07DA /* AVCConfigurationRecord.swift */; };
|
29B876841CD70AE800FC07DA /* AVCDecoderConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767E1CD70AE800FC07DA /* AVCDecoderConfigurationRecord.swift */; };
|
||||||
29B876861CD70AE800FC07DA /* PacketizedElementaryStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876801CD70AE800FC07DA /* PacketizedElementaryStream.swift */; };
|
29B876861CD70AE800FC07DA /* PacketizedElementaryStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876801CD70AE800FC07DA /* PacketizedElementaryStream.swift */; };
|
||||||
29B876871CD70AE800FC07DA /* TSProgram.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876811CD70AE800FC07DA /* TSProgram.swift */; };
|
29B876871CD70AE800FC07DA /* TSProgram.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876811CD70AE800FC07DA /* TSProgram.swift */; };
|
||||||
29B876881CD70AE800FC07DA /* TSPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876821CD70AE800FC07DA /* TSPacket.swift */; };
|
29B876881CD70AE800FC07DA /* TSPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876821CD70AE800FC07DA /* TSPacket.swift */; };
|
||||||
|
@ -168,7 +157,7 @@
|
||||||
29B876F91CD70D5900FC07DA /* HTTPStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876721CD70ACE00FC07DA /* HTTPStream.swift */; };
|
29B876F91CD70D5900FC07DA /* HTTPStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876721CD70ACE00FC07DA /* HTTPStream.swift */; };
|
||||||
29B876FA1CD70D5900FC07DA /* M3U.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876731CD70ACE00FC07DA /* M3U.swift */; };
|
29B876FA1CD70D5900FC07DA /* M3U.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876731CD70ACE00FC07DA /* M3U.swift */; };
|
||||||
29B876FD1CD70D5A00FC07DA /* AudioSpecificConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767D1CD70AE800FC07DA /* AudioSpecificConfig.swift */; };
|
29B876FD1CD70D5A00FC07DA /* AudioSpecificConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767D1CD70AE800FC07DA /* AudioSpecificConfig.swift */; };
|
||||||
29B876FE1CD70D5A00FC07DA /* AVCConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767E1CD70AE800FC07DA /* AVCConfigurationRecord.swift */; };
|
29B876FE1CD70D5A00FC07DA /* AVCDecoderConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767E1CD70AE800FC07DA /* AVCDecoderConfigurationRecord.swift */; };
|
||||||
29B877001CD70D5A00FC07DA /* PacketizedElementaryStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876801CD70AE800FC07DA /* PacketizedElementaryStream.swift */; };
|
29B877001CD70D5A00FC07DA /* PacketizedElementaryStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876801CD70AE800FC07DA /* PacketizedElementaryStream.swift */; };
|
||||||
29B877011CD70D5A00FC07DA /* TSProgram.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876811CD70AE800FC07DA /* TSProgram.swift */; };
|
29B877011CD70D5A00FC07DA /* TSProgram.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876811CD70AE800FC07DA /* TSProgram.swift */; };
|
||||||
29B877021CD70D5A00FC07DA /* TSPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876821CD70AE800FC07DA /* TSPacket.swift */; };
|
29B877021CD70D5A00FC07DA /* TSPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876821CD70AE800FC07DA /* TSPacket.swift */; };
|
||||||
|
@ -251,7 +240,7 @@
|
||||||
29EB3E011ED05856001CAE8B /* HTTPStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876721CD70ACE00FC07DA /* HTTPStream.swift */; };
|
29EB3E011ED05856001CAE8B /* HTTPStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876721CD70ACE00FC07DA /* HTTPStream.swift */; };
|
||||||
29EB3E021ED05858001CAE8B /* M3U.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876731CD70ACE00FC07DA /* M3U.swift */; };
|
29EB3E021ED05858001CAE8B /* M3U.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876731CD70ACE00FC07DA /* M3U.swift */; };
|
||||||
29EB3E031ED0585D001CAE8B /* AudioSpecificConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767D1CD70AE800FC07DA /* AudioSpecificConfig.swift */; };
|
29EB3E031ED0585D001CAE8B /* AudioSpecificConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767D1CD70AE800FC07DA /* AudioSpecificConfig.swift */; };
|
||||||
29EB3E041ED05860001CAE8B /* AVCConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767E1CD70AE800FC07DA /* AVCConfigurationRecord.swift */; };
|
29EB3E041ED05860001CAE8B /* AVCDecoderConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8767E1CD70AE800FC07DA /* AVCDecoderConfigurationRecord.swift */; };
|
||||||
29EB3E081ED05869001CAE8B /* PacketizedElementaryStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876801CD70AE800FC07DA /* PacketizedElementaryStream.swift */; };
|
29EB3E081ED05869001CAE8B /* PacketizedElementaryStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876801CD70AE800FC07DA /* PacketizedElementaryStream.swift */; };
|
||||||
29EB3E091ED0586B001CAE8B /* TSProgram.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876811CD70AE800FC07DA /* TSProgram.swift */; };
|
29EB3E091ED0586B001CAE8B /* TSProgram.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876811CD70AE800FC07DA /* TSProgram.swift */; };
|
||||||
29EB3E0A1ED0586F001CAE8B /* TSPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876821CD70AE800FC07DA /* TSPacket.swift */; };
|
29EB3E0A1ED0586F001CAE8B /* TSPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876821CD70AE800FC07DA /* TSPacket.swift */; };
|
||||||
|
@ -319,6 +308,23 @@
|
||||||
BC1DC4A429F4F74F00E928ED /* AVCaptureSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC4A329F4F74F00E928ED /* AVCaptureSession+Extension.swift */; };
|
BC1DC4A429F4F74F00E928ED /* AVCaptureSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC4A329F4F74F00E928ED /* AVCaptureSession+Extension.swift */; };
|
||||||
BC1DC4A529F4F74F00E928ED /* AVCaptureSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC4A329F4F74F00E928ED /* AVCaptureSession+Extension.swift */; };
|
BC1DC4A529F4F74F00E928ED /* AVCaptureSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC4A329F4F74F00E928ED /* AVCaptureSession+Extension.swift */; };
|
||||||
BC1DC4A629F4F74F00E928ED /* AVCaptureSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC4A329F4F74F00E928ED /* AVCaptureSession+Extension.swift */; };
|
BC1DC4A629F4F74F00E928ED /* AVCaptureSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC4A329F4F74F00E928ED /* AVCaptureSession+Extension.swift */; };
|
||||||
|
BC1DC4FB2A02868900E928ED /* FLVVideoFourCC.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC4FA2A02868900E928ED /* FLVVideoFourCC.swift */; };
|
||||||
|
BC1DC4FC2A02868900E928ED /* FLVVideoFourCC.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC4FA2A02868900E928ED /* FLVVideoFourCC.swift */; };
|
||||||
|
BC1DC4FD2A02868900E928ED /* FLVVideoFourCC.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC4FA2A02868900E928ED /* FLVVideoFourCC.swift */; };
|
||||||
|
BC1DC5042A02894D00E928ED /* FLVVideoFourCCTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5032A02894D00E928ED /* FLVVideoFourCCTests.swift */; };
|
||||||
|
BC1DC5062A02963600E928ED /* FLVTagType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5052A02963600E928ED /* FLVTagType.swift */; };
|
||||||
|
BC1DC5072A02963600E928ED /* FLVTagType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5052A02963600E928ED /* FLVTagType.swift */; };
|
||||||
|
BC1DC5082A02963600E928ED /* FLVTagType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5052A02963600E928ED /* FLVTagType.swift */; };
|
||||||
|
BC1DC50A2A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5092A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift */; };
|
||||||
|
BC1DC50B2A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5092A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift */; };
|
||||||
|
BC1DC50C2A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5092A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift */; };
|
||||||
|
BC1DC50E2A039E1900E928ED /* FLVVideoPacketType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC50D2A039E1900E928ED /* FLVVideoPacketType.swift */; };
|
||||||
|
BC1DC50F2A039E1900E928ED /* FLVVideoPacketType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC50D2A039E1900E928ED /* FLVVideoPacketType.swift */; };
|
||||||
|
BC1DC5102A039E1900E928ED /* FLVVideoPacketType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC50D2A039E1900E928ED /* FLVVideoPacketType.swift */; };
|
||||||
|
BC1DC5122A04E46E00E928ED /* HEVCDecoderConfigurationRecordTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5112A04E46E00E928ED /* HEVCDecoderConfigurationRecordTests.swift */; };
|
||||||
|
BC1DC5142A05428800E928ED /* HEVCNALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5132A05428800E928ED /* HEVCNALUnit.swift */; };
|
||||||
|
BC1DC5152A05428800E928ED /* HEVCNALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5132A05428800E928ED /* HEVCNALUnit.swift */; };
|
||||||
|
BC1DC5162A05428800E928ED /* HEVCNALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1DC5132A05428800E928ED /* HEVCNALUnit.swift */; };
|
||||||
BC20DF38250377A3007BC608 /* IOUIScreenCaptureUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 299B131C1D35272D00A1E8F5 /* IOUIScreenCaptureUnit.swift */; };
|
BC20DF38250377A3007BC608 /* IOUIScreenCaptureUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 299B131C1D35272D00A1E8F5 /* IOUIScreenCaptureUnit.swift */; };
|
||||||
BC3004CE296B0A1700119932 /* Shape.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC3004CD296B0A1700119932 /* Shape.swift */; };
|
BC3004CE296B0A1700119932 /* Shape.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC3004CD296B0A1700119932 /* Shape.swift */; };
|
||||||
BC3004CF296B0A1700119932 /* Shape.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC3004CD296B0A1700119932 /* Shape.swift */; };
|
BC3004CF296B0A1700119932 /* Shape.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC3004CD296B0A1700119932 /* Shape.swift */; };
|
||||||
|
@ -409,6 +415,10 @@
|
||||||
BC83A4732403D83B006BDE06 /* VTCompressionSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC83A4722403D83B006BDE06 /* VTCompressionSession+Extension.swift */; };
|
BC83A4732403D83B006BDE06 /* VTCompressionSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC83A4722403D83B006BDE06 /* VTCompressionSession+Extension.swift */; };
|
||||||
BC83A4742403D83B006BDE06 /* VTCompressionSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC83A4722403D83B006BDE06 /* VTCompressionSession+Extension.swift */; };
|
BC83A4742403D83B006BDE06 /* VTCompressionSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC83A4722403D83B006BDE06 /* VTCompressionSession+Extension.swift */; };
|
||||||
BC83A4752403D83B006BDE06 /* VTCompressionSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC83A4722403D83B006BDE06 /* VTCompressionSession+Extension.swift */; };
|
BC83A4752403D83B006BDE06 /* VTCompressionSession+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC83A4722403D83B006BDE06 /* VTCompressionSession+Extension.swift */; };
|
||||||
|
BC8446052A30BE1600609FFD /* CMAudioSampleBufferUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC8446042A30BE1600609FFD /* CMAudioSampleBufferUtil.swift */; };
|
||||||
|
BC8446062A30BE1600609FFD /* CMAudioSampleBufferUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC8446042A30BE1600609FFD /* CMAudioSampleBufferUtil.swift */; };
|
||||||
|
BC8446072A30BE1600609FFD /* CMAudioSampleBufferUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC8446042A30BE1600609FFD /* CMAudioSampleBufferUtil.swift */; };
|
||||||
|
BC8446092A30BFC800609FFD /* CMAudioSampleBufferUtilTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC8446082A30BFC800609FFD /* CMAudioSampleBufferUtilTests.swift */; };
|
||||||
BC959EEF296EE4190067BA97 /* ImageTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC959EEE296EE4190067BA97 /* ImageTransform.swift */; };
|
BC959EEF296EE4190067BA97 /* ImageTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC959EEE296EE4190067BA97 /* ImageTransform.swift */; };
|
||||||
BC959EF0296EE4190067BA97 /* ImageTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC959EEE296EE4190067BA97 /* ImageTransform.swift */; };
|
BC959EF0296EE4190067BA97 /* ImageTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC959EEE296EE4190067BA97 /* ImageTransform.swift */; };
|
||||||
BC959EF1296EE4190067BA97 /* ImageTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC959EEE296EE4190067BA97 /* ImageTransform.swift */; };
|
BC959EF1296EE4190067BA97 /* ImageTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC959EEE296EE4190067BA97 /* ImageTransform.swift */; };
|
||||||
|
@ -437,9 +447,9 @@
|
||||||
BCC1A72D264FAC1800661156 /* ESSpecificData.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCC1A72A264FAC1800661156 /* ESSpecificData.swift */; };
|
BCC1A72D264FAC1800661156 /* ESSpecificData.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCC1A72A264FAC1800661156 /* ESSpecificData.swift */; };
|
||||||
BCC9E9092636FF7400948774 /* DataBufferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCC9E9082636FF7400948774 /* DataBufferTests.swift */; };
|
BCC9E9092636FF7400948774 /* DataBufferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCC9E9082636FF7400948774 /* DataBufferTests.swift */; };
|
||||||
BCCBCE9529A7C9C90095B51C /* AVCFormatStreamTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9429A7C9C90095B51C /* AVCFormatStreamTests.swift */; };
|
BCCBCE9529A7C9C90095B51C /* AVCFormatStreamTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9429A7C9C90095B51C /* AVCFormatStreamTests.swift */; };
|
||||||
BCCBCE9729A90D880095B51C /* NALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9629A90D880095B51C /* NALUnit.swift */; };
|
BCCBCE9729A90D880095B51C /* AVCNALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9629A90D880095B51C /* AVCNALUnit.swift */; };
|
||||||
BCCBCE9829A90D880095B51C /* NALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9629A90D880095B51C /* NALUnit.swift */; };
|
BCCBCE9829A90D880095B51C /* AVCNALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9629A90D880095B51C /* AVCNALUnit.swift */; };
|
||||||
BCCBCE9929A90D880095B51C /* NALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9629A90D880095B51C /* NALUnit.swift */; };
|
BCCBCE9929A90D880095B51C /* AVCNALUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9629A90D880095B51C /* AVCNALUnit.swift */; };
|
||||||
BCCBCE9B29A9D96A0095B51C /* NALUnitReaderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9A29A9D96A0095B51C /* NALUnitReaderTests.swift */; };
|
BCCBCE9B29A9D96A0095B51C /* NALUnitReaderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9A29A9D96A0095B51C /* NALUnitReaderTests.swift */; };
|
||||||
BCCBCEA029ADF55A0095B51C /* AudioCodecBufferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9F29ADF55A0095B51C /* AudioCodecBufferTests.swift */; };
|
BCCBCEA029ADF55A0095B51C /* AudioCodecBufferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCCBCE9F29ADF55A0095B51C /* AudioCodecBufferTests.swift */; };
|
||||||
BCD1DC3A260627C300A1C593 /* Logboard.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC34DFD125EBB12C005F975A /* Logboard.xcframework */; };
|
BCD1DC3A260627C300A1C593 /* Logboard.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC34DFD125EBB12C005F975A /* Logboard.xcframework */; };
|
||||||
|
@ -601,24 +611,19 @@
|
||||||
2927A2991E7ED2D70044AF91 /* LICENSE.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = LICENSE.md; sourceTree = "<group>"; };
|
2927A2991E7ED2D70044AF91 /* LICENSE.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = LICENSE.md; sourceTree = "<group>"; };
|
||||||
2930D03F1E12D17C00DA2DC5 /* SampleHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SampleHandler.swift; sourceTree = "<group>"; };
|
2930D03F1E12D17C00DA2DC5 /* SampleHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SampleHandler.swift; sourceTree = "<group>"; };
|
||||||
293B42E82340B4840086F973 /* RTMPObjectEncoding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RTMPObjectEncoding.swift; sourceTree = "<group>"; };
|
293B42E82340B4840086F973 /* RTMPObjectEncoding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RTMPObjectEncoding.swift; sourceTree = "<group>"; };
|
||||||
2940EF4E2380116500430456 /* RingBufferTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RingBufferTests.swift; sourceTree = "<group>"; };
|
|
||||||
2941746A22D069B300A2944F /* AudioEffect.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioEffect.swift; sourceTree = "<group>"; };
|
2941746A22D069B300A2944F /* AudioEffect.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioEffect.swift; sourceTree = "<group>"; };
|
||||||
2942424C1CF4C01300D65DCB /* MD5.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MD5.swift; sourceTree = "<group>"; };
|
2942424C1CF4C01300D65DCB /* MD5.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MD5.swift; sourceTree = "<group>"; };
|
||||||
2942A4F721A9418A004E1BEE /* Running.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Running.swift; sourceTree = "<group>"; };
|
2942A4F721A9418A004E1BEE /* Running.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Running.swift; sourceTree = "<group>"; };
|
||||||
2945CBBD1B4BE66000104112 /* HaishinKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HaishinKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
2945CBBD1B4BE66000104112 /* HaishinKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HaishinKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
294637A31EC8961C008EEC71 /* RTMPReaderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RTMPReaderTests.swift; sourceTree = "<group>"; };
|
|
||||||
294637A71EC89BC9008EEC71 /* Config.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = "<group>"; };
|
294637A71EC89BC9008EEC71 /* Config.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = "<group>"; };
|
||||||
294637A91EC8A79F008EEC71 /* SampleVideo_360x240_5mb.flv */ = {isa = PBXFileReference; lastKnownFileType = file; path = SampleVideo_360x240_5mb.flv; sourceTree = "<group>"; };
|
294637A91EC8A79F008EEC71 /* SampleVideo_360x240_5mb.flv */ = {isa = PBXFileReference; lastKnownFileType = file; path = SampleVideo_360x240_5mb.flv; sourceTree = "<group>"; };
|
||||||
294852551D84BFAD002DE492 /* RTMPTSocket.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RTMPTSocket.swift; sourceTree = "<group>"; };
|
294852551D84BFAD002DE492 /* RTMPTSocket.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RTMPTSocket.swift; sourceTree = "<group>"; };
|
||||||
294B2D3123785E3800CE7BDC /* RingBuffer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RingBuffer.swift; sourceTree = "<group>"; };
|
|
||||||
294CC9B322D9BEC000F9DD5C /* DisplayLink-macOS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DisplayLink-macOS.swift"; sourceTree = "<group>"; };
|
294CC9B322D9BEC000F9DD5C /* DisplayLink-macOS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DisplayLink-macOS.swift"; sourceTree = "<group>"; };
|
||||||
2950181F1FFA1BD700358E10 /* AudioCodecTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioCodecTests.swift; sourceTree = "<group>"; };
|
2950181F1FFA1BD700358E10 /* AudioCodecTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioCodecTests.swift; sourceTree = "<group>"; };
|
||||||
295018211FFA1C9D00358E10 /* SinWaveUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SinWaveUtil.swift; sourceTree = "<group>"; };
|
295018211FFA1C9D00358E10 /* SinWaveUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SinWaveUtil.swift; sourceTree = "<group>"; };
|
||||||
2950742E1E4620B7007F15A4 /* PreferenceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferenceViewController.swift; sourceTree = "<group>"; };
|
2950742E1E4620B7007F15A4 /* PreferenceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferenceViewController.swift; sourceTree = "<group>"; };
|
||||||
295891091EEB8D1800CE51E1 /* FLVReader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVReader.swift; sourceTree = "<group>"; };
|
|
||||||
2958910D1EEB8D3C00CE51E1 /* FLVVideoCodec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVVideoCodec.swift; sourceTree = "<group>"; };
|
2958910D1EEB8D3C00CE51E1 /* FLVVideoCodec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVVideoCodec.swift; sourceTree = "<group>"; };
|
||||||
295891111EEB8D7200CE51E1 /* FLVFrameType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVFrameType.swift; sourceTree = "<group>"; };
|
295891111EEB8D7200CE51E1 /* FLVFrameType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVFrameType.swift; sourceTree = "<group>"; };
|
||||||
295891151EEB8DFC00CE51E1 /* FLVTagType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVTagType.swift; sourceTree = "<group>"; };
|
|
||||||
295891191EEB8E3F00CE51E1 /* FLVAudioCodec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVAudioCodec.swift; sourceTree = "<group>"; };
|
295891191EEB8E3F00CE51E1 /* FLVAudioCodec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVAudioCodec.swift; sourceTree = "<group>"; };
|
||||||
2958911D1EEB8E9600CE51E1 /* FLVSoundRate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVSoundRate.swift; sourceTree = "<group>"; };
|
2958911D1EEB8E9600CE51E1 /* FLVSoundRate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVSoundRate.swift; sourceTree = "<group>"; };
|
||||||
295891211EEB8EC500CE51E1 /* FLVAVCPacketType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVAVCPacketType.swift; sourceTree = "<group>"; };
|
295891211EEB8EC500CE51E1 /* FLVAVCPacketType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVAVCPacketType.swift; sourceTree = "<group>"; };
|
||||||
|
@ -667,7 +672,7 @@
|
||||||
29B876721CD70ACE00FC07DA /* HTTPStream.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPStream.swift; sourceTree = "<group>"; };
|
29B876721CD70ACE00FC07DA /* HTTPStream.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPStream.swift; sourceTree = "<group>"; };
|
||||||
29B876731CD70ACE00FC07DA /* M3U.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = M3U.swift; sourceTree = "<group>"; };
|
29B876731CD70ACE00FC07DA /* M3U.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = M3U.swift; sourceTree = "<group>"; };
|
||||||
29B8767D1CD70AE800FC07DA /* AudioSpecificConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioSpecificConfig.swift; sourceTree = "<group>"; };
|
29B8767D1CD70AE800FC07DA /* AudioSpecificConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioSpecificConfig.swift; sourceTree = "<group>"; };
|
||||||
29B8767E1CD70AE800FC07DA /* AVCConfigurationRecord.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AVCConfigurationRecord.swift; sourceTree = "<group>"; };
|
29B8767E1CD70AE800FC07DA /* AVCDecoderConfigurationRecord.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AVCDecoderConfigurationRecord.swift; sourceTree = "<group>"; };
|
||||||
29B876801CD70AE800FC07DA /* PacketizedElementaryStream.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PacketizedElementaryStream.swift; sourceTree = "<group>"; };
|
29B876801CD70AE800FC07DA /* PacketizedElementaryStream.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PacketizedElementaryStream.swift; sourceTree = "<group>"; };
|
||||||
29B876811CD70AE800FC07DA /* TSProgram.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TSProgram.swift; sourceTree = "<group>"; };
|
29B876811CD70AE800FC07DA /* TSProgram.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TSProgram.swift; sourceTree = "<group>"; };
|
||||||
29B876821CD70AE800FC07DA /* TSPacket.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TSPacket.swift; sourceTree = "<group>"; };
|
29B876821CD70AE800FC07DA /* TSPacket.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TSPacket.swift; sourceTree = "<group>"; };
|
||||||
|
@ -735,6 +740,13 @@
|
||||||
BC110252292DD6E900D48035 /* vImage_Buffer+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "vImage_Buffer+Extension.swift"; sourceTree = "<group>"; };
|
BC110252292DD6E900D48035 /* vImage_Buffer+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "vImage_Buffer+Extension.swift"; sourceTree = "<group>"; };
|
||||||
BC110256292E661E00D48035 /* MultiCamCaptureSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultiCamCaptureSettings.swift; sourceTree = "<group>"; };
|
BC110256292E661E00D48035 /* MultiCamCaptureSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultiCamCaptureSettings.swift; sourceTree = "<group>"; };
|
||||||
BC1DC4A329F4F74F00E928ED /* AVCaptureSession+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AVCaptureSession+Extension.swift"; sourceTree = "<group>"; };
|
BC1DC4A329F4F74F00E928ED /* AVCaptureSession+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AVCaptureSession+Extension.swift"; sourceTree = "<group>"; };
|
||||||
|
BC1DC4FA2A02868900E928ED /* FLVVideoFourCC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLVVideoFourCC.swift; sourceTree = "<group>"; };
|
||||||
|
BC1DC5032A02894D00E928ED /* FLVVideoFourCCTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLVVideoFourCCTests.swift; sourceTree = "<group>"; };
|
||||||
|
BC1DC5052A02963600E928ED /* FLVTagType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FLVTagType.swift; sourceTree = "<group>"; };
|
||||||
|
BC1DC5092A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HEVCDecoderConfigurationRecord.swift; sourceTree = "<group>"; };
|
||||||
|
BC1DC50D2A039E1900E928ED /* FLVVideoPacketType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLVVideoPacketType.swift; sourceTree = "<group>"; };
|
||||||
|
BC1DC5112A04E46E00E928ED /* HEVCDecoderConfigurationRecordTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HEVCDecoderConfigurationRecordTests.swift; sourceTree = "<group>"; };
|
||||||
|
BC1DC5132A05428800E928ED /* HEVCNALUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HEVCNALUnit.swift; sourceTree = "<group>"; };
|
||||||
BC3004CD296B0A1700119932 /* Shape.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shape.swift; sourceTree = "<group>"; };
|
BC3004CD296B0A1700119932 /* Shape.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shape.swift; sourceTree = "<group>"; };
|
||||||
BC3004D3296BFFF600119932 /* MainSplitViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainSplitViewController.swift; sourceTree = "<group>"; };
|
BC3004D3296BFFF600119932 /* MainSplitViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainSplitViewController.swift; sourceTree = "<group>"; };
|
||||||
BC3004F0296C0C7400119932 /* MenuViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuViewController.swift; sourceTree = "<group>"; };
|
BC3004F0296C0C7400119932 /* MenuViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuViewController.swift; sourceTree = "<group>"; };
|
||||||
|
@ -769,6 +781,8 @@
|
||||||
BC7C56CC29A786AE00C41A9B /* ADTS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ADTS.swift; sourceTree = "<group>"; };
|
BC7C56CC29A786AE00C41A9B /* ADTS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ADTS.swift; sourceTree = "<group>"; };
|
||||||
BC7C56D029A78D4F00C41A9B /* ADTSHeaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ADTSHeaderTests.swift; sourceTree = "<group>"; };
|
BC7C56D029A78D4F00C41A9B /* ADTSHeaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ADTSHeaderTests.swift; sourceTree = "<group>"; };
|
||||||
BC83A4722403D83B006BDE06 /* VTCompressionSession+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "VTCompressionSession+Extension.swift"; sourceTree = "<group>"; };
|
BC83A4722403D83B006BDE06 /* VTCompressionSession+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "VTCompressionSession+Extension.swift"; sourceTree = "<group>"; };
|
||||||
|
BC8446042A30BE1600609FFD /* CMAudioSampleBufferUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CMAudioSampleBufferUtil.swift; sourceTree = "<group>"; };
|
||||||
|
BC8446082A30BFC800609FFD /* CMAudioSampleBufferUtilTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CMAudioSampleBufferUtilTests.swift; sourceTree = "<group>"; };
|
||||||
BC959EEE296EE4190067BA97 /* ImageTransform.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageTransform.swift; sourceTree = "<group>"; };
|
BC959EEE296EE4190067BA97 /* ImageTransform.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageTransform.swift; sourceTree = "<group>"; };
|
||||||
BC959F0D29705B1B0067BA97 /* SCStreamPublishViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SCStreamPublishViewController.swift; sourceTree = "<group>"; };
|
BC959F0D29705B1B0067BA97 /* SCStreamPublishViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SCStreamPublishViewController.swift; sourceTree = "<group>"; };
|
||||||
BC959F1129717EDB0067BA97 /* PreferenceViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferenceViewController.swift; sourceTree = "<group>"; };
|
BC959F1129717EDB0067BA97 /* PreferenceViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferenceViewController.swift; sourceTree = "<group>"; };
|
||||||
|
@ -783,7 +797,7 @@
|
||||||
BCC1A72A264FAC1800661156 /* ESSpecificData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ESSpecificData.swift; sourceTree = "<group>"; };
|
BCC1A72A264FAC1800661156 /* ESSpecificData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ESSpecificData.swift; sourceTree = "<group>"; };
|
||||||
BCC9E9082636FF7400948774 /* DataBufferTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataBufferTests.swift; sourceTree = "<group>"; };
|
BCC9E9082636FF7400948774 /* DataBufferTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataBufferTests.swift; sourceTree = "<group>"; };
|
||||||
BCCBCE9429A7C9C90095B51C /* AVCFormatStreamTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AVCFormatStreamTests.swift; sourceTree = "<group>"; };
|
BCCBCE9429A7C9C90095B51C /* AVCFormatStreamTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AVCFormatStreamTests.swift; sourceTree = "<group>"; };
|
||||||
BCCBCE9629A90D880095B51C /* NALUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NALUnit.swift; sourceTree = "<group>"; };
|
BCCBCE9629A90D880095B51C /* AVCNALUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AVCNALUnit.swift; sourceTree = "<group>"; };
|
||||||
BCCBCE9A29A9D96A0095B51C /* NALUnitReaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NALUnitReaderTests.swift; sourceTree = "<group>"; };
|
BCCBCE9A29A9D96A0095B51C /* NALUnitReaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NALUnitReaderTests.swift; sourceTree = "<group>"; };
|
||||||
BCCBCE9F29ADF55A0095B51C /* AudioCodecBufferTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioCodecBufferTests.swift; sourceTree = "<group>"; };
|
BCCBCE9F29ADF55A0095B51C /* AudioCodecBufferTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioCodecBufferTests.swift; sourceTree = "<group>"; };
|
||||||
BCD63AB226FDF1250084842D /* Example iOS+SwiftUI.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Example iOS+SwiftUI.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
BCD63AB226FDF1250084842D /* Example iOS+SwiftUI.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Example iOS+SwiftUI.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
@ -910,13 +924,13 @@
|
||||||
298BCF321DD4C44A007FF86A /* AnyUtil.swift */,
|
298BCF321DD4C44A007FF86A /* AnyUtil.swift */,
|
||||||
29DC17B221D0CC0600E26CED /* Atomic.swift */,
|
29DC17B221D0CC0600E26CED /* Atomic.swift */,
|
||||||
29B876B81CD70B3900FC07DA /* ByteArray.swift */,
|
29B876B81CD70B3900FC07DA /* ByteArray.swift */,
|
||||||
|
BC8446042A30BE1600609FFD /* CMAudioSampleBufferUtil.swift */,
|
||||||
29B876631CD70AB300FC07DA /* Constants.swift */,
|
29B876631CD70AB300FC07DA /* Constants.swift */,
|
||||||
BC0D236C26331BAB001DDA0C /* DataBuffer.swift */,
|
BC0D236C26331BAB001DDA0C /* DataBuffer.swift */,
|
||||||
29B876671CD70AB300FC07DA /* DataConvertible.swift */,
|
29B876671CD70AB300FC07DA /* DataConvertible.swift */,
|
||||||
2976A4851D4903C300B53EF2 /* DeviceUtil.swift */,
|
2976A4851D4903C300B53EF2 /* DeviceUtil.swift */,
|
||||||
BC32E88729C9971100051507 /* InstanceHolder.swift */,
|
BC32E88729C9971100051507 /* InstanceHolder.swift */,
|
||||||
2942424C1CF4C01300D65DCB /* MD5.swift */,
|
2942424C1CF4C01300D65DCB /* MD5.swift */,
|
||||||
294B2D3123785E3800CE7BDC /* RingBuffer.swift */,
|
|
||||||
2942A4F721A9418A004E1BEE /* Running.swift */,
|
2942A4F721A9418A004E1BEE /* Running.swift */,
|
||||||
);
|
);
|
||||||
path = Util;
|
path = Util;
|
||||||
|
@ -930,7 +944,6 @@
|
||||||
290EA89E1DFB61B100053022 /* RTMPChunkTests.swift */,
|
290EA89E1DFB61B100053022 /* RTMPChunkTests.swift */,
|
||||||
290686021DFDB7A6008EB7ED /* RTMPConnectionTests.swift */,
|
290686021DFDB7A6008EB7ED /* RTMPConnectionTests.swift */,
|
||||||
2976077E20A89FBB00DCF24F /* RTMPMessageTests.swift */,
|
2976077E20A89FBB00DCF24F /* RTMPMessageTests.swift */,
|
||||||
294637A31EC8961C008EEC71 /* RTMPReaderTests.swift */,
|
|
||||||
035AFA032263868E009DD0BB /* RTMPStreamTests.swift */,
|
035AFA032263868E009DD0BB /* RTMPStreamTests.swift */,
|
||||||
);
|
);
|
||||||
path = RTMP;
|
path = RTMP;
|
||||||
|
@ -944,6 +957,7 @@
|
||||||
2917CB652104CA2800F6823A /* AudioSpecificConfigTests.swift */,
|
2917CB652104CA2800F6823A /* AudioSpecificConfigTests.swift */,
|
||||||
BCCBCE9429A7C9C90095B51C /* AVCFormatStreamTests.swift */,
|
BCCBCE9429A7C9C90095B51C /* AVCFormatStreamTests.swift */,
|
||||||
BC7C56C629A7701F00C41A9B /* ESSpecificDataTests.swift */,
|
BC7C56C629A7701F00C41A9B /* ESSpecificDataTests.swift */,
|
||||||
|
BC1DC5112A04E46E00E928ED /* HEVCDecoderConfigurationRecordTests.swift */,
|
||||||
BCCBCE9A29A9D96A0095B51C /* NALUnitReaderTests.swift */,
|
BCCBCE9A29A9D96A0095B51C /* NALUnitReaderTests.swift */,
|
||||||
290EA8951DFB619600053022 /* PacketizedElementaryStreamTests.swift */,
|
290EA8951DFB619600053022 /* PacketizedElementaryStreamTests.swift */,
|
||||||
290EA8971DFB619600053022 /* TSPacketTests.swift */,
|
290EA8971DFB619600053022 /* TSPacketTests.swift */,
|
||||||
|
@ -957,11 +971,11 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
290EA8A41DFB61E700053022 /* ByteArrayTests.swift */,
|
290EA8A41DFB61E700053022 /* ByteArrayTests.swift */,
|
||||||
|
BC8446082A30BFC800609FFD /* CMAudioSampleBufferUtilTests.swift */,
|
||||||
290EA8A51DFB61E700053022 /* CRC32Tests.swift */,
|
290EA8A51DFB61E700053022 /* CRC32Tests.swift */,
|
||||||
BCC9E9082636FF7400948774 /* DataBufferTests.swift */,
|
BCC9E9082636FF7400948774 /* DataBufferTests.swift */,
|
||||||
290EA8A61DFB61E700053022 /* EventDispatcherTests.swift */,
|
290EA8A61DFB61E700053022 /* EventDispatcherTests.swift */,
|
||||||
290EA8A71DFB61E700053022 /* MD5Tests.swift */,
|
290EA8A71DFB61E700053022 /* MD5Tests.swift */,
|
||||||
2940EF4E2380116500430456 /* RingBufferTests.swift */,
|
|
||||||
);
|
);
|
||||||
path = Util;
|
path = Util;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -1065,12 +1079,13 @@
|
||||||
295891191EEB8E3F00CE51E1 /* FLVAudioCodec.swift */,
|
295891191EEB8E3F00CE51E1 /* FLVAudioCodec.swift */,
|
||||||
295891211EEB8EC500CE51E1 /* FLVAVCPacketType.swift */,
|
295891211EEB8EC500CE51E1 /* FLVAVCPacketType.swift */,
|
||||||
295891111EEB8D7200CE51E1 /* FLVFrameType.swift */,
|
295891111EEB8D7200CE51E1 /* FLVFrameType.swift */,
|
||||||
295891091EEB8D1800CE51E1 /* FLVReader.swift */,
|
|
||||||
2958911D1EEB8E9600CE51E1 /* FLVSoundRate.swift */,
|
2958911D1EEB8E9600CE51E1 /* FLVSoundRate.swift */,
|
||||||
295891291EEB8F1D00CE51E1 /* FLVSoundSize.swift */,
|
295891291EEB8F1D00CE51E1 /* FLVSoundSize.swift */,
|
||||||
2958912D1EEB8F4100CE51E1 /* FLVSoundType.swift */,
|
2958912D1EEB8F4100CE51E1 /* FLVSoundType.swift */,
|
||||||
295891151EEB8DFC00CE51E1 /* FLVTagType.swift */,
|
BC1DC5052A02963600E928ED /* FLVTagType.swift */,
|
||||||
2958910D1EEB8D3C00CE51E1 /* FLVVideoCodec.swift */,
|
2958910D1EEB8D3C00CE51E1 /* FLVVideoCodec.swift */,
|
||||||
|
BC1DC4FA2A02868900E928ED /* FLVVideoFourCC.swift */,
|
||||||
|
BC1DC50D2A039E1900E928ED /* FLVVideoPacketType.swift */,
|
||||||
);
|
);
|
||||||
path = FLV;
|
path = FLV;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -1157,6 +1172,7 @@
|
||||||
295018191FFA196800358E10 /* Codec */,
|
295018191FFA196800358E10 /* Codec */,
|
||||||
294637A71EC89BC9008EEC71 /* Config.swift */,
|
294637A71EC89BC9008EEC71 /* Config.swift */,
|
||||||
291C2AD21CE9FF48006F042B /* Core */,
|
291C2AD21CE9FF48006F042B /* Core */,
|
||||||
|
BC1DC5022A02893600E928ED /* FLV */,
|
||||||
291C2AD31CE9FF68006F042B /* HTTP */,
|
291C2AD31CE9FF68006F042B /* HTTP */,
|
||||||
29798E5D1CE60E5300F5CBD0 /* Info.plist */,
|
29798E5D1CE60E5300F5CBD0 /* Info.plist */,
|
||||||
BC0BF4F329866FB700D72CB4 /* Media */,
|
BC0BF4F329866FB700D72CB4 /* Media */,
|
||||||
|
@ -1343,6 +1359,14 @@
|
||||||
path = Media;
|
path = Media;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
BC1DC5022A02893600E928ED /* FLV */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
BC1DC5032A02894D00E928ED /* FLVVideoFourCCTests.swift */,
|
||||||
|
);
|
||||||
|
path = FLV;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
BC3004FA296C3FC400119932 /* Extension */ = {
|
BC3004FA296C3FC400119932 /* Extension */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -1358,11 +1382,13 @@
|
||||||
children = (
|
children = (
|
||||||
BC7C56CC29A786AE00C41A9B /* ADTS.swift */,
|
BC7C56CC29A786AE00C41A9B /* ADTS.swift */,
|
||||||
29B8767D1CD70AE800FC07DA /* AudioSpecificConfig.swift */,
|
29B8767D1CD70AE800FC07DA /* AudioSpecificConfig.swift */,
|
||||||
29B8767E1CD70AE800FC07DA /* AVCConfigurationRecord.swift */,
|
29B8767E1CD70AE800FC07DA /* AVCDecoderConfigurationRecord.swift */,
|
||||||
BCB9773E2621812800C9A649 /* AVCFormatStream.swift */,
|
BCB9773E2621812800C9A649 /* AVCFormatStream.swift */,
|
||||||
|
BCCBCE9629A90D880095B51C /* AVCNALUnit.swift */,
|
||||||
29B876B91CD70B3900FC07DA /* CRC32.swift */,
|
29B876B91CD70B3900FC07DA /* CRC32.swift */,
|
||||||
BCC1A72A264FAC1800661156 /* ESSpecificData.swift */,
|
BCC1A72A264FAC1800661156 /* ESSpecificData.swift */,
|
||||||
BCCBCE9629A90D880095B51C /* NALUnit.swift */,
|
BC1DC5092A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift */,
|
||||||
|
BC1DC5132A05428800E928ED /* HEVCNALUnit.swift */,
|
||||||
29B876801CD70AE800FC07DA /* PacketizedElementaryStream.swift */,
|
29B876801CD70AE800FC07DA /* PacketizedElementaryStream.swift */,
|
||||||
BCB976DE26107B5600C9A649 /* TSField.swift */,
|
BCB976DE26107B5600C9A649 /* TSField.swift */,
|
||||||
29B876821CD70AE800FC07DA /* TSPacket.swift */,
|
29B876821CD70AE800FC07DA /* TSPacket.swift */,
|
||||||
|
@ -1866,7 +1892,6 @@
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
295891161EEB8DFC00CE51E1 /* FLVTagType.swift in Sources */,
|
|
||||||
BC4914AE28DDF445009E2DF6 /* VTDecompressionSession+Extension.swift in Sources */,
|
BC4914AE28DDF445009E2DF6 /* VTDecompressionSession+Extension.swift in Sources */,
|
||||||
29B876B11CD70B2800FC07DA /* RTMPMessage.swift in Sources */,
|
29B876B11CD70B2800FC07DA /* RTMPMessage.swift in Sources */,
|
||||||
2941746B22D069B300A2944F /* AudioEffect.swift in Sources */,
|
2941746B22D069B300A2944F /* AudioEffect.swift in Sources */,
|
||||||
|
@ -1875,7 +1900,6 @@
|
||||||
BC4914A228DDD33D009E2DF6 /* VTSessionConvertible.swift in Sources */,
|
BC4914A228DDD33D009E2DF6 /* VTSessionConvertible.swift in Sources */,
|
||||||
2915EC4D1D85BB8C00621092 /* RTMPTSocket.swift in Sources */,
|
2915EC4D1D85BB8C00621092 /* RTMPTSocket.swift in Sources */,
|
||||||
BC11023E2917C35B00D48035 /* CVPixelBufferPool+Extension.swift in Sources */,
|
BC11023E2917C35B00D48035 /* CVPixelBufferPool+Extension.swift in Sources */,
|
||||||
2958910A1EEB8D1800CE51E1 /* FLVReader.swift in Sources */,
|
|
||||||
29C2631C1D0083B50098D4EF /* IOVideoUnit.swift in Sources */,
|
29C2631C1D0083B50098D4EF /* IOVideoUnit.swift in Sources */,
|
||||||
29B876B41CD70B2800FC07DA /* RTMPSharedObject.swift in Sources */,
|
29B876B41CD70B2800FC07DA /* RTMPSharedObject.swift in Sources */,
|
||||||
2901A4EE1D437170002BBD23 /* MediaLink.swift in Sources */,
|
2901A4EE1D437170002BBD23 /* MediaLink.swift in Sources */,
|
||||||
|
@ -1889,17 +1913,19 @@
|
||||||
29B8765D1CD70A7900FC07DA /* VideoCodec.swift in Sources */,
|
29B8765D1CD70A7900FC07DA /* VideoCodec.swift in Sources */,
|
||||||
2999C3752071138F00892E55 /* MTHKView.swift in Sources */,
|
2999C3752071138F00892E55 /* MTHKView.swift in Sources */,
|
||||||
29AF3FCF1D7C744C00E41212 /* NetStream.swift in Sources */,
|
29AF3FCF1D7C744C00E41212 /* NetStream.swift in Sources */,
|
||||||
294B2D3223785E3800CE7BDC /* RingBuffer.swift in Sources */,
|
|
||||||
2958910E1EEB8D3C00CE51E1 /* FLVVideoCodec.swift in Sources */,
|
2958910E1EEB8D3C00CE51E1 /* FLVVideoCodec.swift in Sources */,
|
||||||
|
BC1DC5142A05428800E928ED /* HEVCNALUnit.swift in Sources */,
|
||||||
BC6FC9222961B3D800A746EE /* vImage_CGImageFormat+Extension.swift in Sources */,
|
BC6FC9222961B3D800A746EE /* vImage_CGImageFormat+Extension.swift in Sources */,
|
||||||
299B13271D3B751400A1E8F5 /* HKView.swift in Sources */,
|
299B13271D3B751400A1E8F5 /* HKView.swift in Sources */,
|
||||||
BC44A1A923D31E92002D4297 /* AudioCodecRingBuffer.swift in Sources */,
|
BC44A1A923D31E92002D4297 /* AudioCodecRingBuffer.swift in Sources */,
|
||||||
BC20DF38250377A3007BC608 /* IOUIScreenCaptureUnit.swift in Sources */,
|
BC20DF38250377A3007BC608 /* IOUIScreenCaptureUnit.swift in Sources */,
|
||||||
29B876AF1CD70B2800FC07DA /* RTMPChunk.swift in Sources */,
|
29B876AF1CD70B2800FC07DA /* RTMPChunk.swift in Sources */,
|
||||||
29B876841CD70AE800FC07DA /* AVCConfigurationRecord.swift in Sources */,
|
BC8446052A30BE1600609FFD /* CMAudioSampleBufferUtil.swift in Sources */,
|
||||||
|
29B876841CD70AE800FC07DA /* AVCDecoderConfigurationRecord.swift in Sources */,
|
||||||
296242621D8DB86500C451A3 /* TSWriter.swift in Sources */,
|
296242621D8DB86500C451A3 /* TSWriter.swift in Sources */,
|
||||||
BC9CFA9323BDE8B700917EEF /* NetStreamDrawable.swift in Sources */,
|
BC9CFA9323BDE8B700917EEF /* NetStreamDrawable.swift in Sources */,
|
||||||
29B8769B1CD70B1100FC07DA /* MIME.swift in Sources */,
|
29B8769B1CD70B1100FC07DA /* MIME.swift in Sources */,
|
||||||
|
BC1DC50E2A039E1900E928ED /* FLVVideoPacketType.swift in Sources */,
|
||||||
29B8769C1CD70B1100FC07DA /* NetClient.swift in Sources */,
|
29B8769C1CD70B1100FC07DA /* NetClient.swift in Sources */,
|
||||||
29B876871CD70AE800FC07DA /* TSProgram.swift in Sources */,
|
29B876871CD70AE800FC07DA /* TSProgram.swift in Sources */,
|
||||||
BC4C9EAF23F2E736004A14F2 /* AudioStreamBasicDescription+Extension.swift in Sources */,
|
BC4C9EAF23F2E736004A14F2 /* AudioStreamBasicDescription+Extension.swift in Sources */,
|
||||||
|
@ -1914,6 +1940,7 @@
|
||||||
BC3004CE296B0A1700119932 /* Shape.swift in Sources */,
|
BC3004CE296B0A1700119932 /* Shape.swift in Sources */,
|
||||||
BC34FA0B286CB90A00EFAF27 /* PiPHKView.swift in Sources */,
|
BC34FA0B286CB90A00EFAF27 /* PiPHKView.swift in Sources */,
|
||||||
293B42E92340B4840086F973 /* RTMPObjectEncoding.swift in Sources */,
|
293B42E92340B4840086F973 /* RTMPObjectEncoding.swift in Sources */,
|
||||||
|
BC1DC4FB2A02868900E928ED /* FLVVideoFourCC.swift in Sources */,
|
||||||
2976A47E1D48C5C700B53EF2 /* IORecorder.swift in Sources */,
|
2976A47E1D48C5C700B53EF2 /* IORecorder.swift in Sources */,
|
||||||
BC110257292E661E00D48035 /* MultiCamCaptureSettings.swift in Sources */,
|
BC110257292E661E00D48035 /* MultiCamCaptureSettings.swift in Sources */,
|
||||||
29B876B21CD70B2800FC07DA /* RTMPMuxer.swift in Sources */,
|
29B876B21CD70B2800FC07DA /* RTMPMuxer.swift in Sources */,
|
||||||
|
@ -1924,7 +1951,7 @@
|
||||||
2958912A1EEB8F1D00CE51E1 /* FLVSoundSize.swift in Sources */,
|
2958912A1EEB8F1D00CE51E1 /* FLVSoundSize.swift in Sources */,
|
||||||
29EA87DC1E79A0460043A5F8 /* Data+Extension.swift in Sources */,
|
29EA87DC1E79A0460043A5F8 /* Data+Extension.swift in Sources */,
|
||||||
29DF20622312A3DD004057C3 /* RTMPNWSocket.swift in Sources */,
|
29DF20622312A3DD004057C3 /* RTMPNWSocket.swift in Sources */,
|
||||||
BCCBCE9729A90D880095B51C /* NALUnit.swift in Sources */,
|
BCCBCE9729A90D880095B51C /* AVCNALUnit.swift in Sources */,
|
||||||
29B876BD1CD70B3900FC07DA /* CRC32.swift in Sources */,
|
29B876BD1CD70B3900FC07DA /* CRC32.swift in Sources */,
|
||||||
BCA2252C293CC5B600DD7CB2 /* IOScreenCaptureUnit.swift in Sources */,
|
BCA2252C293CC5B600DD7CB2 /* IOScreenCaptureUnit.swift in Sources */,
|
||||||
BC4914A628DDD367009E2DF6 /* VTSessionOption.swift in Sources */,
|
BC4914A628DDD367009E2DF6 /* VTSessionOption.swift in Sources */,
|
||||||
|
@ -1949,6 +1976,7 @@
|
||||||
29B876831CD70AE800FC07DA /* AudioSpecificConfig.swift in Sources */,
|
29B876831CD70AE800FC07DA /* AudioSpecificConfig.swift in Sources */,
|
||||||
295891121EEB8D7200CE51E1 /* FLVFrameType.swift in Sources */,
|
295891121EEB8D7200CE51E1 /* FLVFrameType.swift in Sources */,
|
||||||
29B876961CD70AFE00FC07DA /* VideoEffect.swift in Sources */,
|
29B876961CD70AFE00FC07DA /* VideoEffect.swift in Sources */,
|
||||||
|
BC1DC5062A02963600E928ED /* FLVTagType.swift in Sources */,
|
||||||
29B876691CD70AB300FC07DA /* Constants.swift in Sources */,
|
29B876691CD70AB300FC07DA /* Constants.swift in Sources */,
|
||||||
29B8766D1CD70AB300FC07DA /* DataConvertible.swift in Sources */,
|
29B8766D1CD70AB300FC07DA /* DataConvertible.swift in Sources */,
|
||||||
29B876781CD70ACE00FC07DA /* HTTPService.swift in Sources */,
|
29B876781CD70ACE00FC07DA /* HTTPService.swift in Sources */,
|
||||||
|
@ -1964,6 +1992,7 @@
|
||||||
BC4914B628DEC2FE009E2DF6 /* VTSessionMode.swift in Sources */,
|
BC4914B628DEC2FE009E2DF6 /* VTSessionMode.swift in Sources */,
|
||||||
295891261EEB8EF300CE51E1 /* FLVAACPacket.swift in Sources */,
|
295891261EEB8EF300CE51E1 /* FLVAACPacket.swift in Sources */,
|
||||||
29B876791CD70ACE00FC07DA /* HTTPStream.swift in Sources */,
|
29B876791CD70ACE00FC07DA /* HTTPStream.swift in Sources */,
|
||||||
|
BC1DC50A2A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift in Sources */,
|
||||||
BC6FC91E29609A6800A746EE /* ShapeFactory.swift in Sources */,
|
BC6FC91E29609A6800A746EE /* ShapeFactory.swift in Sources */,
|
||||||
BC32E88829C9971100051507 /* InstanceHolder.swift in Sources */,
|
BC32E88829C9971100051507 /* InstanceHolder.swift in Sources */,
|
||||||
BC7C56B7299E579F00C41A9B /* AudioCodecSettings.swift in Sources */,
|
BC7C56B7299E579F00C41A9B /* AudioCodecSettings.swift in Sources */,
|
||||||
|
@ -1987,7 +2016,6 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
290EA89B1DFB619600053022 /* TSPacketTests.swift in Sources */,
|
290EA89B1DFB619600053022 /* TSPacketTests.swift in Sources */,
|
||||||
294637A41EC8961C008EEC71 /* RTMPReaderTests.swift in Sources */,
|
|
||||||
BCCBCE9529A7C9C90095B51C /* AVCFormatStreamTests.swift in Sources */,
|
BCCBCE9529A7C9C90095B51C /* AVCFormatStreamTests.swift in Sources */,
|
||||||
290EA8A91DFB61E700053022 /* ByteArrayTests.swift in Sources */,
|
290EA8A91DFB61E700053022 /* ByteArrayTests.swift in Sources */,
|
||||||
295018221FFA1C9D00358E10 /* SinWaveUtil.swift in Sources */,
|
295018221FFA1C9D00358E10 /* SinWaveUtil.swift in Sources */,
|
||||||
|
@ -1998,6 +2026,7 @@
|
||||||
295018201FFA1BD700358E10 /* AudioCodecTests.swift in Sources */,
|
295018201FFA1BD700358E10 /* AudioCodecTests.swift in Sources */,
|
||||||
290EA8AC1DFB61E700053022 /* MD5Tests.swift in Sources */,
|
290EA8AC1DFB61E700053022 /* MD5Tests.swift in Sources */,
|
||||||
290EA8A01DFB61B100053022 /* AMFFoundationTests.swift in Sources */,
|
290EA8A01DFB61B100053022 /* AMFFoundationTests.swift in Sources */,
|
||||||
|
BC8446092A30BFC800609FFD /* CMAudioSampleBufferUtilTests.swift in Sources */,
|
||||||
BC7C56892995082700C41A9B /* NetStreamTests.swift in Sources */,
|
BC7C56892995082700C41A9B /* NetStreamTests.swift in Sources */,
|
||||||
2917CB662104CA2800F6823A /* AudioSpecificConfigTests.swift in Sources */,
|
2917CB662104CA2800F6823A /* AudioSpecificConfigTests.swift in Sources */,
|
||||||
290EA8AB1DFB61E700053022 /* EventDispatcherTests.swift in Sources */,
|
290EA8AB1DFB61E700053022 /* EventDispatcherTests.swift in Sources */,
|
||||||
|
@ -2008,7 +2037,9 @@
|
||||||
290EA89A1DFB619600053022 /* TSProgramTests.swift in Sources */,
|
290EA89A1DFB619600053022 /* TSProgramTests.swift in Sources */,
|
||||||
BCCBCEA029ADF55A0095B51C /* AudioCodecBufferTests.swift in Sources */,
|
BCCBCEA029ADF55A0095B51C /* AudioCodecBufferTests.swift in Sources */,
|
||||||
BC0BF4F72986CE8700D72CB4 /* VideoCodecTests.swift in Sources */,
|
BC0BF4F72986CE8700D72CB4 /* VideoCodecTests.swift in Sources */,
|
||||||
|
BC1DC5042A02894D00E928ED /* FLVVideoFourCCTests.swift in Sources */,
|
||||||
290EA8931DFB617800053022 /* HTTPRequestTests.swift in Sources */,
|
290EA8931DFB617800053022 /* HTTPRequestTests.swift in Sources */,
|
||||||
|
BC1DC5122A04E46E00E928ED /* HEVCDecoderConfigurationRecordTests.swift in Sources */,
|
||||||
2976077F20A89FBB00DCF24F /* RTMPMessageTests.swift in Sources */,
|
2976077F20A89FBB00DCF24F /* RTMPMessageTests.swift in Sources */,
|
||||||
BC7C56C729A7701F00C41A9B /* ESSpecificDataTests.swift in Sources */,
|
BC7C56C729A7701F00C41A9B /* ESSpecificDataTests.swift in Sources */,
|
||||||
BCCBCE9B29A9D96A0095B51C /* NALUnitReaderTests.swift in Sources */,
|
BCCBCE9B29A9D96A0095B51C /* NALUnitReaderTests.swift in Sources */,
|
||||||
|
@ -2018,7 +2049,6 @@
|
||||||
035AFA042263868E009DD0BB /* RTMPStreamTests.swift in Sources */,
|
035AFA042263868E009DD0BB /* RTMPStreamTests.swift in Sources */,
|
||||||
290686031DFDB7A7008EB7ED /* RTMPConnectionTests.swift in Sources */,
|
290686031DFDB7A7008EB7ED /* RTMPConnectionTests.swift in Sources */,
|
||||||
BCC9E9092636FF7400948774 /* DataBufferTests.swift in Sources */,
|
BCC9E9092636FF7400948774 /* DataBufferTests.swift in Sources */,
|
||||||
2940EF4F2380116500430456 /* RingBufferTests.swift in Sources */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -2034,7 +2064,6 @@
|
||||||
29B876F01CD70D5900FC07DA /* Constants.swift in Sources */,
|
29B876F01CD70D5900FC07DA /* Constants.swift in Sources */,
|
||||||
29EA87D91E79A0090043A5F8 /* URL+Extension.swift in Sources */,
|
29EA87D91E79A0090043A5F8 /* URL+Extension.swift in Sources */,
|
||||||
292AC17C1CF4C871004F5730 /* MD5.swift in Sources */,
|
292AC17C1CF4C871004F5730 /* MD5.swift in Sources */,
|
||||||
2958910B1EEB8D1800CE51E1 /* FLVReader.swift in Sources */,
|
|
||||||
29B876F41CD70D5900FC07DA /* DataConvertible.swift in Sources */,
|
29B876F41CD70D5900FC07DA /* DataConvertible.swift in Sources */,
|
||||||
2916196D1E7F0777009FB344 /* CMFormatDescription+Extension.swift in Sources */,
|
2916196D1E7F0777009FB344 /* CMFormatDescription+Extension.swift in Sources */,
|
||||||
29DF20632312A3DD004057C3 /* RTMPNWSocket.swift in Sources */,
|
29DF20632312A3DD004057C3 /* RTMPNWSocket.swift in Sources */,
|
||||||
|
@ -2051,6 +2080,7 @@
|
||||||
296543631D62FE9000734698 /* HKView-macOS.swift in Sources */,
|
296543631D62FE9000734698 /* HKView-macOS.swift in Sources */,
|
||||||
BC11024B2925147300D48035 /* IOCaptureUnit.swift in Sources */,
|
BC11024B2925147300D48035 /* IOCaptureUnit.swift in Sources */,
|
||||||
29B876FA1CD70D5900FC07DA /* M3U.swift in Sources */,
|
29B876FA1CD70D5900FC07DA /* M3U.swift in Sources */,
|
||||||
|
BC1DC4FC2A02868900E928ED /* FLVVideoFourCC.swift in Sources */,
|
||||||
29B876FD1CD70D5A00FC07DA /* AudioSpecificConfig.swift in Sources */,
|
29B876FD1CD70D5A00FC07DA /* AudioSpecificConfig.swift in Sources */,
|
||||||
BC32E88929C9971100051507 /* InstanceHolder.swift in Sources */,
|
BC32E88929C9971100051507 /* InstanceHolder.swift in Sources */,
|
||||||
BC7C56C0299FC38D00C41A9B /* VideoSize.swift in Sources */,
|
BC7C56C0299FC38D00C41A9B /* VideoSize.swift in Sources */,
|
||||||
|
@ -2058,11 +2088,11 @@
|
||||||
2941746C22D069B300A2944F /* AudioEffect.swift in Sources */,
|
2941746C22D069B300A2944F /* AudioEffect.swift in Sources */,
|
||||||
BC9CFA9423BDE8B700917EEF /* NetStreamDrawable.swift in Sources */,
|
BC9CFA9423BDE8B700917EEF /* NetStreamDrawable.swift in Sources */,
|
||||||
296242631D8DBA8C00C451A3 /* TSReader.swift in Sources */,
|
296242631D8DBA8C00C451A3 /* TSReader.swift in Sources */,
|
||||||
29B876FE1CD70D5A00FC07DA /* AVCConfigurationRecord.swift in Sources */,
|
29B876FE1CD70D5A00FC07DA /* AVCDecoderConfigurationRecord.swift in Sources */,
|
||||||
295891171EEB8DFC00CE51E1 /* FLVTagType.swift in Sources */,
|
|
||||||
294852571D852499002DE492 /* RTMPTSocket.swift in Sources */,
|
294852571D852499002DE492 /* RTMPTSocket.swift in Sources */,
|
||||||
BC83A4742403D83B006BDE06 /* VTCompressionSession+Extension.swift in Sources */,
|
BC83A4742403D83B006BDE06 /* VTCompressionSession+Extension.swift in Sources */,
|
||||||
BCC1A72C264FAC1800661156 /* ESSpecificData.swift in Sources */,
|
BCC1A72C264FAC1800661156 /* ESSpecificData.swift in Sources */,
|
||||||
|
BC1DC50B2A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift in Sources */,
|
||||||
BC1DC4A529F4F74F00E928ED /* AVCaptureSession+Extension.swift in Sources */,
|
BC1DC4A529F4F74F00E928ED /* AVCaptureSession+Extension.swift in Sources */,
|
||||||
BC110258292E661E00D48035 /* MultiCamCaptureSettings.swift in Sources */,
|
BC110258292E661E00D48035 /* MultiCamCaptureSettings.swift in Sources */,
|
||||||
29B877001CD70D5A00FC07DA /* PacketizedElementaryStream.swift in Sources */,
|
29B877001CD70D5A00FC07DA /* PacketizedElementaryStream.swift in Sources */,
|
||||||
|
@ -2080,7 +2110,6 @@
|
||||||
29B877031CD70D5A00FC07DA /* IOAudioUnit.swift in Sources */,
|
29B877031CD70D5A00FC07DA /* IOAudioUnit.swift in Sources */,
|
||||||
BC0D236E26331BAB001DDA0C /* DataBuffer.swift in Sources */,
|
BC0D236E26331BAB001DDA0C /* DataBuffer.swift in Sources */,
|
||||||
29B877051CD70D5A00FC07DA /* IOMixer.swift in Sources */,
|
29B877051CD70D5A00FC07DA /* IOMixer.swift in Sources */,
|
||||||
294B2D3323785E3800CE7BDC /* RingBuffer.swift in Sources */,
|
|
||||||
2976A47F1D48FD6900B53EF2 /* IORecorder.swift in Sources */,
|
2976A47F1D48FD6900B53EF2 /* IORecorder.swift in Sources */,
|
||||||
BC44A1AA23D31E92002D4297 /* AudioCodecRingBuffer.swift in Sources */,
|
BC44A1AA23D31E92002D4297 /* AudioCodecRingBuffer.swift in Sources */,
|
||||||
29B877071CD70D5A00FC07DA /* SoundTransform.swift in Sources */,
|
29B877071CD70D5A00FC07DA /* SoundTransform.swift in Sources */,
|
||||||
|
@ -2092,10 +2121,13 @@
|
||||||
29B8770B1CD70D5A00FC07DA /* NetClient.swift in Sources */,
|
29B8770B1CD70D5A00FC07DA /* NetClient.swift in Sources */,
|
||||||
29EA87EE1E79A3E30043A5F8 /* CVPixelBuffer+Extension.swift in Sources */,
|
29EA87EE1E79A3E30043A5F8 /* CVPixelBuffer+Extension.swift in Sources */,
|
||||||
29B8770C1CD70D5A00FC07DA /* NetService.swift in Sources */,
|
29B8770C1CD70D5A00FC07DA /* NetService.swift in Sources */,
|
||||||
|
BC1DC5152A05428800E928ED /* HEVCNALUnit.swift in Sources */,
|
||||||
|
BC8446062A30BE1600609FFD /* CMAudioSampleBufferUtil.swift in Sources */,
|
||||||
2958911B1EEB8E3F00CE51E1 /* FLVAudioCodec.swift in Sources */,
|
2958911B1EEB8E3F00CE51E1 /* FLVAudioCodec.swift in Sources */,
|
||||||
BC4914A328DDD33D009E2DF6 /* VTSessionConvertible.swift in Sources */,
|
BC4914A328DDD33D009E2DF6 /* VTSessionConvertible.swift in Sources */,
|
||||||
293B42EA2340B4840086F973 /* RTMPObjectEncoding.swift in Sources */,
|
293B42EA2340B4840086F973 /* RTMPObjectEncoding.swift in Sources */,
|
||||||
29DC17B421D0CC0600E26CED /* Atomic.swift in Sources */,
|
29DC17B421D0CC0600E26CED /* Atomic.swift in Sources */,
|
||||||
|
BC1DC50F2A039E1900E928ED /* FLVVideoPacketType.swift in Sources */,
|
||||||
BC959EF0296EE4190067BA97 /* ImageTransform.swift in Sources */,
|
BC959EF0296EE4190067BA97 /* ImageTransform.swift in Sources */,
|
||||||
BC9F9C7926F8C16600B01ED0 /* Choreographer.swift in Sources */,
|
BC9F9C7926F8C16600B01ED0 /* Choreographer.swift in Sources */,
|
||||||
BC558269240BB40E00011AC0 /* RTMPStreamInfo.swift in Sources */,
|
BC558269240BB40E00011AC0 /* RTMPStreamInfo.swift in Sources */,
|
||||||
|
@ -2125,13 +2157,14 @@
|
||||||
BCB976E026107B5600C9A649 /* TSField.swift in Sources */,
|
BCB976E026107B5600C9A649 /* TSField.swift in Sources */,
|
||||||
29B877191CD70D5A00FC07DA /* RTMPStream.swift in Sources */,
|
29B877191CD70D5A00FC07DA /* RTMPStream.swift in Sources */,
|
||||||
29B8771B1CD70D5A00FC07DA /* ByteArray.swift in Sources */,
|
29B8771B1CD70D5A00FC07DA /* ByteArray.swift in Sources */,
|
||||||
BCCBCE9829A90D880095B51C /* NALUnit.swift in Sources */,
|
BCCBCE9829A90D880095B51C /* AVCNALUnit.swift in Sources */,
|
||||||
295891231EEB8EC500CE51E1 /* FLVAVCPacketType.swift in Sources */,
|
295891231EEB8EC500CE51E1 /* FLVAVCPacketType.swift in Sources */,
|
||||||
29EA87DA1E79A00E0043A5F8 /* ExpressibleByIntegerLiteral+Extension.swift in Sources */,
|
29EA87DA1E79A00E0043A5F8 /* ExpressibleByIntegerLiteral+Extension.swift in Sources */,
|
||||||
BC7C56B8299E579F00C41A9B /* AudioCodecSettings.swift in Sources */,
|
BC7C56B8299E579F00C41A9B /* AudioCodecSettings.swift in Sources */,
|
||||||
29D0E3681DD4CE3700863B3B /* AnyUtil.swift in Sources */,
|
29D0E3681DD4CE3700863B3B /* AnyUtil.swift in Sources */,
|
||||||
29B8771C1CD70D5A00FC07DA /* CRC32.swift in Sources */,
|
29B8771C1CD70D5A00FC07DA /* CRC32.swift in Sources */,
|
||||||
2958912B1EEB8F1D00CE51E1 /* FLVSoundSize.swift in Sources */,
|
2958912B1EEB8F1D00CE51E1 /* FLVSoundSize.swift in Sources */,
|
||||||
|
BC1DC5072A02963600E928ED /* FLVTagType.swift in Sources */,
|
||||||
BC4914B328DDFE31009E2DF6 /* VTSessionOptionKey.swift in Sources */,
|
BC4914B328DDFE31009E2DF6 /* VTSessionOptionKey.swift in Sources */,
|
||||||
29B8771D1CD70D5A00FC07DA /* EventDispatcher.swift in Sources */,
|
29B8771D1CD70D5A00FC07DA /* EventDispatcher.swift in Sources */,
|
||||||
BC7C56CE29A786AE00C41A9B /* ADTS.swift in Sources */,
|
BC7C56CE29A786AE00C41A9B /* ADTS.swift in Sources */,
|
||||||
|
@ -2180,7 +2213,6 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
BC55826A240BB40E00011AC0 /* RTMPStreamInfo.swift in Sources */,
|
BC55826A240BB40E00011AC0 /* RTMPStreamInfo.swift in Sources */,
|
||||||
294B2D3423785E3800CE7BDC /* RingBuffer.swift in Sources */,
|
|
||||||
29EB3E1F1ED059F7001CAE8B /* RTMPChunk.swift in Sources */,
|
29EB3E1F1ED059F7001CAE8B /* RTMPChunk.swift in Sources */,
|
||||||
29EB3DFA1ED057A1001CAE8B /* CMVideoFormatDescription+Extension.swift in Sources */,
|
29EB3DFA1ED057A1001CAE8B /* CMVideoFormatDescription+Extension.swift in Sources */,
|
||||||
BC6FC9242961B3D800A746EE /* vImage_CGImageFormat+Extension.swift in Sources */,
|
BC6FC9242961B3D800A746EE /* vImage_CGImageFormat+Extension.swift in Sources */,
|
||||||
|
@ -2191,7 +2223,6 @@
|
||||||
29EB3E321ED05A2C001CAE8B /* ByteArray.swift in Sources */,
|
29EB3E321ED05A2C001CAE8B /* ByteArray.swift in Sources */,
|
||||||
29EB3E191ED05898001CAE8B /* NetSocket.swift in Sources */,
|
29EB3E191ED05898001CAE8B /* NetSocket.swift in Sources */,
|
||||||
29EB3E101ED0587F001CAE8B /* IORecorder.swift in Sources */,
|
29EB3E101ED0587F001CAE8B /* IORecorder.swift in Sources */,
|
||||||
2958910C1EEB8D1800CE51E1 /* FLVReader.swift in Sources */,
|
|
||||||
29EB3E0F1ED0587C001CAE8B /* IOMixer.swift in Sources */,
|
29EB3E0F1ED0587C001CAE8B /* IOMixer.swift in Sources */,
|
||||||
BC34FA0F286CBD6F00EFAF27 /* PiPHKView.swift in Sources */,
|
BC34FA0F286CBD6F00EFAF27 /* PiPHKView.swift in Sources */,
|
||||||
BC7A23F625171C8F0089F77C /* MTHKView.swift in Sources */,
|
BC7A23F625171C8F0089F77C /* MTHKView.swift in Sources */,
|
||||||
|
@ -2202,11 +2233,12 @@
|
||||||
BC7C56B9299E579F00C41A9B /* AudioCodecSettings.swift in Sources */,
|
BC7C56B9299E579F00C41A9B /* AudioCodecSettings.swift in Sources */,
|
||||||
29EB3DF01ED05768001CAE8B /* VideoCodec.swift in Sources */,
|
29EB3DF01ED05768001CAE8B /* VideoCodec.swift in Sources */,
|
||||||
29EB3E351ED05A33001CAE8B /* DeviceUtil.swift in Sources */,
|
29EB3E351ED05A33001CAE8B /* DeviceUtil.swift in Sources */,
|
||||||
BCCBCE9929A90D880095B51C /* NALUnit.swift in Sources */,
|
BCCBCE9929A90D880095B51C /* AVCNALUnit.swift in Sources */,
|
||||||
29DC17B521D0CC0600E26CED /* Atomic.swift in Sources */,
|
29DC17B521D0CC0600E26CED /* Atomic.swift in Sources */,
|
||||||
BC7C56CF29A786AE00C41A9B /* ADTS.swift in Sources */,
|
BC7C56CF29A786AE00C41A9B /* ADTS.swift in Sources */,
|
||||||
BC44A1AB23D31E92002D4297 /* AudioCodecRingBuffer.swift in Sources */,
|
BC44A1AB23D31E92002D4297 /* AudioCodecRingBuffer.swift in Sources */,
|
||||||
29EB3E261ED05A07001CAE8B /* RTMPStream.swift in Sources */,
|
29EB3E261ED05A07001CAE8B /* RTMPStream.swift in Sources */,
|
||||||
|
BC1DC5082A02963600E928ED /* FLVTagType.swift in Sources */,
|
||||||
29DF20642312A3DD004057C3 /* RTMPNWSocket.swift in Sources */,
|
29DF20642312A3DD004057C3 /* RTMPNWSocket.swift in Sources */,
|
||||||
29EB3E131ED05887001CAE8B /* SoundTransform.swift in Sources */,
|
29EB3E131ED05887001CAE8B /* SoundTransform.swift in Sources */,
|
||||||
29EB3DF81ED05799001CAE8B /* Mirror+Extension.swift in Sources */,
|
29EB3DF81ED05799001CAE8B /* Mirror+Extension.swift in Sources */,
|
||||||
|
@ -2215,6 +2247,7 @@
|
||||||
BC83A4752403D83B006BDE06 /* VTCompressionSession+Extension.swift in Sources */,
|
BC83A4752403D83B006BDE06 /* VTCompressionSession+Extension.swift in Sources */,
|
||||||
BC9CFA9523BDE8B700917EEF /* NetStreamDrawable.swift in Sources */,
|
BC9CFA9523BDE8B700917EEF /* NetStreamDrawable.swift in Sources */,
|
||||||
29EB3E031ED0585D001CAE8B /* AudioSpecificConfig.swift in Sources */,
|
29EB3E031ED0585D001CAE8B /* AudioSpecificConfig.swift in Sources */,
|
||||||
|
BC8446072A30BE1600609FFD /* CMAudioSampleBufferUtil.swift in Sources */,
|
||||||
29EB3E141ED05889001CAE8B /* IOVideoUnit.swift in Sources */,
|
29EB3E141ED05889001CAE8B /* IOVideoUnit.swift in Sources */,
|
||||||
29EB3E221ED059FD001CAE8B /* RTMPMessage.swift in Sources */,
|
29EB3E221ED059FD001CAE8B /* RTMPMessage.swift in Sources */,
|
||||||
29EB3E001ED05854001CAE8B /* HTTPService.swift in Sources */,
|
29EB3E001ED05854001CAE8B /* HTTPService.swift in Sources */,
|
||||||
|
@ -2223,6 +2256,7 @@
|
||||||
29EB3E0D1ED05877001CAE8B /* IOAudioUnit.swift in Sources */,
|
29EB3E0D1ED05877001CAE8B /* IOAudioUnit.swift in Sources */,
|
||||||
2942A4FA21A9418A004E1BEE /* Running.swift in Sources */,
|
2942A4FA21A9418A004E1BEE /* Running.swift in Sources */,
|
||||||
295891101EEB8D3C00CE51E1 /* FLVVideoCodec.swift in Sources */,
|
295891101EEB8D3C00CE51E1 /* FLVVideoCodec.swift in Sources */,
|
||||||
|
BC1DC5102A039E1900E928ED /* FLVVideoPacketType.swift in Sources */,
|
||||||
29EB3DFD1ED05847001CAE8B /* CVPixelBuffer+Extension.swift in Sources */,
|
29EB3DFD1ED05847001CAE8B /* CVPixelBuffer+Extension.swift in Sources */,
|
||||||
BCC1A72D264FAC1800661156 /* ESSpecificData.swift in Sources */,
|
BCC1A72D264FAC1800661156 /* ESSpecificData.swift in Sources */,
|
||||||
BCB976E126107B5600C9A649 /* TSField.swift in Sources */,
|
BCB976E126107B5600C9A649 /* TSField.swift in Sources */,
|
||||||
|
@ -2233,7 +2267,7 @@
|
||||||
BC4914A428DDD33D009E2DF6 /* VTSessionConvertible.swift in Sources */,
|
BC4914A428DDD33D009E2DF6 /* VTSessionConvertible.swift in Sources */,
|
||||||
2941746D22D069B300A2944F /* AudioEffect.swift in Sources */,
|
2941746D22D069B300A2944F /* AudioEffect.swift in Sources */,
|
||||||
29EB3E151ED0588C001CAE8B /* VideoEffect.swift in Sources */,
|
29EB3E151ED0588C001CAE8B /* VideoEffect.swift in Sources */,
|
||||||
29EB3E041ED05860001CAE8B /* AVCConfigurationRecord.swift in Sources */,
|
29EB3E041ED05860001CAE8B /* AVCDecoderConfigurationRecord.swift in Sources */,
|
||||||
29EB3DF71ED05797001CAE8B /* URL+Extension.swift in Sources */,
|
29EB3DF71ED05797001CAE8B /* URL+Extension.swift in Sources */,
|
||||||
29DF20682312A436004057C3 /* RTMPSocketCompatible.swift in Sources */,
|
29DF20682312A436004057C3 /* RTMPSocketCompatible.swift in Sources */,
|
||||||
29EB3E0B1ED05871001CAE8B /* TSReader.swift in Sources */,
|
29EB3E0B1ED05871001CAE8B /* TSReader.swift in Sources */,
|
||||||
|
@ -2246,10 +2280,10 @@
|
||||||
29EB3E1B1ED0589F001CAE8B /* AMF0Serializer.swift in Sources */,
|
29EB3E1B1ED0589F001CAE8B /* AMF0Serializer.swift in Sources */,
|
||||||
BC6FC92029609A6800A746EE /* ShapeFactory.swift in Sources */,
|
BC6FC92029609A6800A746EE /* ShapeFactory.swift in Sources */,
|
||||||
29EB3E0C1ED05874001CAE8B /* TSWriter.swift in Sources */,
|
29EB3E0C1ED05874001CAE8B /* TSWriter.swift in Sources */,
|
||||||
295891181EEB8DFC00CE51E1 /* FLVTagType.swift in Sources */,
|
|
||||||
BC4914B428DDFE31009E2DF6 /* VTSessionOptionKey.swift in Sources */,
|
BC4914B428DDFE31009E2DF6 /* VTSessionOptionKey.swift in Sources */,
|
||||||
29EB3DF91ED0579C001CAE8B /* ExpressibleByIntegerLiteral+Extension.swift in Sources */,
|
29EB3DF91ED0579C001CAE8B /* ExpressibleByIntegerLiteral+Extension.swift in Sources */,
|
||||||
29EB3E201ED059F9001CAE8B /* RTMPConnection.swift in Sources */,
|
29EB3E201ED059F9001CAE8B /* RTMPConnection.swift in Sources */,
|
||||||
|
BC1DC5162A05428800E928ED /* HEVCNALUnit.swift in Sources */,
|
||||||
29EB3E331ED05A2E001CAE8B /* MediaLink.swift in Sources */,
|
29EB3E331ED05A2E001CAE8B /* MediaLink.swift in Sources */,
|
||||||
29EB3E1D1ED058A5001CAE8B /* AMFFoundation.swift in Sources */,
|
29EB3E1D1ED058A5001CAE8B /* AMFFoundation.swift in Sources */,
|
||||||
29EB3E251ED05A04001CAE8B /* RTMPSocket.swift in Sources */,
|
29EB3E251ED05A04001CAE8B /* RTMPSocket.swift in Sources */,
|
||||||
|
@ -2260,6 +2294,7 @@
|
||||||
29EB3E231ED059FF001CAE8B /* RTMPMuxer.swift in Sources */,
|
29EB3E231ED059FF001CAE8B /* RTMPMuxer.swift in Sources */,
|
||||||
29EB3DF11ED0576C001CAE8B /* Constants.swift in Sources */,
|
29EB3DF11ED0576C001CAE8B /* Constants.swift in Sources */,
|
||||||
29EB3E011ED05856001CAE8B /* HTTPStream.swift in Sources */,
|
29EB3E011ED05856001CAE8B /* HTTPStream.swift in Sources */,
|
||||||
|
BC1DC50C2A039B4400E928ED /* HEVCDecoderConfigurationRecord.swift in Sources */,
|
||||||
29EB3E171ED05893001CAE8B /* NetClient.swift in Sources */,
|
29EB3E171ED05893001CAE8B /* NetClient.swift in Sources */,
|
||||||
BC1DC4A629F4F74F00E928ED /* AVCaptureSession+Extension.swift in Sources */,
|
BC1DC4A629F4F74F00E928ED /* AVCaptureSession+Extension.swift in Sources */,
|
||||||
BC0D236F26331BAB001DDA0C /* DataBuffer.swift in Sources */,
|
BC0D236F26331BAB001DDA0C /* DataBuffer.swift in Sources */,
|
||||||
|
@ -2284,6 +2319,7 @@
|
||||||
BC566F7025D2ECC500573C4C /* HLSService.swift in Sources */,
|
BC566F7025D2ECC500573C4C /* HLSService.swift in Sources */,
|
||||||
29EB3E181ED05896001CAE8B /* NetService.swift in Sources */,
|
29EB3E181ED05896001CAE8B /* NetService.swift in Sources */,
|
||||||
295891281EEB8EF300CE51E1 /* FLVAACPacket.swift in Sources */,
|
295891281EEB8EF300CE51E1 /* FLVAACPacket.swift in Sources */,
|
||||||
|
BC1DC4FD2A02868900E928ED /* FLVVideoFourCC.swift in Sources */,
|
||||||
BC4914B828DEC2FE009E2DF6 /* VTSessionMode.swift in Sources */,
|
BC4914B828DEC2FE009E2DF6 /* VTSessionMode.swift in Sources */,
|
||||||
2958911C1EEB8E3F00CE51E1 /* FLVAudioCodec.swift in Sources */,
|
2958911C1EEB8E3F00CE51E1 /* FLVAudioCodec.swift in Sources */,
|
||||||
29EB3DF61ED0577C001CAE8B /* CMSampleBuffer+Extension.swift in Sources */,
|
29EB3DF61ED0577C001CAE8B /* CMSampleBuffer+Extension.swift in Sources */,
|
||||||
|
@ -2577,9 +2613,9 @@
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.5.0;
|
MARKETING_VERSION = 1.5.2;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
"OTHER_SWIFT_FLAGS[arch=*]" = "-Xfrontend -debug-time-function-bodies";
|
"OTHER_SWIFT_FLAGS[arch=*]" = "";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
||||||
PRODUCT_NAME = HaishinKit;
|
PRODUCT_NAME = HaishinKit;
|
||||||
PROVISIONING_PROFILE = "";
|
PROVISIONING_PROFILE = "";
|
||||||
|
@ -2611,7 +2647,7 @@
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.5.0;
|
MARKETING_VERSION = 1.5.2;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
||||||
PRODUCT_NAME = HaishinKit;
|
PRODUCT_NAME = HaishinKit;
|
||||||
PROVISIONING_PROFILE = "";
|
PROVISIONING_PROFILE = "";
|
||||||
|
@ -2688,8 +2724,8 @@
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MARKETING_VERSION = 1.5.0;
|
MARKETING_VERSION = 1.5.2;
|
||||||
"OTHER_SWIFT_FLAGS[arch=*]" = "-Xfrontend -debug-time-function-bodies";
|
"OTHER_SWIFT_FLAGS[arch=*]" = "";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
||||||
PRODUCT_NAME = HaishinKit;
|
PRODUCT_NAME = HaishinKit;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
@ -2720,7 +2756,7 @@
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MARKETING_VERSION = 1.5.0;
|
MARKETING_VERSION = 1.5.2;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
||||||
PRODUCT_NAME = HaishinKit;
|
PRODUCT_NAME = HaishinKit;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
@ -2853,7 +2889,7 @@
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.5.0;
|
MARKETING_VERSION = 1.5.2;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
||||||
PRODUCT_NAME = HaishinKit;
|
PRODUCT_NAME = HaishinKit;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
@ -2889,7 +2925,7 @@
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.5.0;
|
MARKETING_VERSION = 1.5.2;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
PRODUCT_BUNDLE_IDENTIFIER = com.haishinkit.HaishinKit;
|
||||||
PRODUCT_NAME = HaishinKit;
|
PRODUCT_NAME = HaishinKit;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
|
35
README.md
35
README.md
|
@ -1,10 +1,12 @@
|
||||||
# HaishinKit for iOS, macOS, tvOS, and [Android](https://github.com/shogo4405/HaishinKit.kt).
|
# HaishinKit for iOS, macOS, tvOS, and [Android](https://github.com/shogo4405/HaishinKit.kt).
|
||||||
|
[](https://github.com/shogo4405/HaishinKit.swift/stargazers)
|
||||||
[](https://github.com/shogo4405/HaishinKit.swift/releases/latest)
|
[](https://github.com/shogo4405/HaishinKit.swift/releases/latest)
|
||||||
[](https://swiftpackageindex.com/shogo4405/HaishinKit.swift)
|
[](https://swiftpackageindex.com/shogo4405/HaishinKit.swift)
|
||||||
[](https://swiftpackageindex.com/shogo4405/HaishinKit.swift)
|
[](https://swiftpackageindex.com/shogo4405/HaishinKit.swift)
|
||||||
[](https://raw.githubusercontent.com/shogo4405/HaishinKit.swift/master/LICENSE.md)
|
[](https://raw.githubusercontent.com/shogo4405/HaishinKit.swift/master/LICENSE.md)
|
||||||
|
|
||||||
* Camera and Microphone streaming library via RTMP, HLS for iOS, macOS, tvOS.
|
* Camera and Microphone streaming library via RTMP, HLS for iOS, macOS, tvOS.
|
||||||
|
* README.md contains unreleased content, which can be tested on the main branch.
|
||||||
* [API Documentation](https://shogo4405.github.io/HaishinKit.swift/documentation/haishinkit)
|
* [API Documentation](https://shogo4405.github.io/HaishinKit.swift/documentation/haishinkit)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
|
@ -33,10 +35,17 @@ Enterprise Grade APIs for Feeds & Chat. <a href="https://getstream.io/tutorials/
|
||||||
<a href="https://streamlabs.com/" target="_blank"><img src="https://user-images.githubusercontent.com/810189/206836172-9c360977-ab6b-4eff-860b-82d0e7b06318.png" width="350px" alt="Streamlabs" /></a>
|
<a href="https://streamlabs.com/" target="_blank"><img src="https://user-images.githubusercontent.com/810189/206836172-9c360977-ab6b-4eff-860b-82d0e7b06318.png" width="350px" alt="Streamlabs" /></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
## 🌏 Related projects
|
||||||
|
Project name |Notes |License
|
||||||
|
----------------|------------|--------------
|
||||||
|
[SRTHaishinKit for iOS.](https://github.com/shogo4405/SRTHaishinKit.swift)|Camera and Microphone streaming library via SRT.|[BSD 3-Clause "New" or "Revised" License](https://github.com/shogo4405/SRTHaishinKit.swift/blob/master/LICENSE.md)
|
||||||
|
[HaishinKit for Android.](https://github.com/shogo4405/HaishinKit.kt)|Camera and Microphone streaming library via RTMP for Android.|[BSD 3-Clause "New" or "Revised" License](https://github.com/shogo4405/HaishinKit.kt/blob/master/LICENSE.md)
|
||||||
|
[HaishinKit for Flutter.](https://github.com/shogo4405/HaishinKit.dart)|Camera and Microphone streaming library via RTMP for Flutter.|[BSD 3-Clause "New" or "Revised" License](https://github.com/shogo4405/HaishinKit.dart/blob/master/LICENSE.md)
|
||||||
|
|
||||||
## 🎨 Features
|
## 🎨 Features
|
||||||
### RTMP
|
### RTMP
|
||||||
- [x] Authentication
|
- [x] Authentication
|
||||||
- [x] Publish and Recording (H264/AAC)
|
- [x] Publish and Recording
|
||||||
- [x] _Playback (Beta)_
|
- [x] _Playback (Beta)_
|
||||||
- [x] Adaptive bitrate streaming
|
- [x] Adaptive bitrate streaming
|
||||||
- [x] Handling (see also [#1153](/../../issues/1153))
|
- [x] Handling (see also [#1153](/../../issues/1153))
|
||||||
|
@ -49,6 +58,14 @@ Enterprise Grade APIs for Feeds & Chat. <a href="https://getstream.io/tutorials/
|
||||||
- [x] _Tunneled (RTMPT over SSL/TLS) (Technical Preview)_
|
- [x] _Tunneled (RTMPT over SSL/TLS) (Technical Preview)_
|
||||||
- [x] _RTMPT (Technical Preview)_
|
- [x] _RTMPT (Technical Preview)_
|
||||||
- [x] ReplayKit Live as a Broadcast Upload Extension
|
- [x] ReplayKit Live as a Broadcast Upload Extension
|
||||||
|
- [x] Supported codec
|
||||||
|
- Audio
|
||||||
|
- [x] AAC
|
||||||
|
- Video
|
||||||
|
- [x] H264/AVC
|
||||||
|
- ex: `stream.videoSettings.profileLevel = kVTProfileLevel_H264_Baseline_3_1 as String`
|
||||||
|
- [x] H265/HEVC ([Server-side support is required.](https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf))
|
||||||
|
- ex: `stream.videoSettings.profileLevel = kVTProfileLevel_HEVC_Main_AutoLevel as String`
|
||||||
|
|
||||||
### HLS
|
### HLS
|
||||||
- [x] HTTPService
|
- [x] HTTPService
|
||||||
|
@ -75,11 +92,11 @@ if #available(iOS 13.0, *) {
|
||||||
|Features|[HKView](https://shogo4405.github.io/HaishinKit.swift/Classes/HKView.html)|[PiPHKView](https://shogo4405.github.io/HaishinKit.swift/Classes/PiPHKView.html)|[MTHKView](https://shogo4405.github.io/HaishinKit.swift/Classes/MTHKView.html)|
|
|Features|[HKView](https://shogo4405.github.io/HaishinKit.swift/Classes/HKView.html)|[PiPHKView](https://shogo4405.github.io/HaishinKit.swift/Classes/PiPHKView.html)|[MTHKView](https://shogo4405.github.io/HaishinKit.swift/Classes/MTHKView.html)|
|
||||||
|-|:---:|:---:|:---:|
|
|-|:---:|:---:|:---:|
|
||||||
|Engine|AVCaptureVideoPreviewLayer|AVSampleBufferDisplayLayer|Metal|
|
|Engine|AVCaptureVideoPreviewLayer|AVSampleBufferDisplayLayer|Metal|
|
||||||
|Publish|◯|◯|◯|
|
|Publish|✔|✔|✔|
|
||||||
|Playback|×|◯|◯|
|
|Playback|<br />|✔|✔|
|
||||||
|VisualEffect|×|◯|◯|
|
|VisualEffect|<br />|✔|✔|
|
||||||
|PictureInPicture|×|◯|×|
|
|PictureInPicture|<br />|✔|<br />|
|
||||||
|MultiCamera|×|◯|◯|
|
|MultiCamera|<br />|✔|✔|
|
||||||
|
|
||||||
### Others
|
### Others
|
||||||
- [x] [Support multitasking camera access.](https://developer.apple.com/documentation/avfoundation/capture_setup/accessing_the_camera_while_multitasking)
|
- [x] [Support multitasking camera access.](https://developer.apple.com/documentation/avfoundation/capture_setup/accessing_the_camera_while_multitasking)
|
||||||
|
@ -96,8 +113,6 @@ if #available(iOS 13.0, *) {
|
||||||
|:----:|:----:|:----:|:----:|:----:|:----:|
|
|:----:|:----:|:----:|:----:|:----:|:----:|
|
||||||
|1.5.0+|11.0+|10.13+|10.2+|14.3+|5.7+|
|
|1.5.0+|11.0+|10.13+|10.2+|14.3+|5.7+|
|
||||||
|1.4.0+|11.0+|10.13+|10.2+|14.0+|5.7+|
|
|1.4.0+|11.0+|10.13+|10.2+|14.0+|5.7+|
|
||||||
|1.3.0+|11.0+|10.13+|10.2+|14.0+|5.7+|
|
|
||||||
|1.2.0+|9.0+|10.11+|10.2+|13.0+|5.5+|
|
|
||||||
|
|
||||||
## 🐾 Examples
|
## 🐾 Examples
|
||||||
Examples project are available for iOS with UIKit, iOS with SwiftUI, macOS and tvOS.
|
Examples project are available for iOS with UIKit, iOS with SwiftUI, macOS and tvOS.
|
||||||
|
@ -128,7 +143,7 @@ source 'https://github.com/CocoaPods/Specs.git'
|
||||||
use_frameworks!
|
use_frameworks!
|
||||||
|
|
||||||
def import_pods
|
def import_pods
|
||||||
pod 'HaishinKit', '~> 1.5.0
|
pod 'HaishinKit', '~> 1.5.2
|
||||||
end
|
end
|
||||||
|
|
||||||
target 'Your Target' do
|
target 'Your Target' do
|
||||||
|
@ -138,7 +153,7 @@ end
|
||||||
```
|
```
|
||||||
### Carthage
|
### Carthage
|
||||||
```
|
```
|
||||||
github "shogo4405/HaishinKit.swift" ~> 1.5.0
|
github "shogo4405/HaishinKit.swift" ~> 1.5.2
|
||||||
```
|
```
|
||||||
### Swift Package Manager
|
### Swift Package Manager
|
||||||
```
|
```
|
||||||
|
|
|
@ -25,7 +25,7 @@ public class AudioCodec {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Specifies the delegate.
|
/// Specifies the delegate.
|
||||||
public weak var delegate: AudioCodecDelegate?
|
public weak var delegate: (any AudioCodecDelegate)?
|
||||||
/// This instance is running to process(true) or not(false).
|
/// This instance is running to process(true) or not(false).
|
||||||
public private(set) var isRunning: Atomic<Bool> = .init(false)
|
public private(set) var isRunning: Atomic<Bool> = .init(false)
|
||||||
/// Specifies the settings for audio codec.
|
/// Specifies the settings for audio codec.
|
||||||
|
|
|
@ -5,7 +5,7 @@ enum VTSessionMode {
|
||||||
case compression
|
case compression
|
||||||
case decompression
|
case decompression
|
||||||
|
|
||||||
func makeSession(_ videoCodec: VideoCodec) -> VTSessionConvertible? {
|
func makeSession(_ videoCodec: VideoCodec) -> (any VTSessionConvertible)? {
|
||||||
switch self {
|
switch self {
|
||||||
case .compression:
|
case .compression:
|
||||||
var session: VTCompressionSession?
|
var session: VTCompressionSession?
|
||||||
|
@ -13,7 +13,7 @@ enum VTSessionMode {
|
||||||
allocator: kCFAllocatorDefault,
|
allocator: kCFAllocatorDefault,
|
||||||
width: videoCodec.settings.videoSize.width,
|
width: videoCodec.settings.videoSize.width,
|
||||||
height: videoCodec.settings.videoSize.height,
|
height: videoCodec.settings.videoSize.height,
|
||||||
codecType: kCMVideoCodecType_H264,
|
codecType: videoCodec.settings.format.codecType,
|
||||||
encoderSpecification: nil,
|
encoderSpecification: nil,
|
||||||
imageBufferAttributes: videoCodec.attributes as CFDictionary?,
|
imageBufferAttributes: videoCodec.attributes as CFDictionary?,
|
||||||
compressedDataAllocator: nil,
|
compressedDataAllocator: nil,
|
||||||
|
|
|
@ -25,16 +25,6 @@ public protocol VideoCodecDelegate: AnyObject {
|
||||||
* The VideoCodec class provides methods for encode or decode for video.
|
* The VideoCodec class provides methods for encode or decode for video.
|
||||||
*/
|
*/
|
||||||
public class VideoCodec {
|
public class VideoCodec {
|
||||||
static let defaultMinimumGroupOfPictures: Int = 12
|
|
||||||
|
|
||||||
#if os(OSX)
|
|
||||||
#if arch(arm64)
|
|
||||||
static let encoderName = NSString(string: "com.apple.videotoolbox.videoencoder.ave.avc")
|
|
||||||
#else
|
|
||||||
static let encoderName = NSString(string: "com.apple.videotoolbox.videoencoder.h264.gva")
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The VideoCodec error domain codes.
|
* The VideoCodec error domain codes.
|
||||||
*/
|
*/
|
||||||
|
@ -51,7 +41,7 @@ public class VideoCodec {
|
||||||
|
|
||||||
/// The videoCodec's attributes value.
|
/// The videoCodec's attributes value.
|
||||||
public static var defaultAttributes: [NSString: AnyObject]? = [
|
public static var defaultAttributes: [NSString: AnyObject]? = [
|
||||||
kCVPixelBufferIOSurfacePropertiesKey: [:] as AnyObject,
|
kCVPixelBufferIOSurfacePropertiesKey: NSDictionary(),
|
||||||
kCVPixelBufferMetalCompatibilityKey: kCFBooleanTrue
|
kCVPixelBufferMetalCompatibilityKey: kCFBooleanTrue
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -76,15 +66,10 @@ public class VideoCodec {
|
||||||
guard !CMFormatDescriptionEqual(formatDescription, otherFormatDescription: oldValue) else {
|
guard !CMFormatDescriptionEqual(formatDescription, otherFormatDescription: oldValue) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if let atoms: [String: AnyObject] = formatDescription?.`extension`(by: "SampleDescriptionExtensionAtoms"), let avcC: Data = atoms["avcC"] as? Data {
|
|
||||||
let config = AVCConfigurationRecord(data: avcC)
|
|
||||||
isBaseline = config.avcProfileIndication == 66
|
|
||||||
}
|
|
||||||
delegate?.videoCodec(self, didOutput: formatDescription)
|
delegate?.videoCodec(self, didOutput: formatDescription)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var needsSync: Atomic<Bool> = .init(true)
|
var needsSync: Atomic<Bool> = .init(true)
|
||||||
var isBaseline = true
|
|
||||||
var attributes: [NSString: AnyObject]? {
|
var attributes: [NSString: AnyObject]? {
|
||||||
guard VideoCodec.defaultAttributes != nil else {
|
guard VideoCodec.defaultAttributes != nil else {
|
||||||
return nil
|
return nil
|
||||||
|
@ -97,19 +82,17 @@ public class VideoCodec {
|
||||||
attributes[kCVPixelBufferHeightKey] = NSNumber(value: settings.videoSize.height)
|
attributes[kCVPixelBufferHeightKey] = NSNumber(value: settings.videoSize.height)
|
||||||
return attributes
|
return attributes
|
||||||
}
|
}
|
||||||
weak var delegate: VideoCodecDelegate?
|
weak var delegate: (any VideoCodecDelegate)?
|
||||||
private(set) var session: VTSessionConvertible? {
|
private(set) var session: (any VTSessionConvertible)? {
|
||||||
didSet {
|
didSet {
|
||||||
oldValue?.invalidate()
|
oldValue?.invalidate()
|
||||||
invalidateSession = false
|
invalidateSession = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private var invalidateSession = true
|
private var invalidateSession = true
|
||||||
private var buffers: [CMSampleBuffer] = []
|
|
||||||
private var minimumGroupOfPictures: Int = VideoCodec.defaultMinimumGroupOfPictures
|
|
||||||
|
|
||||||
func appendImageBuffer(_ imageBuffer: CVImageBuffer, presentationTimeStamp: CMTime, duration: CMTime) {
|
func appendImageBuffer(_ imageBuffer: CVImageBuffer, presentationTimeStamp: CMTime, duration: CMTime) {
|
||||||
guard isRunning.value else {
|
guard isRunning.value, !(delegate?.videoCodecWillDropFame(self) ?? false) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if invalidateSession {
|
if invalidateSession {
|
||||||
|
@ -125,14 +108,12 @@ public class VideoCodec {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
formatDescription = sampleBuffer.formatDescription
|
formatDescription = sampleBuffer.formatDescription
|
||||||
if !(delegate?.videoCodecWillDropFame(self) ?? false) {
|
delegate?.videoCodec(self, didOutput: sampleBuffer)
|
||||||
delegate?.videoCodec(self, didOutput: sampleBuffer)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendSampleBuffer(_ sampleBuffer: CMSampleBuffer) {
|
func appendSampleBuffer(_ sampleBuffer: CMSampleBuffer) {
|
||||||
guard isRunning.value, !(delegate?.videoCodecWillDropFame(self) ?? false) else {
|
guard isRunning.value else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if invalidateSession {
|
if invalidateSession {
|
||||||
|
@ -150,7 +131,7 @@ public class VideoCodec {
|
||||||
var timingInfo = CMSampleTimingInfo(
|
var timingInfo = CMSampleTimingInfo(
|
||||||
duration: duration,
|
duration: duration,
|
||||||
presentationTimeStamp: presentationTimeStamp,
|
presentationTimeStamp: presentationTimeStamp,
|
||||||
decodeTimeStamp: .invalid
|
decodeTimeStamp: sampleBuffer.decodeTimeStamp
|
||||||
)
|
)
|
||||||
var videoFormatDescription: CMVideoFormatDescription?
|
var videoFormatDescription: CMVideoFormatDescription?
|
||||||
var status = CMVideoFormatDescriptionCreateForImageBuffer(
|
var status = CMVideoFormatDescriptionCreateForImageBuffer(
|
||||||
|
@ -177,18 +158,7 @@ public class VideoCodec {
|
||||||
delegate?.videoCodec(self, errorOccurred: .failedToFlame(status: status))
|
delegate?.videoCodec(self, errorOccurred: .failedToFlame(status: status))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
delegate?.videoCodec(self, didOutput: buffer)
|
||||||
if isBaseline {
|
|
||||||
delegate?.videoCodec(self, didOutput: buffer)
|
|
||||||
} else {
|
|
||||||
buffers.append(buffer)
|
|
||||||
buffers.sort {
|
|
||||||
$0.presentationTimeStamp < $1.presentationTimeStamp
|
|
||||||
}
|
|
||||||
if minimumGroupOfPictures <= buffers.count {
|
|
||||||
delegate?.videoCodec(self, didOutput: buffers.removeFirst())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,7 +213,6 @@ extension VideoCodec: Running {
|
||||||
self.session = nil
|
self.session = nil
|
||||||
self.invalidateSession = true
|
self.invalidateSession = true
|
||||||
self.needsSync.mutate { $0 = true }
|
self.needsSync.mutate { $0 = true }
|
||||||
self.buffers.removeAll()
|
|
||||||
self.formatDescription = nil
|
self.formatDescription = nil
|
||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
NotificationCenter.default.removeObserver(self, name: AVAudioSession.interruptionNotification, object: nil)
|
NotificationCenter.default.removeObserver(self, name: AVAudioSession.interruptionNotification, object: nil)
|
||||||
|
|
|
@ -43,6 +43,36 @@ public struct VideoCodecSettings: Codable {
|
||||||
case trim = "Trim"
|
case trim = "Trim"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The type of the VideoCodec supports format.
|
||||||
|
enum Format: Codable {
|
||||||
|
case h264
|
||||||
|
case hevc
|
||||||
|
|
||||||
|
#if os(macOS)
|
||||||
|
var encoderID: NSString {
|
||||||
|
switch self {
|
||||||
|
case .h264:
|
||||||
|
#if arch(arm64)
|
||||||
|
return NSString(string: "com.apple.videotoolbox.videoencoder.ave.avc")
|
||||||
|
#else
|
||||||
|
return NSString(string: "com.apple.videotoolbox.videoencoder.h264.gva")
|
||||||
|
#endif
|
||||||
|
case .hevc:
|
||||||
|
return NSString(string: "com.apple.videotoolbox.videoencoder.ave.hevc")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
var codecType: UInt32 {
|
||||||
|
switch self {
|
||||||
|
case .h264:
|
||||||
|
return kCMVideoCodecType_H264
|
||||||
|
case .hevc:
|
||||||
|
return kCMVideoCodecType_HEVC
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Specifies the video size of encoding video.
|
/// Specifies the video size of encoding video.
|
||||||
public var videoSize: VideoSize
|
public var videoSize: VideoSize
|
||||||
/// Specifies the bitrate.
|
/// Specifies the bitrate.
|
||||||
|
@ -57,10 +87,19 @@ public struct VideoCodecSettings: Codable {
|
||||||
/// Specifies the bitRateMode.
|
/// Specifies the bitRateMode.
|
||||||
public var bitRateMode: BitRateMode
|
public var bitRateMode: BitRateMode
|
||||||
/// Specifies the H264 profileLevel.
|
/// Specifies the H264 profileLevel.
|
||||||
public var profileLevel: String
|
public var profileLevel: String {
|
||||||
/// Specifies the HardwareEncoder is enabled(TRUE), or not(FALSE) for macOS.
|
didSet {
|
||||||
|
if profileLevel.contains("HEVC") {
|
||||||
|
format = .hevc
|
||||||
|
} else {
|
||||||
|
format = .h264
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// Specifies the HardwareEncoder is enabled(TRUE), or not(FALSE) for macOS.
|
||||||
public var isHardwareEncoderEnabled = true
|
public var isHardwareEncoderEnabled = true
|
||||||
|
|
||||||
|
var format: Format = .h264
|
||||||
var expectedFrameRate: Float64 = IOMixer.defaultFrameRate
|
var expectedFrameRate: Float64 = IOMixer.defaultFrameRate
|
||||||
|
|
||||||
/// Creates a new VideoCodecSettings instance.
|
/// Creates a new VideoCodecSettings instance.
|
||||||
|
@ -82,6 +121,9 @@ public struct VideoCodecSettings: Codable {
|
||||||
self.bitRateMode = bitRateMode
|
self.bitRateMode = bitRateMode
|
||||||
self.allowFrameReordering = allowFrameReordering
|
self.allowFrameReordering = allowFrameReordering
|
||||||
self.isHardwareEncoderEnabled = isHardwareEncoderEnabled
|
self.isHardwareEncoderEnabled = isHardwareEncoderEnabled
|
||||||
|
if profileLevel.contains("HEVC") {
|
||||||
|
self.format = .hevc
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func invalidateSession(_ rhs: VideoCodecSettings) -> Bool {
|
func invalidateSession(_ rhs: VideoCodecSettings) -> Bool {
|
||||||
|
@ -120,7 +162,7 @@ public struct VideoCodecSettings: Codable {
|
||||||
])
|
])
|
||||||
#if os(macOS)
|
#if os(macOS)
|
||||||
if isHardwareEncoderEnabled {
|
if isHardwareEncoderEnabled {
|
||||||
options.insert(.init(key: .encoderID, value: VideoCodec.encoderName))
|
options.insert(.init(key: .encoderID, value: format.encoderID))
|
||||||
options.insert(.init(key: .enableHardwareAcceleratedVideoEncoder, value: kCFBooleanTrue))
|
options.insert(.init(key: .enableHardwareAcceleratedVideoEncoder, value: kCFBooleanTrue))
|
||||||
options.insert(.init(key: .requireHardwareAcceleratedVideoEncoder, value: kCFBooleanTrue))
|
options.insert(.init(key: .requireHardwareAcceleratedVideoEncoder, value: kCFBooleanTrue))
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,4 @@ extension CMFormatDescription {
|
||||||
var _mediaType: CMMediaType {
|
var _mediaType: CMMediaType {
|
||||||
CMFormatDescriptionGetMediaType(self)
|
CMFormatDescriptionGetMediaType(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
func `extension`(by key: String) -> [String: AnyObject]? {
|
|
||||||
CMFormatDescriptionGetExtension(self, extensionKey: key as CFString) as? [String: AnyObject]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,21 +8,4 @@ extension CMVideoFormatDescription {
|
||||||
var dimensions: CMVideoDimensions {
|
var dimensions: CMVideoDimensions {
|
||||||
CMVideoFormatDescriptionGetDimensions(self)
|
CMVideoFormatDescriptionGetDimensions(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
static func create(pixelBuffer: CVPixelBuffer) -> CMVideoFormatDescription? {
|
|
||||||
var formatDescription: CMFormatDescription?
|
|
||||||
let status: OSStatus = CMVideoFormatDescriptionCreate(
|
|
||||||
allocator: kCFAllocatorDefault,
|
|
||||||
codecType: kCMVideoCodecType_422YpCbCr8,
|
|
||||||
width: Int32(pixelBuffer.width),
|
|
||||||
height: Int32(pixelBuffer.height),
|
|
||||||
extensions: nil,
|
|
||||||
formatDescriptionOut: &formatDescription
|
|
||||||
)
|
|
||||||
guard status == noErr else {
|
|
||||||
logger.warn("\(status)")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return formatDescription
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import Accelerate
|
import Accelerate
|
||||||
import CoreMedia
|
import CoreMedia
|
||||||
|
import CoreVideo
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
extension vImage_Buffer {
|
extension vImage_Buffer {
|
||||||
|
@ -19,6 +20,11 @@ extension vImage_Buffer {
|
||||||
mutating func copy(to cvPixelBuffer: CVPixelBuffer, format: inout vImage_CGImageFormat) -> vImage_Error {
|
mutating func copy(to cvPixelBuffer: CVPixelBuffer, format: inout vImage_CGImageFormat) -> vImage_Error {
|
||||||
let cvImageFormat = vImageCVImageFormat_CreateWithCVPixelBuffer(cvPixelBuffer).takeRetainedValue()
|
let cvImageFormat = vImageCVImageFormat_CreateWithCVPixelBuffer(cvPixelBuffer).takeRetainedValue()
|
||||||
vImageCVImageFormat_SetColorSpace(cvImageFormat, CGColorSpaceCreateDeviceRGB())
|
vImageCVImageFormat_SetColorSpace(cvImageFormat, CGColorSpaceCreateDeviceRGB())
|
||||||
|
defer {
|
||||||
|
if let dictionary = CVBufferGetAttachments(cvPixelBuffer, .shouldNotPropagate) {
|
||||||
|
CVBufferSetAttachments(cvPixelBuffer, dictionary, .shouldPropagate)
|
||||||
|
}
|
||||||
|
}
|
||||||
return vImageBuffer_CopyToCVPixelBuffer(
|
return vImageBuffer_CopyToCVPixelBuffer(
|
||||||
&self,
|
&self,
|
||||||
&format,
|
&format,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/// The type of flv supports aac packet types.
|
/// The type of flv supports aac packet types.
|
||||||
public enum FLVAACPacketType: UInt8 {
|
enum FLVAACPacketType: UInt8 {
|
||||||
/// The sequence data.
|
/// The sequence data.
|
||||||
case seq = 0
|
case seq = 0
|
||||||
/// The raw data.
|
/// The raw data.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/// The type of flv supports avc packet types.
|
/// The type of flv supports avc packet types.
|
||||||
public enum FLVAVCPacketType: UInt8 {
|
enum FLVAVCPacketType: UInt8 {
|
||||||
/// The sequence data.
|
/// The sequence data.
|
||||||
case seq = 0
|
case seq = 0
|
||||||
/// The NAL unit data.
|
/// The NAL unit data.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import AVFoundation
|
import AVFoundation
|
||||||
|
|
||||||
/// The type of flv supports audio codecs.
|
/// The type of flv supports audio codecs.
|
||||||
public enum FLVAudioCodec: UInt8 {
|
enum FLVAudioCodec: UInt8 {
|
||||||
/// The PCM codec.
|
/// The PCM codec.
|
||||||
case pcm = 0
|
case pcm = 0
|
||||||
/// The ADPCM codec.
|
/// The ADPCM codec.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/// The type of flv supports video frame types.
|
/// The type of flv supports video frame types.
|
||||||
public enum FLVFrameType: UInt8 {
|
enum FLVFrameType: UInt8 {
|
||||||
/// The keyframe.
|
/// The keyframe.
|
||||||
case key = 1
|
case key = 1
|
||||||
/// The inter frame.
|
/// The inter frame.
|
||||||
|
|
|
@ -1,62 +0,0 @@
|
||||||
import AVFoundation
|
|
||||||
|
|
||||||
/// The FLVReader is used to read the contents of a FLV file.
|
|
||||||
public final class FLVReader {
|
|
||||||
/// The header of a FLV.
|
|
||||||
public static let header = Data([0x46, 0x4C, 0x56, 1])
|
|
||||||
|
|
||||||
/// The headerSize of a FLV.
|
|
||||||
static let headerSize: Int = 11
|
|
||||||
|
|
||||||
/// The url of a FLV file.
|
|
||||||
public let url: URL
|
|
||||||
private var currentOffSet: UInt64 = 0
|
|
||||||
private var fileHandle: FileHandle?
|
|
||||||
|
|
||||||
/// Initializes and returns a newly allocated reader.
|
|
||||||
public init(url: URL) {
|
|
||||||
do {
|
|
||||||
self.url = url
|
|
||||||
fileHandle = try FileHandle(forReadingFrom: url)
|
|
||||||
fileHandle?.seek(toFileOffset: 13)
|
|
||||||
currentOffSet = 13
|
|
||||||
} catch {
|
|
||||||
logger.error(error)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns data by FLVTag.
|
|
||||||
public func getData(_ tag: FLVTag) -> Data? {
|
|
||||||
fileHandle?.seek(toFileOffset: tag.offset)
|
|
||||||
return fileHandle?.readData(ofLength: Int(UInt64(tag.dataSize)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension FLVReader: IteratorProtocol {
|
|
||||||
// MARK: IteratorProtocol
|
|
||||||
public func next() -> FLVTag? {
|
|
||||||
guard let fileHandle: FileHandle = fileHandle else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
var tag: FLVTag!
|
|
||||||
fileHandle.seek(toFileOffset: currentOffSet)
|
|
||||||
let data: Data = fileHandle.readData(ofLength: FLVReader.headerSize)
|
|
||||||
guard !data.isEmpty else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
switch data[0] {
|
|
||||||
case 8:
|
|
||||||
tag = FLVAudioTag(data: data)
|
|
||||||
case 9:
|
|
||||||
tag = FLVVideoTag(data: data)
|
|
||||||
case 18:
|
|
||||||
tag = FLVDataTag(data: data)
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
tag.readData(fileHandle)
|
|
||||||
tag.offset = currentOffSet + UInt64(FLVReader.headerSize)
|
|
||||||
currentOffSet += UInt64(FLVReader.headerSize) + UInt64(tag.dataSize) + 4
|
|
||||||
return tag
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +1,5 @@
|
||||||
/// The type of flv supports audio sound rates.
|
/// The type of flv supports audio sound rates.
|
||||||
public enum FLVSoundRate: UInt8 {
|
enum FLVSoundRate: UInt8 {
|
||||||
/// The sound rate of 5,500.0kHz.
|
/// The sound rate of 5,500.0kHz.
|
||||||
case kHz5_5 = 0
|
case kHz5_5 = 0
|
||||||
/// Ths sound rate of 11,000.0kHz.
|
/// Ths sound rate of 11,000.0kHz.
|
||||||
|
@ -10,7 +10,7 @@ public enum FLVSoundRate: UInt8 {
|
||||||
case kHz44 = 3
|
case kHz44 = 3
|
||||||
|
|
||||||
/// The float typed value.
|
/// The float typed value.
|
||||||
public var floatValue: Float64 {
|
var floatValue: Float64 {
|
||||||
switch self {
|
switch self {
|
||||||
case .kHz5_5:
|
case .kHz5_5:
|
||||||
return 5500
|
return 5500
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/// The type of flv supports audio sound size.
|
/// The type of flv supports audio sound size.
|
||||||
public enum FLVSoundSize: UInt8 {
|
enum FLVSoundSize: UInt8 {
|
||||||
/// The 8bit sound.
|
/// The 8bit sound.
|
||||||
case snd8bit = 0
|
case snd8bit = 0
|
||||||
/// The 16bit sound.
|
/// The 16bit sound.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/// The type of flv supports audio sound channel type..
|
/// The type of flv supports audio sound channel type..
|
||||||
public enum FLVSoundType: UInt8 {
|
enum FLVSoundType: UInt8 {
|
||||||
/// The mono sound.
|
/// The mono sound.
|
||||||
case mono = 0
|
case mono = 0
|
||||||
/// The stereo sound.
|
/// The stereo sound.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
/// The type of flv tag.
|
/// The type of flv tag.
|
||||||
public enum FLVTagType: UInt8 {
|
enum FLVTagType: UInt8 {
|
||||||
/// The Audio tag,
|
/// The Audio tag,
|
||||||
case audio = 8
|
case audio = 8
|
||||||
/// The Video tag.
|
/// The Video tag.
|
||||||
|
@ -29,127 +29,3 @@ public enum FLVTagType: UInt8 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: -
|
|
||||||
/// The interface of FLV tag.
|
|
||||||
public protocol FLVTag: CustomDebugStringConvertible {
|
|
||||||
/// The type of this tag.
|
|
||||||
var tagType: FLVTagType { get set }
|
|
||||||
/// The length of data int the field.
|
|
||||||
var dataSize: UInt32 { get set }
|
|
||||||
/// The timestamp in milliseconds.
|
|
||||||
var timestamp: UInt32 { get set }
|
|
||||||
/// The extension of the timestamp.
|
|
||||||
var timestampExtended: UInt8 { get set }
|
|
||||||
/// The streamId, always 0.
|
|
||||||
var streamId: UInt32 { get set }
|
|
||||||
/// The data offset of a flv file.
|
|
||||||
var offset: UInt64 { get set }
|
|
||||||
|
|
||||||
/// Initialize a new object.
|
|
||||||
init()
|
|
||||||
/// Read data of fileHandler.
|
|
||||||
mutating func readData(_ fileHandler: FileHandle)
|
|
||||||
}
|
|
||||||
|
|
||||||
extension FLVTag {
|
|
||||||
var headerSize: Int {
|
|
||||||
tagType.headerSize
|
|
||||||
}
|
|
||||||
|
|
||||||
init?(data: Data) {
|
|
||||||
self.init()
|
|
||||||
let buffer = ByteArray(data: data)
|
|
||||||
do {
|
|
||||||
tagType = FLVTagType(rawValue: try buffer.readUInt8()) ?? .data
|
|
||||||
dataSize = try buffer.readUInt24()
|
|
||||||
timestamp = try buffer.readUInt24()
|
|
||||||
timestampExtended = try buffer.readUInt8()
|
|
||||||
streamId = try buffer.readUInt24()
|
|
||||||
buffer.clear()
|
|
||||||
} catch {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: CustomDebugStringConvertible
|
|
||||||
public var debugDescription: String {
|
|
||||||
Mirror(reflecting: self).debugDescription
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: -
|
|
||||||
/// A structure that defines the FLVTag of Data.
|
|
||||||
public struct FLVDataTag: FLVTag {
|
|
||||||
public var tagType: FLVTagType = .data
|
|
||||||
public var dataSize: UInt32 = 0
|
|
||||||
public var timestamp: UInt32 = 0
|
|
||||||
public var timestampExtended: UInt8 = 0
|
|
||||||
public var streamId: UInt32 = 0
|
|
||||||
public var offset: UInt64 = 0
|
|
||||||
|
|
||||||
public init() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public mutating func readData(_ fileHandler: FileHandle) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: -
|
|
||||||
/// A structure that defines the FLVTag of an audio.
|
|
||||||
public struct FLVAudioTag: FLVTag {
|
|
||||||
public var tagType: FLVTagType = .audio
|
|
||||||
public var dataSize: UInt32 = 0
|
|
||||||
public var timestamp: UInt32 = 0
|
|
||||||
public var timestampExtended: UInt8 = 0
|
|
||||||
public var streamId: UInt32 = 0
|
|
||||||
public var offset: UInt64 = 0
|
|
||||||
/// Specifies the codec of audio.
|
|
||||||
public var codec: FLVAudioCodec = .unknown
|
|
||||||
/// Specifies the sound of rate.
|
|
||||||
public var soundRate: FLVSoundRate = .kHz5_5
|
|
||||||
/// Specifies the sound of size.
|
|
||||||
public var soundSize: FLVSoundSize = .snd8bit
|
|
||||||
/// Specifies the sound of type.
|
|
||||||
public var soundType: FLVSoundType = .mono
|
|
||||||
|
|
||||||
public init() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public mutating func readData(_ fileHandler: FileHandle) {
|
|
||||||
let data: Data = fileHandler.readData(ofLength: headerSize)
|
|
||||||
codec = FLVAudioCodec(rawValue: data[0] >> 4) ?? .unknown
|
|
||||||
soundRate = FLVSoundRate(rawValue: (data[0] & 0b00001100) >> 2) ?? .kHz5_5
|
|
||||||
soundSize = FLVSoundSize(rawValue: (data[0] & 0b00000010) >> 1) ?? .snd8bit
|
|
||||||
soundType = FLVSoundType(rawValue: data[0] & 0b00000001) ?? .mono
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: -
|
|
||||||
/// A structure that defines the FLVTag of am video.
|
|
||||||
public struct FLVVideoTag: FLVTag {
|
|
||||||
public var tagType: FLVTagType = .video
|
|
||||||
public var dataSize: UInt32 = 0
|
|
||||||
public var timestamp: UInt32 = 0
|
|
||||||
public var timestampExtended: UInt8 = 0
|
|
||||||
public var streamId: UInt32 = 0
|
|
||||||
public var offset: UInt64 = 0
|
|
||||||
/// Specifies the frame type of video.
|
|
||||||
public var frameType: FLVFrameType = .command
|
|
||||||
/// Specifies the codec of video.
|
|
||||||
public var codec: FLVVideoCodec = .unknown
|
|
||||||
/// Specifies the avc packet type.
|
|
||||||
public var avcPacketType: FLVAVCPacketType = .eos
|
|
||||||
/// Specifies the composition time.
|
|
||||||
public var compositionTime: Int32 = 0
|
|
||||||
|
|
||||||
public init() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public mutating func readData(_ fileHandler: FileHandle) {
|
|
||||||
let data: Data = fileHandler.readData(ofLength: headerSize)
|
|
||||||
frameType = FLVFrameType(rawValue: data[0] >> 4) ?? .command
|
|
||||||
codec = FLVVideoCodec(rawValue: data[0] & 0b00001111) ?? .unknown
|
|
||||||
avcPacketType = FLVAVCPacketType(rawValue: data[1]) ?? .eos
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
/// The type of flv supports video codecs.
|
/// The type of flv supports video codecs.
|
||||||
public enum FLVVideoCodec: UInt8 {
|
enum FLVVideoCodec: UInt8 {
|
||||||
/// The JPEG codec.
|
/// The JPEG codec.
|
||||||
case jpeg = 1
|
case jpeg = 1
|
||||||
/// The Sorenson H263 codec.
|
/// The Sorenson H263 codec.
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
enum FLVVideoFourCC: UInt32 {
|
||||||
|
case av1 = 0x61763031 // { 'a', 'v', '0', '1' }
|
||||||
|
case vp9 = 0x76703039 // { 'v', 'p', '0', '9' }
|
||||||
|
case hevc = 0x68766331 // { 'h', 'v', 'c', '1' }
|
||||||
|
|
||||||
|
var isSupported: Bool {
|
||||||
|
switch self {
|
||||||
|
case .av1:
|
||||||
|
return false
|
||||||
|
case .vp9:
|
||||||
|
return false
|
||||||
|
case .hevc:
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
enum FLVVideoPacketType: UInt8 {
|
||||||
|
case sequenceStart = 0
|
||||||
|
case codedFrames = 1
|
||||||
|
case sequenceEnd = 2
|
||||||
|
case codedFramesX = 3
|
||||||
|
case metadata = 4
|
||||||
|
case mpeg2TSSequenceStart = 5
|
||||||
|
}
|
|
@ -1,16 +1,20 @@
|
||||||
import AVFoundation
|
import AVFoundation
|
||||||
import VideoToolbox
|
import VideoToolbox
|
||||||
|
|
||||||
|
protocol DecoderConfigurationRecord {
|
||||||
|
func makeFormatDescription(_ formatDescriptionOut: UnsafeMutablePointer<CMFormatDescription?>) -> OSStatus
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: -
|
// MARK: -
|
||||||
/*
|
/*
|
||||||
- seealso: ISO/IEC 14496-15 2010
|
- seealso: ISO/IEC 14496-15 2010
|
||||||
*/
|
*/
|
||||||
struct AVCConfigurationRecord {
|
struct AVCDecoderConfigurationRecord: DecoderConfigurationRecord {
|
||||||
static func getData(_ formatDescription: CMFormatDescription?) -> Data? {
|
static func getData(_ formatDescription: CMFormatDescription?) -> Data? {
|
||||||
guard let formatDescription = formatDescription else {
|
guard let formatDescription else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if let atoms: NSDictionary = CMFormatDescriptionGetExtension(formatDescription, extensionKey: "SampleDescriptionExtensionAtoms" as CFString) as? NSDictionary {
|
if let atoms = CMFormatDescriptionGetExtension(formatDescription, extensionKey: "SampleDescriptionExtensionAtoms" as CFString) as? NSDictionary {
|
||||||
return atoms["avcC"] as? Data
|
return atoms["avcC"] as? Data
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -75,7 +79,7 @@ struct AVCConfigurationRecord {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension AVCConfigurationRecord: DataConvertible {
|
extension AVCDecoderConfigurationRecord: DataConvertible {
|
||||||
// MARK: DataConvertible
|
// MARK: DataConvertible
|
||||||
var data: Data {
|
var data: Data {
|
||||||
get {
|
get {
|
||||||
|
@ -108,7 +112,7 @@ extension AVCConfigurationRecord: DataConvertible {
|
||||||
avcLevelIndication = try buffer.readUInt8()
|
avcLevelIndication = try buffer.readUInt8()
|
||||||
lengthSizeMinusOneWithReserved = try buffer.readUInt8()
|
lengthSizeMinusOneWithReserved = try buffer.readUInt8()
|
||||||
numOfSequenceParameterSetsWithReserved = try buffer.readUInt8()
|
numOfSequenceParameterSetsWithReserved = try buffer.readUInt8()
|
||||||
let numOfSequenceParameterSets: UInt8 = numOfSequenceParameterSetsWithReserved & ~AVCConfigurationRecord.reserveNumOfSequenceParameterSets
|
let numOfSequenceParameterSets: UInt8 = numOfSequenceParameterSetsWithReserved & ~AVCDecoderConfigurationRecord.reserveNumOfSequenceParameterSets
|
||||||
for _ in 0..<numOfSequenceParameterSets {
|
for _ in 0..<numOfSequenceParameterSets {
|
||||||
let length = Int(try buffer.readUInt16())
|
let length = Int(try buffer.readUInt16())
|
||||||
sequenceParameterSets.append(try buffer.readBytes(length).bytes)
|
sequenceParameterSets.append(try buffer.readBytes(length).bytes)
|
||||||
|
@ -125,7 +129,7 @@ extension AVCConfigurationRecord: DataConvertible {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension AVCConfigurationRecord: CustomDebugStringConvertible {
|
extension AVCDecoderConfigurationRecord: CustomDebugStringConvertible {
|
||||||
// MARK: CustomDebugStringConvertible
|
// MARK: CustomDebugStringConvertible
|
||||||
var debugDescription: String {
|
var debugDescription: String {
|
||||||
Mirror(reflecting: self).debugDescription
|
Mirror(reflecting: self).debugDescription
|
|
@ -1,7 +1,7 @@
|
||||||
import CoreMedia
|
import CoreMedia
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
enum NALUnitType: UInt8, Equatable {
|
enum AVCNALUnitType: UInt8, Equatable {
|
||||||
case unspec = 0
|
case unspec = 0
|
||||||
case slice = 1 // P frame
|
case slice = 1 // P frame
|
||||||
case dpa = 2
|
case dpa = 2
|
||||||
|
@ -18,9 +18,9 @@ enum NALUnitType: UInt8, Equatable {
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: -
|
// MARK: -
|
||||||
struct NALUnit: Equatable {
|
struct AVCNALUnit: Equatable {
|
||||||
let refIdc: UInt8
|
let refIdc: UInt8
|
||||||
let type: NALUnitType
|
let type: AVCNALUnitType
|
||||||
let payload: Data
|
let payload: Data
|
||||||
|
|
||||||
init(_ data: Data) {
|
init(_ data: Data) {
|
||||||
|
@ -29,7 +29,7 @@ struct NALUnit: Equatable {
|
||||||
|
|
||||||
init(_ data: Data, length: Int) {
|
init(_ data: Data, length: Int) {
|
||||||
self.refIdc = data[0] >> 5
|
self.refIdc = data[0] >> 5
|
||||||
self.type = NALUnitType(rawValue: data[0] & 0x1f) ?? .unspec
|
self.type = AVCNALUnitType(rawValue: data[0] & 0x1f) ?? .unspec
|
||||||
self.payload = data.subdata(in: 1..<length)
|
self.payload = data.subdata(in: 1..<length)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,14 +41,14 @@ struct NALUnit: Equatable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class NALUnitReader {
|
class AVCNALUnitReader {
|
||||||
static let defaultStartCodeLength: Int = 4
|
static let defaultStartCodeLength: Int = 4
|
||||||
static let defaultNALUnitHeaderLength: Int32 = 4
|
static let defaultNALUnitHeaderLength: Int32 = 4
|
||||||
|
|
||||||
var nalUnitHeaderLength: Int32 = NALUnitReader.defaultNALUnitHeaderLength
|
var nalUnitHeaderLength: Int32 = AVCNALUnitReader.defaultNALUnitHeaderLength
|
||||||
|
|
||||||
func read(_ data: Data) -> [NALUnit] {
|
func read(_ data: Data) -> [AVCNALUnit] {
|
||||||
var units: [NALUnit] = []
|
var units: [AVCNALUnit] = []
|
||||||
var lastIndexOf = data.count - 1
|
var lastIndexOf = data.count - 1
|
||||||
for i in (2..<data.count).reversed() {
|
for i in (2..<data.count).reversed() {
|
||||||
guard data[i] == 1 && data[i - 1] == 0 && data[i - 2] == 0 else {
|
guard data[i] == 1 && data[i - 1] == 0 && data[i - 2] == 0 else {
|
|
@ -0,0 +1,134 @@
|
||||||
|
import AVFoundation
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
/// ISO/IEC 14496-15 8.3.3.1.2
|
||||||
|
struct HEVCDecoderConfigurationRecord: DecoderConfigurationRecord {
|
||||||
|
static func getData(_ formatDescription: CMFormatDescription?) -> Data? {
|
||||||
|
guard let formatDescription else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if let atoms = CMFormatDescriptionGetExtension(formatDescription, extensionKey: "SampleDescriptionExtensionAtoms" as CFString) as? NSDictionary {
|
||||||
|
return atoms["hvcC"] as? Data
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var configurationVersion: UInt8 = 1
|
||||||
|
var generalProfileSpace: UInt8 = 0
|
||||||
|
var generalTierFlag = false
|
||||||
|
var generalProfileIdc: UInt8 = 0
|
||||||
|
var generalProfileCompatibilityFlags: UInt32 = 0
|
||||||
|
var generalConstraintIndicatorFlags: UInt64 = 0
|
||||||
|
var generalLevelIdc: UInt8 = 0
|
||||||
|
var minSpatialSegmentationIdc: UInt16 = 0
|
||||||
|
var parallelismType: UInt8 = 0
|
||||||
|
var chromaFormat: UInt8 = 0
|
||||||
|
var bitDepthLumaMinus8: UInt8 = 0
|
||||||
|
var bitDepthChromaMinus8: UInt8 = 0
|
||||||
|
var avgFrameRate: UInt16 = 0
|
||||||
|
var constantFrameRate: UInt8 = 0
|
||||||
|
var numTemporalLayers: UInt8 = 0
|
||||||
|
var temporalIdNested: UInt8 = 0
|
||||||
|
var lengthSizeMinusOne: UInt8 = 0
|
||||||
|
var numberOfArrays: UInt8 = 0
|
||||||
|
var array: [HEVCNALUnitType: [Data]] = [:]
|
||||||
|
|
||||||
|
init() {
|
||||||
|
}
|
||||||
|
|
||||||
|
init(data: Data) {
|
||||||
|
self.data = data
|
||||||
|
}
|
||||||
|
|
||||||
|
func makeFormatDescription(_ formatDescriptionOut: UnsafeMutablePointer<CMFormatDescription?>) -> OSStatus {
|
||||||
|
guard let vps = array[.vps], let sps = array[.sps], let pps = array[.pps] else {
|
||||||
|
return kCMFormatDescriptionBridgeError_InvalidParameter
|
||||||
|
}
|
||||||
|
return vps[0].withUnsafeBytes { (vpsBuffer: UnsafeRawBufferPointer) -> OSStatus in
|
||||||
|
guard let vpsBaseAddress = vpsBuffer.baseAddress else {
|
||||||
|
return kCMFormatDescriptionBridgeError_InvalidParameter
|
||||||
|
}
|
||||||
|
return sps[0].withUnsafeBytes { (spsBuffer: UnsafeRawBufferPointer) -> OSStatus in
|
||||||
|
guard let spsBaseAddress = spsBuffer.baseAddress else {
|
||||||
|
return kCMFormatDescriptionBridgeError_InvalidParameter
|
||||||
|
}
|
||||||
|
return pps[0].withUnsafeBytes { (ppsBuffer: UnsafeRawBufferPointer) -> OSStatus in
|
||||||
|
guard let ppsBaseAddress = ppsBuffer.baseAddress else {
|
||||||
|
return kCMFormatDescriptionBridgeError_InvalidParameter
|
||||||
|
}
|
||||||
|
let pointers: [UnsafePointer<UInt8>] = [
|
||||||
|
vpsBaseAddress.assumingMemoryBound(to: UInt8.self),
|
||||||
|
spsBaseAddress.assumingMemoryBound(to: UInt8.self),
|
||||||
|
ppsBaseAddress.assumingMemoryBound(to: UInt8.self)
|
||||||
|
]
|
||||||
|
let sizes: [Int] = [vpsBuffer.count, spsBuffer.count, ppsBuffer.count]
|
||||||
|
let nalUnitHeaderLength: Int32 = 4
|
||||||
|
return CMVideoFormatDescriptionCreateFromHEVCParameterSets(
|
||||||
|
allocator: kCFAllocatorDefault,
|
||||||
|
parameterSetCount: pointers.count,
|
||||||
|
parameterSetPointers: pointers,
|
||||||
|
parameterSetSizes: sizes,
|
||||||
|
nalUnitHeaderLength: nalUnitHeaderLength,
|
||||||
|
extensions: nil,
|
||||||
|
formatDescriptionOut: formatDescriptionOut
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension HEVCDecoderConfigurationRecord: DataConvertible {
|
||||||
|
// MARK: DataConvertible
|
||||||
|
var data: Data {
|
||||||
|
get {
|
||||||
|
let buffer = ByteArray()
|
||||||
|
.writeUInt8(configurationVersion)
|
||||||
|
return buffer.data
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
let buffer = ByteArray(data: newValue)
|
||||||
|
do {
|
||||||
|
configurationVersion = try buffer.readUInt8()
|
||||||
|
let a = try buffer.readUInt8()
|
||||||
|
generalProfileSpace = a >> 6
|
||||||
|
generalTierFlag = a & 0x20 > 0
|
||||||
|
generalProfileIdc = a & 0x1F
|
||||||
|
generalProfileCompatibilityFlags = try buffer.readUInt32()
|
||||||
|
generalConstraintIndicatorFlags = UInt64(try buffer.readUInt32()) << 16 | UInt64(try buffer.readUInt16())
|
||||||
|
generalLevelIdc = try buffer.readUInt8()
|
||||||
|
minSpatialSegmentationIdc = try buffer.readUInt16() & 0xFFF
|
||||||
|
parallelismType = try buffer.readUInt8() & 0x3
|
||||||
|
chromaFormat = try buffer.readUInt8() & 0x3
|
||||||
|
bitDepthLumaMinus8 = try buffer.readUInt8() & 0x7
|
||||||
|
bitDepthChromaMinus8 = try buffer.readUInt8() & 0x7
|
||||||
|
avgFrameRate = try buffer.readUInt16()
|
||||||
|
let b = try buffer.readUInt8()
|
||||||
|
constantFrameRate = b >> 6
|
||||||
|
numTemporalLayers = b & 0x38 >> 3
|
||||||
|
temporalIdNested = b & 0x6 >> 1
|
||||||
|
lengthSizeMinusOne = b & 0x3
|
||||||
|
numberOfArrays = try buffer.readUInt8()
|
||||||
|
for _ in 0..<numberOfArrays {
|
||||||
|
let a = try buffer.readUInt8()
|
||||||
|
let nalUnitType = HEVCNALUnitType(rawValue: a & 0b00111111) ?? .unspec
|
||||||
|
array[nalUnitType] = []
|
||||||
|
let numNalus = try buffer.readUInt16()
|
||||||
|
for _ in 0..<numNalus {
|
||||||
|
let length = try buffer.readUInt16()
|
||||||
|
array[nalUnitType]?.append(try buffer.readBytes(Int(length)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
logger.error("\(buffer)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension HEVCDecoderConfigurationRecord: CustomDebugStringConvertible {
|
||||||
|
// MARK: CustomDebugStringConvertible
|
||||||
|
var debugDescription: String {
|
||||||
|
Mirror(reflecting: self).debugDescription
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
enum HEVCNALUnitType: UInt8 {
|
||||||
|
case unspec = 0
|
||||||
|
case vps = 32
|
||||||
|
case sps = 33
|
||||||
|
case pps = 34
|
||||||
|
}
|
|
@ -155,7 +155,7 @@ struct PacketizedElementaryStream: PESPacketHeader {
|
||||||
if let config: AudioSpecificConfig = config as? AudioSpecificConfig {
|
if let config: AudioSpecificConfig = config as? AudioSpecificConfig {
|
||||||
return PacketizedElementaryStream(bytes: bytes, count: count, presentationTimeStamp: presentationTimeStamp, decodeTimeStamp: decodeTimeStamp, timestamp: timestamp, config: config)
|
return PacketizedElementaryStream(bytes: bytes, count: count, presentationTimeStamp: presentationTimeStamp, decodeTimeStamp: decodeTimeStamp, timestamp: timestamp, config: config)
|
||||||
}
|
}
|
||||||
if let config: AVCConfigurationRecord = config as? AVCConfigurationRecord {
|
if let config: AVCDecoderConfigurationRecord = config as? AVCDecoderConfigurationRecord {
|
||||||
return PacketizedElementaryStream(bytes: bytes, count: count, presentationTimeStamp: presentationTimeStamp, decodeTimeStamp: decodeTimeStamp, timestamp: timestamp, config: randomAccessIndicator ? config : nil)
|
return PacketizedElementaryStream(bytes: bytes, count: count, presentationTimeStamp: presentationTimeStamp, decodeTimeStamp: decodeTimeStamp, timestamp: timestamp, config: randomAccessIndicator ? config : nil)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -231,11 +231,11 @@ struct PacketizedElementaryStream: PESPacketHeader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init?(bytes: UnsafePointer<UInt8>?, count: UInt32, presentationTimeStamp: CMTime, decodeTimeStamp: CMTime, timestamp: CMTime, config: AVCConfigurationRecord?) {
|
init?(bytes: UnsafePointer<UInt8>?, count: UInt32, presentationTimeStamp: CMTime, decodeTimeStamp: CMTime, timestamp: CMTime, config: AVCDecoderConfigurationRecord?) {
|
||||||
guard let bytes = bytes else {
|
guard let bytes = bytes else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if let config: AVCConfigurationRecord = config {
|
if let config: AVCDecoderConfigurationRecord = config {
|
||||||
data.append(contentsOf: [0x00, 0x00, 0x00, 0x01, 0x09, 0x10])
|
data.append(contentsOf: [0x00, 0x00, 0x00, 0x01, 0x09, 0x10])
|
||||||
data.append(contentsOf: [0x00, 0x00, 0x00, 0x01])
|
data.append(contentsOf: [0x00, 0x00, 0x00, 0x01])
|
||||||
data.append(contentsOf: config.sequenceParameterSets[0])
|
data.append(contentsOf: config.sequenceParameterSets[0])
|
||||||
|
|
|
@ -11,7 +11,7 @@ public protocol TSReaderDelegate: AnyObject {
|
||||||
/// The TSReader class represents read MPEG-2 transport stream data.
|
/// The TSReader class represents read MPEG-2 transport stream data.
|
||||||
public class TSReader {
|
public class TSReader {
|
||||||
/// Specifies the delegate object.
|
/// Specifies the delegate object.
|
||||||
public weak var delegate: TSReaderDelegate?
|
public weak var delegate: (any TSReaderDelegate)?
|
||||||
|
|
||||||
private var pat: TSProgramAssociation? {
|
private var pat: TSProgramAssociation? {
|
||||||
didSet {
|
didSet {
|
||||||
|
@ -38,7 +38,7 @@ public class TSReader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private var nalUnitReader = NALUnitReader()
|
private var nalUnitReader = AVCNALUnitReader()
|
||||||
private var programs: [UInt16: UInt16] = [:]
|
private var programs: [UInt16: UInt16] = [:]
|
||||||
private var esSpecData: [UInt16: ESSpecificData] = [:]
|
private var esSpecData: [UInt16: ESSpecificData] = [:]
|
||||||
private var formatDescriptions: [UInt16: CMFormatDescription] = [:]
|
private var formatDescriptions: [UInt16: CMFormatDescription] = [:]
|
||||||
|
|
|
@ -21,7 +21,7 @@ public class TSWriter: Running {
|
||||||
public static let defaultSegmentDuration: Double = 2
|
public static let defaultSegmentDuration: Double = 2
|
||||||
|
|
||||||
/// The delegate instance.
|
/// The delegate instance.
|
||||||
public weak var delegate: TSWriterDelegate?
|
public weak var delegate: (any TSWriterDelegate)?
|
||||||
/// This instance is running to process(true) or not(false).
|
/// This instance is running to process(true) or not(false).
|
||||||
public internal(set) var isRunning: Atomic<Bool> = .init(false)
|
public internal(set) var isRunning: Atomic<Bool> = .init(false)
|
||||||
/// The exptected medias = [.video, .audio].
|
/// The exptected medias = [.video, .audio].
|
||||||
|
@ -45,7 +45,7 @@ public class TSWriter: Running {
|
||||||
writeProgramIfNeeded()
|
writeProgramIfNeeded()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private var videoConfig: AVCConfigurationRecord? {
|
private var videoConfig: AVCDecoderConfigurationRecord? {
|
||||||
didSet {
|
didSet {
|
||||||
writeProgramIfNeeded()
|
writeProgramIfNeeded()
|
||||||
}
|
}
|
||||||
|
@ -244,7 +244,7 @@ extension TSWriter: VideoCodecDelegate {
|
||||||
public func videoCodec(_ codec: VideoCodec, didOutput formatDescription: CMFormatDescription?) {
|
public func videoCodec(_ codec: VideoCodec, didOutput formatDescription: CMFormatDescription?) {
|
||||||
guard
|
guard
|
||||||
let formatDescription,
|
let formatDescription,
|
||||||
let avcC = AVCConfigurationRecord.getData(formatDescription) else {
|
let avcC = AVCDecoderConfigurationRecord.getData(formatDescription) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var data = ESSpecificData()
|
var data = ESSpecificData()
|
||||||
|
@ -252,7 +252,7 @@ extension TSWriter: VideoCodecDelegate {
|
||||||
data.elementaryPID = TSWriter.defaultVideoPID
|
data.elementaryPID = TSWriter.defaultVideoPID
|
||||||
PMT.elementaryStreamSpecificData.append(data)
|
PMT.elementaryStreamSpecificData.append(data)
|
||||||
videoContinuityCounter = 0
|
videoContinuityCounter = 0
|
||||||
videoConfig = AVCConfigurationRecord(data: avcC)
|
videoConfig = AVCDecoderConfigurationRecord(data: avcC)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func videoCodec(_ codec: VideoCodec, didOutput sampleBuffer: CMSampleBuffer) {
|
public func videoCodec(_ codec: VideoCodec, didOutput sampleBuffer: CMSampleBuffer) {
|
||||||
|
|
|
@ -7,12 +7,12 @@ typealias DisplayLink = CADisplayLink
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
protocol ChoreographerDelegate: AnyObject {
|
protocol ChoreographerDelegate: AnyObject {
|
||||||
func choreographer(_ choreographer: Choreographer, didFrame duration: Double)
|
func choreographer(_ choreographer: any Choreographer, didFrame duration: Double)
|
||||||
}
|
}
|
||||||
|
|
||||||
protocol Choreographer: Running {
|
protocol Choreographer: Running {
|
||||||
var isPaused: Bool { get set }
|
var isPaused: Bool { get set }
|
||||||
var delegate: ChoreographerDelegate? { get set }
|
var delegate: (any ChoreographerDelegate)? { get set }
|
||||||
|
|
||||||
func clear()
|
func clear()
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ final class DisplayLinkChoreographer: NSObject, Choreographer {
|
||||||
displayLink?.isPaused = newValue
|
displayLink?.isPaused = newValue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
weak var delegate: ChoreographerDelegate?
|
weak var delegate: (any ChoreographerDelegate)?
|
||||||
var isRunning: Atomic<Bool> = .init(false)
|
var isRunning: Atomic<Bool> = .init(false)
|
||||||
private var duration: Double = DisplayLinkChoreographer.duration
|
private var duration: Double = DisplayLinkChoreographer.duration
|
||||||
private var displayLink: DisplayLink? {
|
private var displayLink: DisplayLink? {
|
||||||
|
|
|
@ -60,7 +60,7 @@ final class IOAudioUnit: NSObject, IOUnit {
|
||||||
if isFragmented(sampleBuffer), let sampleBuffer = makeSampleBuffer(sampleBuffer) {
|
if isFragmented(sampleBuffer), let sampleBuffer = makeSampleBuffer(sampleBuffer) {
|
||||||
appendSampleBuffer(sampleBuffer)
|
appendSampleBuffer(sampleBuffer)
|
||||||
}
|
}
|
||||||
mixer?.recorder.appendSampleBuffer(sampleBuffer, mediaType: .audio)
|
mixer?.recorder.appendSampleBuffer(sampleBuffer)
|
||||||
codec.appendSampleBuffer(sampleBuffer)
|
codec.appendSampleBuffer(sampleBuffer)
|
||||||
presentationTimeStamp = CMTimeAdd(presentationTimeStamp, CMTime(value: CMTimeValue(sampleBuffer.numSamples), timescale: presentationTimeStamp.timescale))
|
presentationTimeStamp = CMTimeAdd(presentationTimeStamp, CMTime(value: CMTimeValue(sampleBuffer.numSamples), timescale: presentationTimeStamp.timescale))
|
||||||
}
|
}
|
||||||
|
@ -86,53 +86,13 @@ final class IOAudioUnit: NSObject, IOUnit {
|
||||||
guard 0 < numSamples else {
|
guard 0 < numSamples else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
var status: OSStatus = noErr
|
return CMAudioSampleBufferUtil.makeSampleBuffer(buffer, numSamples: numSamples, presentationTimeStamp: presentationTimeStamp)
|
||||||
var sampleBuffer: CMSampleBuffer?
|
|
||||||
var timing = CMSampleTimingInfo(
|
|
||||||
duration: CMTime(value: 1, timescale: presentationTimeStamp.timescale),
|
|
||||||
presentationTimeStamp: presentationTimeStamp,
|
|
||||||
decodeTimeStamp: .invalid
|
|
||||||
)
|
|
||||||
status = CMSampleBufferCreate(
|
|
||||||
allocator: kCFAllocatorDefault,
|
|
||||||
dataBuffer: nil,
|
|
||||||
dataReady: true,
|
|
||||||
makeDataReadyCallback: nil,
|
|
||||||
refcon: nil,
|
|
||||||
formatDescription: buffer.formatDescription,
|
|
||||||
sampleCount: numSamples,
|
|
||||||
sampleTimingEntryCount: 1,
|
|
||||||
sampleTimingArray: &timing,
|
|
||||||
sampleSizeEntryCount: 0,
|
|
||||||
sampleSizeArray: nil,
|
|
||||||
sampleBufferOut: &sampleBuffer
|
|
||||||
)
|
|
||||||
guard
|
|
||||||
let sampleBuffer = sampleBuffer,
|
|
||||||
let formatDescription = sampleBuffer.formatDescription, status == noErr else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
guard let buffer = AVAudioPCMBuffer(pcmFormat: AVAudioFormat(cmAudioFormatDescription: formatDescription), frameCapacity: AVAudioFrameCount(numSamples)) else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
buffer.frameLength = buffer.frameCapacity
|
|
||||||
status = CMSampleBufferSetDataBufferFromAudioBufferList(
|
|
||||||
sampleBuffer,
|
|
||||||
blockBufferAllocator: kCFAllocatorDefault,
|
|
||||||
blockBufferMemoryAllocator: kCFAllocatorDefault,
|
|
||||||
flags: 0,
|
|
||||||
bufferList: buffer.audioBufferList
|
|
||||||
)
|
|
||||||
guard status == noErr else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return sampleBuffer
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension IOAudioUnit: IOUnitEncoding {
|
extension IOAudioUnit: IOUnitEncoding {
|
||||||
// MARK: IOUnitEncoding
|
// MARK: IOUnitEncoding
|
||||||
func startEncoding(_ delegate: AVCodecDelegate) {
|
func startEncoding(_ delegate: any AVCodecDelegate) {
|
||||||
codec.delegate = delegate
|
codec.delegate = delegate
|
||||||
codec.startRunning()
|
codec.startRunning()
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,8 +95,8 @@ public class IOVideoCaptureUnit: IOCaptureUnit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if os(iOS)
|
||||||
/// Specifies the preferredVideoStabilizationMode most appropriate for use with the connection.
|
/// Specifies the preferredVideoStabilizationMode most appropriate for use with the connection.
|
||||||
@available(macOS, unavailable)
|
|
||||||
public var preferredVideoStabilizationMode: AVCaptureVideoStabilizationMode = .off {
|
public var preferredVideoStabilizationMode: AVCaptureVideoStabilizationMode = .off {
|
||||||
didSet {
|
didSet {
|
||||||
output?.connections.filter { $0.isVideoStabilizationSupported }.forEach {
|
output?.connections.filter { $0.isVideoStabilizationSupported }.forEach {
|
||||||
|
@ -104,6 +104,7 @@ public class IOVideoCaptureUnit: IOCaptureUnit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
func attachDevice(_ device: AVCaptureDevice?, videoUnit: IOVideoUnit) throws {
|
func attachDevice(_ device: AVCaptureDevice?, videoUnit: IOVideoUnit) throws {
|
||||||
setSampleBufferDelegate(nil)
|
setSampleBufferDelegate(nil)
|
||||||
|
|
|
@ -19,6 +19,7 @@ protocol IOMixerDelegate: AnyObject {
|
||||||
func mixer(_ mixer: IOMixer, sessionWasInterrupted session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason)
|
func mixer(_ mixer: IOMixer, sessionWasInterrupted session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason)
|
||||||
func mixer(_ mixer: IOMixer, sessionInterruptionEnded session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason)
|
func mixer(_ mixer: IOMixer, sessionInterruptionEnded session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason)
|
||||||
#endif
|
#endif
|
||||||
|
func mixerSessionWillResume(_ mixer: IOMixer)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An object that mixies audio and video for streaming.
|
/// An object that mixies audio and video for streaming.
|
||||||
|
@ -128,7 +129,7 @@ public class IOMixer {
|
||||||
public lazy var recorder = IORecorder()
|
public lazy var recorder = IORecorder()
|
||||||
|
|
||||||
/// Specifies the drawable object.
|
/// Specifies the drawable object.
|
||||||
public weak var drawable: NetStreamDrawable? {
|
public weak var drawable: (any NetStreamDrawable)? {
|
||||||
get {
|
get {
|
||||||
videoIO.drawable
|
videoIO.drawable
|
||||||
}
|
}
|
||||||
|
@ -139,7 +140,7 @@ public class IOMixer {
|
||||||
|
|
||||||
var mediaSync = MediaSync.passthrough
|
var mediaSync = MediaSync.passthrough
|
||||||
|
|
||||||
weak var delegate: IOMixerDelegate?
|
weak var delegate: (any IOMixerDelegate)?
|
||||||
|
|
||||||
lazy var audioIO: IOAudioUnit = {
|
lazy var audioIO: IOAudioUnit = {
|
||||||
var audioIO = IOAudioUnit()
|
var audioIO = IOAudioUnit()
|
||||||
|
@ -237,7 +238,7 @@ public class IOMixer {
|
||||||
|
|
||||||
extension IOMixer: IOUnitEncoding {
|
extension IOMixer: IOUnitEncoding {
|
||||||
/// Starts encoding for video and audio data.
|
/// Starts encoding for video and audio data.
|
||||||
public func startEncoding(_ delegate: AVCodecDelegate) {
|
public func startEncoding(_ delegate: any AVCodecDelegate) {
|
||||||
guard readyState == .standby else {
|
guard readyState == .standby else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -286,7 +287,7 @@ extension IOMixer: IOUnitDecoding {
|
||||||
extension IOMixer: MediaLinkDelegate {
|
extension IOMixer: MediaLinkDelegate {
|
||||||
// MARK: MediaLinkDelegate
|
// MARK: MediaLinkDelegate
|
||||||
func mediaLink(_ mediaLink: MediaLink, dequeue sampleBuffer: CMSampleBuffer) {
|
func mediaLink(_ mediaLink: MediaLink, dequeue sampleBuffer: CMSampleBuffer) {
|
||||||
videoIO.codec.appendSampleBuffer(sampleBuffer)
|
drawable?.enqueue(sampleBuffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
func mediaLink(_ mediaLink: MediaLink, didBufferingChanged: Bool) {
|
func mediaLink(_ mediaLink: MediaLink, didBufferingChanged: Bool) {
|
||||||
|
@ -323,6 +324,11 @@ extension IOMixer: Running {
|
||||||
isRunning.mutate { $0 = session.isRunning }
|
isRunning.mutate { $0 = session.isRunning }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func startCaptureSession() {
|
||||||
|
session.startRunning()
|
||||||
|
isRunning.mutate { $0 = session.isRunning }
|
||||||
|
}
|
||||||
|
|
||||||
private func addSessionObservers(_ session: AVCaptureSession) {
|
private func addSessionObservers(_ session: AVCaptureSession) {
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(sessionRuntimeError(_:)), name: .AVCaptureSessionRuntimeError, object: session)
|
NotificationCenter.default.addObserver(self, selector: #selector(sessionRuntimeError(_:)), name: .AVCaptureSessionRuntimeError, object: session)
|
||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
|
@ -438,8 +444,7 @@ extension IOMixer: Running {
|
||||||
guard isRunning.value && !session.isRunning else {
|
guard isRunning.value && !session.isRunning else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
session.startRunning()
|
delegate?.mixerSessionWillResume(self)
|
||||||
isRunning.mutate { $0 = session.isRunning }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -449,5 +454,8 @@ extension IOMixer: Running {
|
||||||
|
|
||||||
public func stopRunning() {
|
public func stopRunning() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func startCaptureSession() {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -38,7 +38,7 @@ public class IORecorder {
|
||||||
]
|
]
|
||||||
|
|
||||||
/// Specifies the delegate.
|
/// Specifies the delegate.
|
||||||
public weak var delegate: IORecorderDelegate?
|
public weak var delegate: (any IORecorderDelegate)?
|
||||||
/// Specifies the recorder settings.
|
/// Specifies the recorder settings.
|
||||||
public var outputSettings: [AVMediaType: [String: Any]] = IORecorder.defaultOutputSettings
|
public var outputSettings: [AVMediaType: [String: Any]] = IORecorder.defaultOutputSettings
|
||||||
/// The running indicies whether recording or not.
|
/// The running indicies whether recording or not.
|
||||||
|
@ -54,8 +54,9 @@ public class IORecorder {
|
||||||
private var writer: AVAssetWriter?
|
private var writer: AVAssetWriter?
|
||||||
private var writerInputs: [AVMediaType: AVAssetWriterInput] = [:]
|
private var writerInputs: [AVMediaType: AVAssetWriterInput] = [:]
|
||||||
private var pixelBufferAdaptor: AVAssetWriterInputPixelBufferAdaptor?
|
private var pixelBufferAdaptor: AVAssetWriterInputPixelBufferAdaptor?
|
||||||
private var audioPresentationTime = CMTime.zero
|
private var audioPresentationTime: CMTime = .zero
|
||||||
private var videoPresentationTime = CMTime.zero
|
private var videoPresentationTime: CMTime = .zero
|
||||||
|
private var dimensions: CMVideoDimensions = .init(width: 0, height: 0)
|
||||||
|
|
||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
private lazy var moviesDirectory: URL = {
|
private lazy var moviesDirectory: URL = {
|
||||||
|
@ -68,7 +69,11 @@ public class IORecorder {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// Append a sample buffer for recording.
|
/// Append a sample buffer for recording.
|
||||||
public func appendSampleBuffer(_ sampleBuffer: CMSampleBuffer, mediaType: AVMediaType) {
|
public func appendSampleBuffer(_ sampleBuffer: CMSampleBuffer) {
|
||||||
|
guard isRunning.value else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let mediaType: AVMediaType = (sampleBuffer.formatDescription?._mediaType == kCMMediaType_Video) ? .video : .audio
|
||||||
lockQueue.async {
|
lockQueue.async {
|
||||||
guard
|
guard
|
||||||
let writer = self.writer,
|
let writer = self.writer,
|
||||||
|
@ -108,10 +113,16 @@ public class IORecorder {
|
||||||
|
|
||||||
/// Append a pixel buffer for recording.
|
/// Append a pixel buffer for recording.
|
||||||
public func appendPixelBuffer(_ pixelBuffer: CVPixelBuffer, withPresentationTime: CMTime) {
|
public func appendPixelBuffer(_ pixelBuffer: CVPixelBuffer, withPresentationTime: CMTime) {
|
||||||
|
guard isRunning.value else {
|
||||||
|
return
|
||||||
|
}
|
||||||
lockQueue.async {
|
lockQueue.async {
|
||||||
|
if self.dimensions.width != pixelBuffer.width || self.dimensions.height != pixelBuffer.height {
|
||||||
|
self.dimensions = .init(width: Int32(pixelBuffer.width), height: Int32(pixelBuffer.height))
|
||||||
|
}
|
||||||
guard
|
guard
|
||||||
let writer = self.writer,
|
let writer = self.writer,
|
||||||
let input = self.makeWriterInput(.video, sourceFormatHint: CMVideoFormatDescription.create(pixelBuffer: pixelBuffer)),
|
let input = self.makeWriterInput(.video, sourceFormatHint: nil),
|
||||||
let adaptor = self.makePixelBufferAdaptor(input),
|
let adaptor = self.makePixelBufferAdaptor(input),
|
||||||
self.isReadyForStartWriting && self.videoPresentationTime.seconds < withPresentationTime.seconds else {
|
self.isReadyForStartWriting && self.videoPresentationTime.seconds < withPresentationTime.seconds else {
|
||||||
return
|
return
|
||||||
|
@ -180,15 +191,12 @@ public class IORecorder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case .video:
|
case .video:
|
||||||
guard let format = sourceFormatHint else {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
for (key, value) in defaultOutputSettings {
|
for (key, value) in defaultOutputSettings {
|
||||||
switch key {
|
switch key {
|
||||||
case AVVideoHeightKey:
|
case AVVideoHeightKey:
|
||||||
outputSettings[key] = AnyUtil.isZero(value) ? Int(format.dimensions.height) : value
|
outputSettings[key] = AnyUtil.isZero(value) ? Int(dimensions.height) : value
|
||||||
case AVVideoWidthKey:
|
case AVVideoWidthKey:
|
||||||
outputSettings[key] = AnyUtil.isZero(value) ? Int(format.dimensions.width) : value
|
outputSettings[key] = AnyUtil.isZero(value) ? Int(dimensions.width) : value
|
||||||
default:
|
default:
|
||||||
outputSettings[key] = value
|
outputSettings[key] = value
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import Foundation
|
||||||
/// The interface a capture session uses to inform its delegate.
|
/// The interface a capture session uses to inform its delegate.
|
||||||
public protocol IOScreenCaptureUnitDelegate: AnyObject {
|
public protocol IOScreenCaptureUnitDelegate: AnyObject {
|
||||||
/// Tells the receiver to output a pixel buffer.
|
/// Tells the receiver to output a pixel buffer.
|
||||||
func session(_ session: IOScreenCaptureUnit, didOutput pixelBuffer: CVPixelBuffer, presentationTime: CMTime)
|
func session(_ session: any IOScreenCaptureUnit, didOutput pixelBuffer: CVPixelBuffer, presentationTime: CMTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The interface that provides methods to screen capture.
|
/// The interface that provides methods to screen capture.
|
||||||
|
@ -12,5 +12,5 @@ public protocol IOScreenCaptureUnit: Running {
|
||||||
/// Specifies the CVPixelBufferPool's attributes.
|
/// Specifies the CVPixelBufferPool's attributes.
|
||||||
var attributes: [NSString: NSObject] { get }
|
var attributes: [NSString: NSObject] { get }
|
||||||
/// Specifies the delegate.
|
/// Specifies the delegate.
|
||||||
var delegate: IOScreenCaptureUnitDelegate? { get set }
|
var delegate: (any IOScreenCaptureUnitDelegate)? { get set }
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ public class IOUIScreenCaptureUnit: NSObject, IOScreenCaptureUnit {
|
||||||
attributes[kCVPixelBufferBytesPerRowAlignmentKey] = NSNumber(value: Float(size.width * scale * 4))
|
attributes[kCVPixelBufferBytesPerRowAlignmentKey] = NSNumber(value: Float(size.width * scale * 4))
|
||||||
return attributes
|
return attributes
|
||||||
}
|
}
|
||||||
public weak var delegate: IOScreenCaptureUnitDelegate?
|
public weak var delegate: (any IOScreenCaptureUnitDelegate)?
|
||||||
public private(set) var isRunning: Atomic<Bool> = .init(false)
|
public private(set) var isRunning: Atomic<Bool> = .init(false)
|
||||||
|
|
||||||
private var shared: UIApplication?
|
private var shared: UIApplication?
|
||||||
|
|
|
@ -12,7 +12,7 @@ protocol IOUnit {
|
||||||
}
|
}
|
||||||
|
|
||||||
protocol IOUnitEncoding {
|
protocol IOUnitEncoding {
|
||||||
func startEncoding(_ delegate: AVCodecDelegate)
|
func startEncoding(_ delegate: any AVCodecDelegate)
|
||||||
func stopEncoding()
|
func stopEncoding()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ final class IOVideoUnit: NSObject, IOUnit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
weak var drawable: NetStreamDrawable? {
|
weak var drawable: (any NetStreamDrawable)? {
|
||||||
didSet {
|
didSet {
|
||||||
#if os(iOS) || os(macOS)
|
#if os(iOS) || os(macOS)
|
||||||
drawable?.videoOrientation = videoOrientation
|
drawable?.videoOrientation = videoOrientation
|
||||||
|
@ -132,6 +132,17 @@ final class IOVideoUnit: NSObject, IOUnit {
|
||||||
guard let mixer, self.capture.device != device else {
|
guard let mixer, self.capture.device != device else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
guard let device else {
|
||||||
|
mixer.mediaSync = .passthrough
|
||||||
|
mixer.session.beginConfiguration()
|
||||||
|
defer {
|
||||||
|
mixer.session.commitConfiguration()
|
||||||
|
}
|
||||||
|
capture.detachSession(mixer.session)
|
||||||
|
try capture.attachDevice(nil, videoUnit: self)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
mixer.mediaSync = .video
|
||||||
mixer.session.beginConfiguration()
|
mixer.session.beginConfiguration()
|
||||||
defer {
|
defer {
|
||||||
mixer.session.commitConfiguration()
|
mixer.session.commitConfiguration()
|
||||||
|
@ -139,11 +150,6 @@ final class IOVideoUnit: NSObject, IOUnit {
|
||||||
setTorchMode(.on)
|
setTorchMode(.on)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
guard let device else {
|
|
||||||
mixer.mediaSync = .passthrough
|
|
||||||
return
|
|
||||||
}
|
|
||||||
mixer.mediaSync = .video
|
|
||||||
if multiCamCapture.device == device {
|
if multiCamCapture.device == device {
|
||||||
try multiCamCapture.attachDevice(nil, videoUnit: self)
|
try multiCamCapture.attachDevice(nil, videoUnit: self)
|
||||||
}
|
}
|
||||||
|
@ -288,7 +294,7 @@ final class IOVideoUnit: NSObject, IOUnit {
|
||||||
|
|
||||||
extension IOVideoUnit: IOUnitEncoding {
|
extension IOVideoUnit: IOUnitEncoding {
|
||||||
// MARK: IOUnitEncoding
|
// MARK: IOUnitEncoding
|
||||||
func startEncoding(_ delegate: AVCodecDelegate) {
|
func startEncoding(_ delegate: any AVCodecDelegate) {
|
||||||
codec.delegate = delegate
|
codec.delegate = delegate
|
||||||
codec.startRunning()
|
codec.startRunning()
|
||||||
}
|
}
|
||||||
|
@ -336,7 +342,7 @@ extension IOVideoUnit: VideoCodecDelegate {
|
||||||
}
|
}
|
||||||
|
|
||||||
func videoCodec(_ codec: VideoCodec, didOutput sampleBuffer: CMSampleBuffer) {
|
func videoCodec(_ codec: VideoCodec, didOutput sampleBuffer: CMSampleBuffer) {
|
||||||
drawable?.enqueue(sampleBuffer)
|
mixer?.mediaLink.enqueueVideo(sampleBuffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
func videoCodec(_ codec: VideoCodec, errorOccurred error: VideoCodec.Error) {
|
func videoCodec(_ codec: VideoCodec, errorOccurred error: VideoCodec.Error) {
|
||||||
|
|
|
@ -20,7 +20,7 @@ public class MTHKView: MTKView {
|
||||||
private var currentSampleBuffer: CMSampleBuffer?
|
private var currentSampleBuffer: CMSampleBuffer?
|
||||||
private let colorSpace: CGColorSpace = CGColorSpaceCreateDeviceRGB()
|
private let colorSpace: CGColorSpace = CGColorSpaceCreateDeviceRGB()
|
||||||
|
|
||||||
private lazy var commandQueue: MTLCommandQueue? = {
|
private lazy var commandQueue: (any MTLCommandQueue)? = {
|
||||||
return device?.makeCommandQueue()
|
return device?.makeCommandQueue()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
|
@ -32,10 +32,9 @@ final class MediaLink {
|
||||||
}
|
}
|
||||||
var hasVideo = false
|
var hasVideo = false
|
||||||
var bufferTime = MediaLink.bufferTime
|
var bufferTime = MediaLink.bufferTime
|
||||||
weak var delegate: MediaLinkDelegate?
|
weak var delegate: (any MediaLinkDelegate)?
|
||||||
private(set) lazy var playerNode = AVAudioPlayerNode()
|
private(set) lazy var playerNode = AVAudioPlayerNode()
|
||||||
private(set) var isRunning: Atomic<Bool> = .init(false)
|
private(set) var isRunning: Atomic<Bool> = .init(false)
|
||||||
private var buffer: RingBuffer<CMSampleBuffer> = .init(256)
|
|
||||||
private var isBuffering = true {
|
private var isBuffering = true {
|
||||||
didSet {
|
didSet {
|
||||||
if !isBuffering {
|
if !isBuffering {
|
||||||
|
@ -46,14 +45,15 @@ final class MediaLink {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private var bufferingTime = MediaLink.bufferingTime
|
private var bufferingTime = MediaLink.bufferingTime
|
||||||
private lazy var choreographer: Choreographer = {
|
private lazy var choreographer: any Choreographer = {
|
||||||
var choreographer = DisplayLinkChoreographer()
|
var choreographer = DisplayLinkChoreographer()
|
||||||
choreographer.delegate = self
|
choreographer.delegate = self
|
||||||
return choreographer
|
return choreographer
|
||||||
}()
|
}()
|
||||||
|
private let lockQueue = DispatchQueue(label: "com.haishinkit.HaishinKit.DisplayLinkedQueue.lock")
|
||||||
|
private var bufferQueue: CMBufferQueue?
|
||||||
private var scheduledAudioBuffers: Atomic<Int> = .init(0)
|
private var scheduledAudioBuffers: Atomic<Int> = .init(0)
|
||||||
private var presentationTimeStampOrigin: CMTime = .invalid
|
private var presentationTimeStampOrigin: CMTime = .invalid
|
||||||
private let lockQueue = DispatchQueue(label: "com.haishinkit.HaishinKit.DisplayLinkedQueue.lock")
|
|
||||||
|
|
||||||
func enqueueVideo(_ buffer: CMSampleBuffer) {
|
func enqueueVideo(_ buffer: CMSampleBuffer) {
|
||||||
guard buffer.presentationTimeStamp != .invalid else {
|
guard buffer.presentationTimeStamp != .invalid else {
|
||||||
|
@ -66,7 +66,9 @@ final class MediaLink {
|
||||||
delegate?.mediaLink(self, dequeue: buffer)
|
delegate?.mediaLink(self, dequeue: buffer)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_ = self.buffer.append(buffer)
|
if let bufferQueue {
|
||||||
|
CMBufferQueueEnqueue(bufferQueue, buffer: buffer)
|
||||||
|
}
|
||||||
if isBuffering {
|
if isBuffering {
|
||||||
bufferingTime += buffer.duration.seconds
|
bufferingTime += buffer.duration.seconds
|
||||||
if bufferTime <= bufferingTime {
|
if bufferTime <= bufferingTime {
|
||||||
|
@ -106,21 +108,34 @@ final class MediaLink {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func makeBufferkQueue() {
|
||||||
|
CMBufferQueueCreate(
|
||||||
|
allocator: kCFAllocatorDefault,
|
||||||
|
capacity: 256,
|
||||||
|
callbacks: CMBufferQueueGetCallbacksForSampleBuffersSortedByOutputPTS(),
|
||||||
|
queueOut: &bufferQueue
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension MediaLink: ChoreographerDelegate {
|
extension MediaLink: ChoreographerDelegate {
|
||||||
// MARK: ChoreographerDelegate
|
// MARK: ChoreographerDelegate
|
||||||
func choreographer(_ choreographer: Choreographer, didFrame duration: Double) {
|
func choreographer(_ choreographer: any Choreographer, didFrame duration: Double) {
|
||||||
|
guard let bufferQueue else {
|
||||||
|
return
|
||||||
|
}
|
||||||
let duration = self.duration(duration)
|
let duration = self.duration(duration)
|
||||||
var frameCount = 0
|
var frameCount = 0
|
||||||
while !buffer.isEmpty {
|
while !CMBufferQueueIsEmpty(bufferQueue) {
|
||||||
guard let first = buffer.first else {
|
guard let head = CMBufferQueueGetHead(bufferQueue) else {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
let first = head as! CMSampleBuffer
|
||||||
if first.presentationTimeStamp.seconds - presentationTimeStampOrigin.seconds <= duration {
|
if first.presentationTimeStamp.seconds - presentationTimeStampOrigin.seconds <= duration {
|
||||||
delegate?.mediaLink(self, dequeue: first)
|
delegate?.mediaLink(self, dequeue: first)
|
||||||
frameCount += 1
|
frameCount += 1
|
||||||
buffer.removeFirst()
|
CMBufferQueueDequeue(bufferQueue)
|
||||||
} else {
|
} else {
|
||||||
if 2 < frameCount {
|
if 2 < frameCount {
|
||||||
logger.info("droppedFrame: \(frameCount)")
|
logger.info("droppedFrame: \(frameCount)")
|
||||||
|
@ -143,6 +158,7 @@ extension MediaLink: Running {
|
||||||
self.bufferingTime = Self.bufferingTime
|
self.bufferingTime = Self.bufferingTime
|
||||||
self.isBuffering = true
|
self.isBuffering = true
|
||||||
self.choreographer.startRunning()
|
self.choreographer.startRunning()
|
||||||
|
self.makeBufferkQueue()
|
||||||
self.isRunning.mutate { $0 = true }
|
self.isRunning.mutate { $0 = true }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -153,7 +169,7 @@ extension MediaLink: Running {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
self.choreographer.stopRunning()
|
self.choreographer.stopRunning()
|
||||||
self.buffer.removeAll()
|
self.bufferQueue = nil
|
||||||
self.scheduledAudioBuffers.mutate { $0 = 0 }
|
self.scheduledAudioBuffers.mutate { $0 = 0 }
|
||||||
self.presentationTimeStampOrigin = .invalid
|
self.presentationTimeStampOrigin = .invalid
|
||||||
self.isRunning.mutate { $0 = false }
|
self.isRunning.mutate { $0 = false }
|
||||||
|
|
|
@ -14,7 +14,7 @@ protocol NetClientDelegate: AnyObject {
|
||||||
// MARK: -
|
// MARK: -
|
||||||
/// The NetClient class creates a two-way connection between a NetService.
|
/// The NetClient class creates a two-way connection between a NetService.
|
||||||
public final class NetClient: NetSocket {
|
public final class NetClient: NetSocket {
|
||||||
weak var delegate: NetClientDelegate?
|
weak var delegate: (any NetClientDelegate)?
|
||||||
|
|
||||||
init(inputStream: InputStream, outputStream: OutputStream) {
|
init(inputStream: InputStream, outputStream: OutputStream) {
|
||||||
super.init()
|
super.init()
|
||||||
|
|
|
@ -40,9 +40,13 @@ open class NetStream: NSObject {
|
||||||
private static let queueValue = UnsafeMutableRawPointer.allocate(byteCount: 1, alignment: 1)
|
private static let queueValue = UnsafeMutableRawPointer.allocate(byteCount: 1, alignment: 1)
|
||||||
|
|
||||||
/// The mixer object.
|
/// The mixer object.
|
||||||
public private(set) var mixer = IOMixer()
|
public private(set) lazy var mixer: IOMixer = {
|
||||||
|
let mixer = IOMixer()
|
||||||
|
mixer.delegate = self
|
||||||
|
return mixer
|
||||||
|
}()
|
||||||
/// Specifies the delegate of the NetStream.
|
/// Specifies the delegate of the NetStream.
|
||||||
public weak var delegate: NetStreamDelegate?
|
public weak var delegate: (any NetStreamDelegate)?
|
||||||
|
|
||||||
/// Specifies the context object.
|
/// Specifies the context object.
|
||||||
public var context: CIContext {
|
public var context: CIContext {
|
||||||
|
@ -271,7 +275,7 @@ open class NetStream: NSObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Starts recording.
|
/// Starts recording.
|
||||||
public func startRecording(_ settings: [AVMediaType: [String: Any]]) {
|
public func startRecording(_ settings: [AVMediaType: [String: Any]] = IORecorder.defaultOutputSettings) {
|
||||||
mixer.recorder.outputSettings = settings
|
mixer.recorder.outputSettings = settings
|
||||||
mixer.recorder.startRunning()
|
mixer.recorder.startRunning()
|
||||||
}
|
}
|
||||||
|
@ -282,9 +286,36 @@ open class NetStream: NSObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension NetStream: IOMixerDelegate {
|
||||||
|
// MARK: IOMixerDelegate
|
||||||
|
func mixer(_ mixer: IOMixer, didOutput video: CMSampleBuffer) {
|
||||||
|
delegate?.stream(self, didOutput: video)
|
||||||
|
}
|
||||||
|
|
||||||
|
func mixer(_ mixer: IOMixer, didOutput audio: AVAudioPCMBuffer, presentationTimeStamp: CMTime) {
|
||||||
|
delegate?.stream(self, didOutput: audio, presentationTimeStamp: presentationTimeStamp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func mixerSessionWillResume(_ mixer: IOMixer) {
|
||||||
|
lockQueue.async {
|
||||||
|
mixer.startCaptureSession()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if os(iOS)
|
||||||
|
func mixer(_ mixer: IOMixer, sessionWasInterrupted session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason) {
|
||||||
|
delegate?.stream(self, sessionWasInterrupted: session, reason: reason)
|
||||||
|
}
|
||||||
|
|
||||||
|
func mixer(_ mixer: IOMixer, sessionInterruptionEnded session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason) {
|
||||||
|
delegate?.stream(self, sessionInterruptionEnded: session, reason: reason)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
extension NetStream: IOScreenCaptureUnitDelegate {
|
extension NetStream: IOScreenCaptureUnitDelegate {
|
||||||
// MARK: IOScreenCaptureUnitDelegate
|
// MARK: IOScreenCaptureUnitDelegate
|
||||||
public func session(_ session: IOScreenCaptureUnit, didOutput pixelBuffer: CVPixelBuffer, presentationTime: CMTime) {
|
public func session(_ session: any IOScreenCaptureUnit, didOutput pixelBuffer: CVPixelBuffer, presentationTime: CMTime) {
|
||||||
var timingInfo = CMSampleTimingInfo(
|
var timingInfo = CMSampleTimingInfo(
|
||||||
duration: .invalid,
|
duration: .invalid,
|
||||||
presentationTimeStamp: presentationTime,
|
presentationTimeStamp: presentationTime,
|
||||||
|
|
|
@ -40,6 +40,7 @@ final class RTMPChunk {
|
||||||
case command = 0x03
|
case command = 0x03
|
||||||
case audio = 0x04
|
case audio = 0x04
|
||||||
case video = 0x05
|
case video = 0x05
|
||||||
|
case data = 0x08
|
||||||
}
|
}
|
||||||
|
|
||||||
static let defaultSize: Int = 128
|
static let defaultSize: Int = 128
|
||||||
|
|
|
@ -214,7 +214,7 @@ open class RTMPConnection: EventDispatcher {
|
||||||
streams.count
|
streams.count
|
||||||
}
|
}
|
||||||
/// Specifies the delegate of the NetStream.
|
/// Specifies the delegate of the NetStream.
|
||||||
public weak var delegate: RTMPConnectionDelegate?
|
public weak var delegate: (any RTMPConnectionDelegate)?
|
||||||
/// The statistics of outgoing queue bytes per second.
|
/// The statistics of outgoing queue bytes per second.
|
||||||
@objc open private(set) dynamic var previousQueueBytesOut: [Int64] = []
|
@objc open private(set) dynamic var previousQueueBytesOut: [Int64] = []
|
||||||
/// The statistics of incoming bytes per second.
|
/// The statistics of incoming bytes per second.
|
||||||
|
@ -222,7 +222,7 @@ open class RTMPConnection: EventDispatcher {
|
||||||
/// The statistics of outgoing bytes per second.
|
/// The statistics of outgoing bytes per second.
|
||||||
@objc open private(set) dynamic var currentBytesOutPerSecond: Int32 = 0
|
@objc open private(set) dynamic var currentBytesOutPerSecond: Int32 = 0
|
||||||
|
|
||||||
var socket: RTMPSocketCompatible!
|
var socket: (any RTMPSocketCompatible)!
|
||||||
var streams: [RTMPStream] = []
|
var streams: [RTMPStream] = []
|
||||||
var sequence: Int64 = 0
|
var sequence: Int64 = 0
|
||||||
var bandWidth: UInt32 = 0
|
var bandWidth: UInt32 = 0
|
||||||
|
@ -483,7 +483,7 @@ open class RTMPConnection: EventDispatcher {
|
||||||
|
|
||||||
extension RTMPConnection: RTMPSocketDelegate {
|
extension RTMPConnection: RTMPSocketDelegate {
|
||||||
// MARK: RTMPSocketDelegate
|
// MARK: RTMPSocketDelegate
|
||||||
func socket(_ socket: RTMPSocketCompatible, readyState: RTMPSocketReadyState) {
|
func socket(_ socket: any RTMPSocketCompatible, readyState: RTMPSocketReadyState) {
|
||||||
if logger.isEnabledFor(level: .debug) {
|
if logger.isEnabledFor(level: .debug) {
|
||||||
logger.debug(readyState)
|
logger.debug(readyState)
|
||||||
}
|
}
|
||||||
|
@ -509,7 +509,7 @@ extension RTMPConnection: RTMPSocketDelegate {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func socket(_ socket: RTMPSocketCompatible, totalBytesIn: Int64) {
|
func socket(_ socket: any RTMPSocketCompatible, totalBytesIn: Int64) {
|
||||||
guard windowSizeS * (sequence + 1) <= totalBytesIn else {
|
guard windowSizeS * (sequence + 1) <= totalBytesIn else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -521,7 +521,7 @@ extension RTMPConnection: RTMPSocketDelegate {
|
||||||
sequence += 1
|
sequence += 1
|
||||||
}
|
}
|
||||||
|
|
||||||
func socket(_ socket: RTMPSocketCompatible, data: Data) {
|
func socket(_ socket: any RTMPSocketCompatible, data: Data) {
|
||||||
guard let chunk = currentChunk ?? RTMPChunk(data, size: socket.chunkSizeC) else {
|
guard let chunk = currentChunk ?? RTMPChunk(data, size: socket.chunkSizeC) else {
|
||||||
socket.inputBuffer.append(data)
|
socket.inputBuffer.append(data)
|
||||||
return
|
return
|
||||||
|
|
|
@ -314,7 +314,7 @@ final class RTMPCommandMessage: RTMPMessage {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private var serializer: AMFSerializer = AMF0Serializer()
|
private var serializer: any AMFSerializer = AMF0Serializer()
|
||||||
|
|
||||||
init(objectEncoding: RTMPObjectEncoding) {
|
init(objectEncoding: RTMPObjectEncoding) {
|
||||||
self.objectEncoding = objectEncoding
|
self.objectEncoding = objectEncoding
|
||||||
|
@ -362,7 +362,7 @@ final class RTMPDataMessage: RTMPMessage {
|
||||||
var handlerName: String = ""
|
var handlerName: String = ""
|
||||||
var arguments: [Any?] = []
|
var arguments: [Any?] = []
|
||||||
|
|
||||||
private var serializer: AMFSerializer = AMF0Serializer()
|
private var serializer: any AMFSerializer = AMF0Serializer()
|
||||||
|
|
||||||
override var payload: Data {
|
override var payload: Data {
|
||||||
get {
|
get {
|
||||||
|
@ -413,11 +413,12 @@ final class RTMPDataMessage: RTMPMessage {
|
||||||
super.init(type: objectEncoding.dataType)
|
super.init(type: objectEncoding.dataType)
|
||||||
}
|
}
|
||||||
|
|
||||||
init(streamId: UInt32, objectEncoding: RTMPObjectEncoding, handlerName: String, arguments: [Any?] = []) {
|
init(streamId: UInt32, objectEncoding: RTMPObjectEncoding, timestamp: UInt32, handlerName: String, arguments: [Any?] = []) {
|
||||||
self.objectEncoding = objectEncoding
|
self.objectEncoding = objectEncoding
|
||||||
self.handlerName = handlerName
|
self.handlerName = handlerName
|
||||||
self.arguments = arguments
|
self.arguments = arguments
|
||||||
super.init(type: objectEncoding.dataType)
|
super.init(type: objectEncoding.dataType)
|
||||||
|
self.timestamp = timestamp
|
||||||
self.streamId = streamId
|
self.streamId = streamId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -493,7 +494,7 @@ final class RTMPSharedObjectMessage: RTMPMessage {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private var serializer: AMFSerializer = AMF0Serializer()
|
private var serializer: any AMFSerializer = AMF0Serializer()
|
||||||
|
|
||||||
init(objectEncoding: RTMPObjectEncoding) {
|
init(objectEncoding: RTMPObjectEncoding) {
|
||||||
self.objectEncoding = objectEncoding
|
self.objectEncoding = objectEncoding
|
||||||
|
@ -582,12 +583,12 @@ final class RTMPAudioMessage: RTMPMessage {
|
||||||
default:
|
default:
|
||||||
stream.audioTimestamp += Double(timestamp)
|
stream.audioTimestamp += Double(timestamp)
|
||||||
}
|
}
|
||||||
switch FLVAACPacketType(rawValue: payload[1]) {
|
switch payload[1] {
|
||||||
case .seq?:
|
case FLVAACPacketType.seq.rawValue:
|
||||||
let config = AudioSpecificConfig(bytes: [UInt8](payload[codec.headerSize..<payload.count]))
|
let config = AudioSpecificConfig(bytes: [UInt8](payload[codec.headerSize..<payload.count]))
|
||||||
stream.mixer.audioIO.codec.settings.format = .pcm
|
stream.mixer.audioIO.codec.settings.format = .pcm
|
||||||
stream.mixer.audioIO.codec.inSourceFormat = config?.audioStreamBasicDescription()
|
stream.mixer.audioIO.codec.inSourceFormat = config?.audioStreamBasicDescription()
|
||||||
case .raw?:
|
case FLVAACPacketType.raw.rawValue:
|
||||||
if stream.mixer.audioIO.codec.inSourceFormat == nil {
|
if stream.mixer.audioIO.codec.inSourceFormat == nil {
|
||||||
stream.mixer.audioIO.codec.settings.format = .pcm
|
stream.mixer.audioIO.codec.settings.format = .pcm
|
||||||
stream.mixer.audioIO.codec.inSourceFormat = makeAudioStreamBasicDescription()
|
stream.mixer.audioIO.codec.inSourceFormat = makeAudioStreamBasicDescription()
|
||||||
|
@ -595,7 +596,7 @@ final class RTMPAudioMessage: RTMPMessage {
|
||||||
if let audioBuffer = makeAudioBuffer(stream) {
|
if let audioBuffer = makeAudioBuffer(stream) {
|
||||||
stream.mixer.audioIO.codec.appendAudioBuffer(audioBuffer, presentationTimeStamp: CMTime(seconds: stream.audioTimestamp / 1000, preferredTimescale: 1000))
|
stream.mixer.audioIO.codec.appendAudioBuffer(audioBuffer, presentationTimeStamp: CMTime(seconds: stream.audioTimestamp / 1000, preferredTimescale: 1000))
|
||||||
}
|
}
|
||||||
case .none:
|
default:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -624,9 +625,6 @@ final class RTMPAudioMessage: RTMPMessage {
|
||||||
7.1.5. Video Message (9)
|
7.1.5. Video Message (9)
|
||||||
*/
|
*/
|
||||||
final class RTMPVideoMessage: RTMPMessage {
|
final class RTMPVideoMessage: RTMPMessage {
|
||||||
private(set) var codec: FLVVideoCodec = .unknown
|
|
||||||
private(set) var status: OSStatus = noErr
|
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
super.init(type: .video)
|
super.init(type: .video)
|
||||||
}
|
}
|
||||||
|
@ -646,28 +644,41 @@ final class RTMPVideoMessage: RTMPMessage {
|
||||||
guard FLVTagType.video.headerSize <= payload.count else {
|
guard FLVTagType.video.headerSize <= payload.count else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
switch payload[1] {
|
if (payload[0] & 0b10000000) == 0 {
|
||||||
case FLVAVCPacketType.seq.rawValue:
|
guard payload[0] & 0b01110000 >> 4 == FLVVideoCodec.avc.rawValue else {
|
||||||
status = makeFormatDescription(stream)
|
return
|
||||||
stream.mixer.mediaLink.hasVideo = true
|
|
||||||
stream.dispatch(.rtmpStatus, bubbles: false, data: RTMPStream.Code.videoDimensionChange.data(""))
|
|
||||||
case FLVAVCPacketType.nal.rawValue:
|
|
||||||
if let sampleBuffer = makeSampleBuffer(stream, type: type) {
|
|
||||||
sampleBuffer.isNotSync = !(payload[0] >> 4 == FLVFrameType.key.rawValue)
|
|
||||||
stream.mixer.mediaLink.enqueueVideo(sampleBuffer)
|
|
||||||
}
|
}
|
||||||
if stream.mixer.mediaLink.isPaused && stream.mixer.audioIO.codec.inSourceFormat == nil {
|
switch payload[1] {
|
||||||
stream.mixer.mediaLink.isPaused = false
|
case FLVAVCPacketType.seq.rawValue:
|
||||||
|
makeFormatDescription(stream, format: .h264)
|
||||||
|
case FLVAVCPacketType.nal.rawValue:
|
||||||
|
if let sampleBuffer = makeSampleBuffer(stream, type: type, offset: 0) {
|
||||||
|
stream.mixer.videoIO.codec.appendSampleBuffer(sampleBuffer)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// IsExHeader for Enhancing RTMP, FLV
|
||||||
|
guard payload[1] == 0x68 && payload[2] == 0x76 && payload[3] == 0x63 && payload[4] == 0x31 else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
switch payload[0] & 0b00001111 {
|
||||||
|
case FLVVideoPacketType.sequenceStart.rawValue:
|
||||||
|
makeFormatDescription(stream, format: .hevc)
|
||||||
|
case FLVVideoPacketType.codedFrames.rawValue:
|
||||||
|
if let sampleBuffer = makeSampleBuffer(stream, type: type, offset: 3) {
|
||||||
|
stream.mixer.videoIO.codec.appendSampleBuffer(sampleBuffer)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break
|
||||||
}
|
}
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func makeSampleBuffer(_ stream: RTMPStream, type: RTMPChunkType) -> CMSampleBuffer? {
|
private func makeSampleBuffer(_ stream: RTMPStream, type: RTMPChunkType, offset: Int = 0) -> CMSampleBuffer? {
|
||||||
let isBaseline = stream.mixer.videoIO.codec.isBaseline
|
|
||||||
// compositionTime -> SI24
|
// compositionTime -> SI24
|
||||||
var compositionTime = isBaseline ? 0 : Int32(data: [0] + payload[2..<5]).bigEndian
|
var compositionTime = Int32(data: [0] + payload[2 + offset..<5 + offset]).bigEndian
|
||||||
compositionTime <<= 8
|
compositionTime <<= 8
|
||||||
compositionTime /= 256
|
compositionTime /= 256
|
||||||
|
|
||||||
|
@ -686,10 +697,10 @@ final class RTMPVideoMessage: RTMPMessage {
|
||||||
var timing = CMSampleTimingInfo(
|
var timing = CMSampleTimingInfo(
|
||||||
duration: CMTimeMake(value: duration, timescale: 1000),
|
duration: CMTimeMake(value: duration, timescale: 1000),
|
||||||
presentationTimeStamp: CMTimeMake(value: Int64(stream.videoTimestamp) + Int64(compositionTime), timescale: 1000),
|
presentationTimeStamp: CMTimeMake(value: Int64(stream.videoTimestamp) + Int64(compositionTime), timescale: 1000),
|
||||||
decodeTimeStamp: .invalid
|
decodeTimeStamp: compositionTime == 0 ? .invalid : CMTimeMake(value: Int64(stream.videoTimestamp), timescale: 1000)
|
||||||
)
|
)
|
||||||
|
|
||||||
let blockBuffer = payload.makeBlockBuffer(advancedBy: FLVTagType.video.headerSize)
|
let blockBuffer = payload.makeBlockBuffer(advancedBy: FLVTagType.video.headerSize + offset)
|
||||||
var sampleBuffer: CMSampleBuffer?
|
var sampleBuffer: CMSampleBuffer?
|
||||||
var sampleSize = blockBuffer?.dataLength ?? 0
|
var sampleSize = blockBuffer?.dataLength ?? 0
|
||||||
guard CMSampleBufferCreate(
|
guard CMSampleBufferCreate(
|
||||||
|
@ -707,14 +718,26 @@ final class RTMPVideoMessage: RTMPMessage {
|
||||||
sampleBufferOut: &sampleBuffer) == noErr else {
|
sampleBufferOut: &sampleBuffer) == noErr else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
sampleBuffer?.isNotSync = !(payload[0] >> 4 & 0b0111 == FLVFrameType.key.rawValue)
|
||||||
return sampleBuffer
|
return sampleBuffer
|
||||||
}
|
}
|
||||||
|
|
||||||
private func makeFormatDescription(_ stream: RTMPStream) -> OSStatus {
|
private func makeFormatDescription(_ stream: RTMPStream, format: VideoCodecSettings.Format) {
|
||||||
var config = AVCConfigurationRecord()
|
var status = noErr
|
||||||
config.data = payload.subdata(in: FLVTagType.video.headerSize..<payload.count)
|
switch format {
|
||||||
return config.makeFormatDescription(&stream.mixer.videoIO.formatDescription)
|
case .h264:
|
||||||
|
var config = AVCDecoderConfigurationRecord()
|
||||||
|
config.data = payload.subdata(in: FLVTagType.video.headerSize..<payload.count)
|
||||||
|
status = config.makeFormatDescription(&stream.mixer.videoIO.formatDescription)
|
||||||
|
case .hevc:
|
||||||
|
var config = HEVCDecoderConfigurationRecord()
|
||||||
|
config.data = payload.subdata(in: FLVTagType.video.headerSize..<payload.count)
|
||||||
|
status = config.makeFormatDescription(&stream.mixer.videoIO.formatDescription)
|
||||||
|
}
|
||||||
|
if status == noErr {
|
||||||
|
stream.mixer.mediaLink.hasVideo = true
|
||||||
|
stream.dispatch(.rtmpStatus, bubbles: false, data: RTMPStream.Code.videoDimensionChange.data(""))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import AVFoundation
|
import AVFoundation
|
||||||
|
|
||||||
protocol RTMPMuxerDelegate: AnyObject {
|
protocol RTMPMuxerDelegate: AnyObject {
|
||||||
func muxer(_ muxer: RTMPMuxer, didSetMetadata: ASObject)
|
|
||||||
func muxer(_ muxer: RTMPMuxer, didOutputAudio buffer: Data, withTimestamp: Double)
|
func muxer(_ muxer: RTMPMuxer, didOutputAudio buffer: Data, withTimestamp: Double)
|
||||||
func muxer(_ muxer: RTMPMuxer, didOutputVideo buffer: Data, withTimestamp: Double)
|
func muxer(_ muxer: RTMPMuxer, didOutputVideo buffer: Data, withTimestamp: Double)
|
||||||
func muxer(_ muxer: RTMPMuxer, audioCodecErrorOccurred error: AudioCodec.Error)
|
func muxer(_ muxer: RTMPMuxer, audioCodecErrorOccurred error: AudioCodec.Error)
|
||||||
|
@ -13,13 +12,14 @@ protocol RTMPMuxerDelegate: AnyObject {
|
||||||
final class RTMPMuxer {
|
final class RTMPMuxer {
|
||||||
static let aac: UInt8 = FLVAudioCodec.aac.rawValue << 4 | FLVSoundRate.kHz44.rawValue << 2 | FLVSoundSize.snd16bit.rawValue << 1 | FLVSoundType.stereo.rawValue
|
static let aac: UInt8 = FLVAudioCodec.aac.rawValue << 4 | FLVSoundRate.kHz44.rawValue << 2 | FLVSoundSize.snd16bit.rawValue << 1 | FLVSoundType.stereo.rawValue
|
||||||
|
|
||||||
weak var delegate: RTMPMuxerDelegate?
|
weak var delegate: (any RTMPMuxerDelegate)?
|
||||||
private var audioTimeStamp = CMTime.zero
|
private var audioTimeStamp: CMTime = .zero
|
||||||
private var videoTimeStamp = CMTime.zero
|
private var videoTimeStamp: CMTime = .zero
|
||||||
|
private let compositiionTimeOffset: CMTime = .init(value: 3, timescale: 30)
|
||||||
|
|
||||||
func dispose() {
|
func dispose() {
|
||||||
audioTimeStamp = CMTime.zero
|
audioTimeStamp = .zero
|
||||||
videoTimeStamp = CMTime.zero
|
videoTimeStamp = .zero
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,38 +55,58 @@ extension RTMPMuxer: VideoCodecDelegate {
|
||||||
}
|
}
|
||||||
|
|
||||||
func videoCodec(_ codec: VideoCodec, didOutput formatDescription: CMFormatDescription?) {
|
func videoCodec(_ codec: VideoCodec, didOutput formatDescription: CMFormatDescription?) {
|
||||||
guard
|
guard let formatDescription else {
|
||||||
let formatDescription = formatDescription,
|
|
||||||
let avcC = AVCConfigurationRecord.getData(formatDescription) else {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var buffer = Data([FLVFrameType.key.rawValue << 4 | FLVVideoCodec.avc.rawValue, FLVAVCPacketType.seq.rawValue, 0, 0, 0])
|
switch codec.settings.format {
|
||||||
buffer.append(avcC)
|
case .h264:
|
||||||
delegate?.muxer(self, didOutputVideo: buffer, withTimestamp: 0)
|
guard let avcC = AVCDecoderConfigurationRecord.getData(formatDescription) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var buffer = Data([FLVFrameType.key.rawValue << 4 | FLVVideoCodec.avc.rawValue, FLVAVCPacketType.seq.rawValue, 0, 0, 0])
|
||||||
|
buffer.append(avcC)
|
||||||
|
delegate?.muxer(self, didOutputVideo: buffer, withTimestamp: 0)
|
||||||
|
case .hevc:
|
||||||
|
guard let hvcC = HEVCDecoderConfigurationRecord.getData(formatDescription) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var buffer = Data([0b10000000 | FLVFrameType.key.rawValue << 4 | FLVVideoPacketType.sequenceStart.rawValue, 0x68, 0x76, 0x63, 0x31])
|
||||||
|
buffer.append(hvcC)
|
||||||
|
delegate?.muxer(self, didOutputVideo: buffer, withTimestamp: 0)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func videoCodec(_ codec: VideoCodec, didOutput sampleBuffer: CMSampleBuffer) {
|
func videoCodec(_ codec: VideoCodec, didOutput sampleBuffer: CMSampleBuffer) {
|
||||||
let keyframe = !sampleBuffer.isNotSync
|
let keyframe = !sampleBuffer.isNotSync
|
||||||
var compositionTime: Int32 = 0
|
let decodeTimeStamp = sampleBuffer.decodeTimeStamp.isValid ? sampleBuffer.decodeTimeStamp : sampleBuffer.presentationTimeStamp
|
||||||
let presentationTimeStamp = sampleBuffer.presentationTimeStamp
|
let compositionTime = getCompositionTime(sampleBuffer)
|
||||||
var decodeTimeStamp = sampleBuffer.decodeTimeStamp
|
let delta = (videoTimeStamp == .zero ? .zero : decodeTimeStamp - videoTimeStamp).seconds * 1000
|
||||||
if decodeTimeStamp == CMTime.invalid {
|
|
||||||
decodeTimeStamp = presentationTimeStamp
|
|
||||||
} else {
|
|
||||||
compositionTime = (videoTimeStamp == .zero) ? 0 : Int32((sampleBuffer.presentationTimeStamp.seconds - videoTimeStamp.seconds) * 1000)
|
|
||||||
}
|
|
||||||
let delta = (videoTimeStamp == .zero ? 0 : decodeTimeStamp.seconds - videoTimeStamp.seconds) * 1000
|
|
||||||
guard let data = sampleBuffer.dataBuffer?.data, 0 <= delta else {
|
guard let data = sampleBuffer.dataBuffer?.data, 0 <= delta else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var buffer = Data([((keyframe ? FLVFrameType.key.rawValue : FLVFrameType.inter.rawValue) << 4) | FLVVideoCodec.avc.rawValue, FLVAVCPacketType.nal.rawValue])
|
switch codec.settings.format {
|
||||||
buffer.append(contentsOf: compositionTime.bigEndian.data[1..<4])
|
case .h264:
|
||||||
buffer.append(data)
|
var buffer = Data([((keyframe ? FLVFrameType.key.rawValue : FLVFrameType.inter.rawValue) << 4) | FLVVideoCodec.avc.rawValue, FLVAVCPacketType.nal.rawValue])
|
||||||
delegate?.muxer(self, didOutputVideo: buffer, withTimestamp: delta)
|
buffer.append(contentsOf: compositionTime.bigEndian.data[1..<4])
|
||||||
|
buffer.append(data)
|
||||||
|
delegate?.muxer(self, didOutputVideo: buffer, withTimestamp: delta)
|
||||||
|
case .hevc:
|
||||||
|
var buffer = Data([0b10000000 | ((keyframe ? FLVFrameType.key.rawValue : FLVFrameType.inter.rawValue) << 4) | FLVVideoPacketType.codedFrames.rawValue, 0x68, 0x76, 0x63, 0x31])
|
||||||
|
buffer.append(contentsOf: compositionTime.bigEndian.data[1..<4])
|
||||||
|
buffer.append(data)
|
||||||
|
delegate?.muxer(self, didOutputVideo: buffer, withTimestamp: delta)
|
||||||
|
}
|
||||||
videoTimeStamp = decodeTimeStamp
|
videoTimeStamp = decodeTimeStamp
|
||||||
}
|
}
|
||||||
|
|
||||||
func videoCodecWillDropFame(_ codec: VideoCodec) -> Bool {
|
func videoCodecWillDropFame(_ codec: VideoCodec) -> Bool {
|
||||||
return delegate?.muxerWillDropFrame(self) ?? false
|
return delegate?.muxerWillDropFrame(self) ?? false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func getCompositionTime(_ sampleBuffer: CMSampleBuffer) -> Int32 {
|
||||||
|
guard sampleBuffer.decodeTimeStamp.isValid, sampleBuffer.decodeTimeStamp != sampleBuffer.presentationTimeStamp else {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return Int32((sampleBuffer.presentationTimeStamp - videoTimeStamp + compositiionTimeOffset).seconds * 1000)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ final class RTMPNWSocket: RTMPSocketCompatible {
|
||||||
}
|
}
|
||||||
var qualityOfService: DispatchQoS = .default
|
var qualityOfService: DispatchQoS = .default
|
||||||
var inputBuffer = Data()
|
var inputBuffer = Data()
|
||||||
weak var delegate: RTMPSocketDelegate?
|
weak var delegate: (any RTMPSocketDelegate)?
|
||||||
|
|
||||||
private(set) var queueBytesOut: Atomic<Int64> = .init(0)
|
private(set) var queueBytesOut: Atomic<Int64> = .init(0)
|
||||||
private(set) var totalBytesIn: Atomic<Int64> = .init(0)
|
private(set) var totalBytesIn: Atomic<Int64> = .init(0)
|
||||||
|
|
|
@ -30,7 +30,7 @@ struct RTMPSharedObjectEvent {
|
||||||
self.data = data
|
self.data = data
|
||||||
}
|
}
|
||||||
|
|
||||||
init?(serializer: inout AMFSerializer) throws {
|
init?(serializer: inout any AMFSerializer) throws {
|
||||||
guard let byte: UInt8 = try? serializer.readUInt8(), let type = RTMPSharedObjectType(rawValue: byte) else {
|
guard let byte: UInt8 = try? serializer.readUInt8(), let type = RTMPSharedObjectType(rawValue: byte) else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,7 @@ struct RTMPSharedObjectEvent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func serialize(_ serializer: inout AMFSerializer) {
|
func serialize(_ serializer: inout any AMFSerializer) {
|
||||||
serializer.writeUInt8(type.rawValue)
|
serializer.writeUInt8(type.rawValue)
|
||||||
guard let name: String = name else {
|
guard let name: String = name else {
|
||||||
serializer.writeUInt32(0)
|
serializer.writeUInt32(0)
|
||||||
|
|
|
@ -12,7 +12,7 @@ final class RTMPSocket: NetSocket, RTMPSocketCompatible {
|
||||||
}
|
}
|
||||||
var chunkSizeC: Int = RTMPChunk.defaultSize
|
var chunkSizeC: Int = RTMPChunk.defaultSize
|
||||||
var chunkSizeS: Int = RTMPChunk.defaultSize
|
var chunkSizeS: Int = RTMPChunk.defaultSize
|
||||||
weak var delegate: RTMPSocketDelegate?
|
weak var delegate: (any RTMPSocketDelegate)?
|
||||||
private var handshake = RTMPHandshake()
|
private var handshake = RTMPHandshake()
|
||||||
|
|
||||||
override var totalBytesIn: Atomic<Int64> {
|
override var totalBytesIn: Atomic<Int64> {
|
||||||
|
|
|
@ -11,7 +11,7 @@ enum RTMPSocketReadyState: UInt8 {
|
||||||
|
|
||||||
protocol RTMPSocketCompatible: AnyObject {
|
protocol RTMPSocketCompatible: AnyObject {
|
||||||
var timeout: Int { get set }
|
var timeout: Int { get set }
|
||||||
var delegate: RTMPSocketDelegate? { get set }
|
var delegate: (any RTMPSocketDelegate)? { get set }
|
||||||
var connected: Bool { get }
|
var connected: Bool { get }
|
||||||
var timestamp: TimeInterval { get }
|
var timestamp: TimeInterval { get }
|
||||||
var readyState: RTMPSocketReadyState { get set }
|
var readyState: RTMPSocketReadyState { get set }
|
||||||
|
@ -47,7 +47,7 @@ extension RTMPSocketCompatible {
|
||||||
// MARK: -
|
// MARK: -
|
||||||
// swiftlint:disable class_delegate_protocol
|
// swiftlint:disable class_delegate_protocol
|
||||||
protocol RTMPSocketDelegate: EventDispatcherConvertible {
|
protocol RTMPSocketDelegate: EventDispatcherConvertible {
|
||||||
func socket(_ socket: RTMPSocketCompatible, data: Data)
|
func socket(_ socket: any RTMPSocketCompatible, data: Data)
|
||||||
func socket(_ socket: RTMPSocketCompatible, readyState: RTMPSocketReadyState)
|
func socket(_ socket: any RTMPSocketCompatible, readyState: RTMPSocketReadyState)
|
||||||
func socket(_ socket: RTMPSocketCompatible, totalBytesIn: Int64)
|
func socket(_ socket: any RTMPSocketCompatible, totalBytesIn: Int64)
|
||||||
}
|
}
|
||||||
|
|
|
@ -158,6 +158,16 @@ open class RTMPStream: NetStream {
|
||||||
case publishing
|
case publishing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private struct PausedStatus {
|
||||||
|
let hasAudio: Bool
|
||||||
|
let hasVideo: Bool
|
||||||
|
|
||||||
|
init(hasAudio: Bool, hasVideo: Bool) {
|
||||||
|
self.hasAudio = hasAudio
|
||||||
|
self.hasVideo = hasVideo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static let defaultID: UInt32 = 0
|
static let defaultID: UInt32 = 0
|
||||||
/// The NetStreamInfo object whose properties contain data.
|
/// The NetStreamInfo object whose properties contain data.
|
||||||
public internal(set) var info = RTMPStreamInfo()
|
public internal(set) var info = RTMPStreamInfo()
|
||||||
|
@ -216,8 +226,23 @@ open class RTMPStream: NetStream {
|
||||||
lockQueue.async {
|
lockQueue.async {
|
||||||
switch self.readyState {
|
switch self.readyState {
|
||||||
case .publish, .publishing:
|
case .publish, .publishing:
|
||||||
self.hasVideo = self.paused
|
if self.paused {
|
||||||
self.hasAudio = self.paused
|
self.pausedStatus = .init(hasAudio: self.hasAudio, hasVideo: self.hasVideo)
|
||||||
|
self.hasAudio = false
|
||||||
|
self.hasVideo = false
|
||||||
|
} else {
|
||||||
|
self.hasAudio = self.pausedStatus.hasAudio
|
||||||
|
self.hasVideo = self.pausedStatus.hasVideo
|
||||||
|
}
|
||||||
|
case .play, .playing:
|
||||||
|
self.rtmpConnection?.socket.doOutput(chunk: RTMPChunk(message: RTMPCommandMessage(
|
||||||
|
streamId: self.id,
|
||||||
|
transactionId: 0,
|
||||||
|
objectEncoding: self.objectEncoding,
|
||||||
|
commandName: "pause",
|
||||||
|
commandObject: nil,
|
||||||
|
arguments: [self.paused, floor(self.startedAt.timeIntervalSinceNow * -1000)]
|
||||||
|
)))
|
||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -239,11 +264,14 @@ open class RTMPStream: NetStream {
|
||||||
var videoTimestampZero: Double = -1.0
|
var videoTimestampZero: Double = -1.0
|
||||||
private let muxer = RTMPMuxer()
|
private let muxer = RTMPMuxer()
|
||||||
private var messages: [RTMPCommandMessage] = []
|
private var messages: [RTMPCommandMessage] = []
|
||||||
|
private var startedAt = Date()
|
||||||
private var frameCount: UInt16 = 0
|
private var frameCount: UInt16 = 0
|
||||||
private var dispatcher: EventDispatcherConvertible!
|
private var dispatcher: (any EventDispatcherConvertible)!
|
||||||
private var audioWasSent = false
|
private var audioWasSent = false
|
||||||
private var videoWasSent = false
|
private var videoWasSent = false
|
||||||
|
private var pausedStatus = PausedStatus(hasAudio: false, hasVideo: false)
|
||||||
private var howToPublish: RTMPStream.HowToPublish = .live
|
private var howToPublish: RTMPStream.HowToPublish = .live
|
||||||
|
private var dataTimeStamps: [String: Date] = .init()
|
||||||
private weak var rtmpConnection: RTMPConnection?
|
private weak var rtmpConnection: RTMPConnection?
|
||||||
|
|
||||||
/// Creates a new stream.
|
/// Creates a new stream.
|
||||||
|
@ -369,12 +397,20 @@ open class RTMPStream: NetStream {
|
||||||
guard let rtmpConnection = self.rtmpConnection, self.readyState == .publishing else {
|
guard let rtmpConnection = self.rtmpConnection, self.readyState == .publishing else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let length = rtmpConnection.socket.doOutput(chunk: RTMPChunk(message: RTMPDataMessage(
|
let dataWasSent = self.dataTimeStamps[handlerName] == nil ? false : true
|
||||||
streamId: self.id,
|
let timestmap: UInt32 = dataWasSent ? UInt32((self.dataTimeStamps[handlerName]?.timeIntervalSinceNow ?? 0) * -1000) : UInt32(self.startedAt.timeIntervalSinceNow * -1000)
|
||||||
objectEncoding: self.objectEncoding,
|
let chunk = RTMPChunk(
|
||||||
handlerName: handlerName,
|
type: dataWasSent ? RTMPChunkType.one : RTMPChunkType.zero,
|
||||||
arguments: arguments
|
streamId: RTMPChunk.StreamID.data.rawValue,
|
||||||
)))
|
message: RTMPDataMessage(
|
||||||
|
streamId: self.id,
|
||||||
|
objectEncoding: self.objectEncoding,
|
||||||
|
timestamp: timestmap,
|
||||||
|
handlerName: handlerName,
|
||||||
|
arguments: arguments
|
||||||
|
))
|
||||||
|
let length = rtmpConnection.socket.doOutput(chunk: chunk)
|
||||||
|
self.dataTimeStamps[handlerName] = .init()
|
||||||
self.info.byteCount.mutate { $0 += Int64(length) }
|
self.info.byteCount.mutate { $0 += Int64(length) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -387,7 +423,9 @@ open class RTMPStream: NetStream {
|
||||||
metadata["width"] = mixer.videoIO.codec.settings.videoSize.width
|
metadata["width"] = mixer.videoIO.codec.settings.videoSize.width
|
||||||
metadata["height"] = mixer.videoIO.codec.settings.videoSize.height
|
metadata["height"] = mixer.videoIO.codec.settings.videoSize.height
|
||||||
metadata["framerate"] = mixer.videoIO.frameRate
|
metadata["framerate"] = mixer.videoIO.frameRate
|
||||||
metadata["videocodecid"] = FLVVideoCodec.avc.rawValue
|
if mixer.videoIO.codec.settings.format == .h264 {
|
||||||
|
metadata["videocodecid"] = FLVVideoCodec.avc.rawValue
|
||||||
|
}
|
||||||
metadata["videodatarate"] = mixer.videoIO.codec.settings.bitRate / 1000
|
metadata["videodatarate"] = mixer.videoIO.codec.settings.bitRate / 1000
|
||||||
}
|
}
|
||||||
if mixer.audioIO.capture.device != nil {
|
if mixer.audioIO.capture.device != nil {
|
||||||
|
@ -468,6 +506,7 @@ open class RTMPStream: NetStream {
|
||||||
}
|
}
|
||||||
messages.removeAll()
|
messages.removeAll()
|
||||||
case .play:
|
case .play:
|
||||||
|
startedAt = .init()
|
||||||
videoTimestamp = 0
|
videoTimestamp = 0
|
||||||
videoTimestampZero = -1.0
|
videoTimestampZero = -1.0
|
||||||
audioTimestamp = 0
|
audioTimestamp = 0
|
||||||
|
@ -475,11 +514,13 @@ open class RTMPStream: NetStream {
|
||||||
mixer.delegate = self
|
mixer.delegate = self
|
||||||
mixer.startDecoding()
|
mixer.startDecoding()
|
||||||
case .publish:
|
case .publish:
|
||||||
|
startedAt = .init()
|
||||||
muxer.dispose()
|
muxer.dispose()
|
||||||
muxer.delegate = self
|
muxer.delegate = self
|
||||||
mixer.startRunning()
|
mixer.startRunning()
|
||||||
videoWasSent = false
|
videoWasSent = false
|
||||||
audioWasSent = false
|
audioWasSent = false
|
||||||
|
dataTimeStamps.removeAll()
|
||||||
FCPublish()
|
FCPublish()
|
||||||
case .publishing:
|
case .publishing:
|
||||||
send(handlerName: "@setDataFrame", arguments: "onMetaData", createMetaData())
|
send(handlerName: "@setDataFrame", arguments: "onMetaData", createMetaData())
|
||||||
|
@ -551,10 +592,6 @@ extension RTMPStream: EventDispatcherConvertible {
|
||||||
|
|
||||||
extension RTMPStream: RTMPMuxerDelegate {
|
extension RTMPStream: RTMPMuxerDelegate {
|
||||||
// MARK: RTMPMuxerDelegate
|
// MARK: RTMPMuxerDelegate
|
||||||
func muxer(_ muxer: RTMPMuxer, didSetMetadata: ASObject) {
|
|
||||||
send(handlerName: "@setDataFrame", arguments: "onMetaData", didSetMetadata)
|
|
||||||
}
|
|
||||||
|
|
||||||
func muxer(_ muxer: RTMPMuxer, didOutputAudio buffer: Data, withTimestamp: Double) {
|
func muxer(_ muxer: RTMPMuxer, didOutputAudio buffer: Data, withTimestamp: Double) {
|
||||||
guard let rtmpConnection, readyState == .publishing else {
|
guard let rtmpConnection, readyState == .publishing else {
|
||||||
return
|
return
|
||||||
|
@ -601,25 +638,3 @@ extension RTMPStream: RTMPMuxerDelegate {
|
||||||
return delegate?.streamWillDropFrame(self) ?? false
|
return delegate?.streamWillDropFrame(self) ?? false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension RTMPStream: IOMixerDelegate {
|
|
||||||
// MARK: IOMixerDelegate
|
|
||||||
func mixer(_ mixer: IOMixer, didOutput video: CMSampleBuffer) {
|
|
||||||
frameCount += 1
|
|
||||||
delegate?.stream(self, didOutput: video)
|
|
||||||
}
|
|
||||||
|
|
||||||
func mixer(_ mixer: IOMixer, didOutput audio: AVAudioPCMBuffer, presentationTimeStamp: CMTime) {
|
|
||||||
delegate?.stream(self, didOutput: audio, presentationTimeStamp: presentationTimeStamp)
|
|
||||||
}
|
|
||||||
|
|
||||||
#if os(iOS)
|
|
||||||
func mixer(_ mixer: IOMixer, sessionWasInterrupted session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason) {
|
|
||||||
delegate?.stream(self, sessionWasInterrupted: session, reason: reason)
|
|
||||||
}
|
|
||||||
|
|
||||||
func mixer(_ mixer: IOMixer, sessionInterruptionEnded session: AVCaptureSession, reason: AVCaptureSession.InterruptionReason) {
|
|
||||||
delegate?.stream(self, sessionInterruptionEnded: session, reason: reason)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ final class RTMPTSocket: NSObject, RTMPSocketCompatible {
|
||||||
var qualityOfService: DispatchQoS = .default
|
var qualityOfService: DispatchQoS = .default
|
||||||
var securityLevel: StreamSocketSecurityLevel = .none
|
var securityLevel: StreamSocketSecurityLevel = .none
|
||||||
var outputBufferSize: Int = RTMPTSocket.defaultWindowSizeC
|
var outputBufferSize: Int = RTMPTSocket.defaultWindowSizeC
|
||||||
weak var delegate: RTMPSocketDelegate?
|
weak var delegate: (any RTMPSocketDelegate)?
|
||||||
var connected = false {
|
var connected = false {
|
||||||
didSet {
|
didSet {
|
||||||
if connected {
|
if connected {
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
import CoreMedia
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
enum CMAudioSampleBufferUtil {
|
||||||
|
static func makeSampleBuffer(_ buffer: CMSampleBuffer, numSamples: Int, presentationTimeStamp: CMTime) -> CMSampleBuffer? {
|
||||||
|
guard 0 < numSamples, let formatDescription = buffer.formatDescription, let streamBasicDescription = formatDescription.streamBasicDescription else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var status: OSStatus = noErr
|
||||||
|
var blockBuffer: CMBlockBuffer?
|
||||||
|
let blockSize = numSamples * Int(streamBasicDescription.pointee.mBytesPerPacket)
|
||||||
|
status = CMBlockBufferCreateWithMemoryBlock(
|
||||||
|
allocator: nil,
|
||||||
|
memoryBlock: nil,
|
||||||
|
blockLength: blockSize,
|
||||||
|
blockAllocator: nil,
|
||||||
|
customBlockSource: nil,
|
||||||
|
offsetToData: 0,
|
||||||
|
dataLength: blockSize,
|
||||||
|
flags: 0,
|
||||||
|
blockBufferOut: &blockBuffer
|
||||||
|
)
|
||||||
|
guard let blockBuffer, status == noErr else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
status = CMBlockBufferFillDataBytes(
|
||||||
|
with: 0,
|
||||||
|
blockBuffer: blockBuffer,
|
||||||
|
offsetIntoDestination: 0,
|
||||||
|
dataLength: blockSize
|
||||||
|
)
|
||||||
|
guard status == noErr else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var sampleBuffer: CMSampleBuffer?
|
||||||
|
status = CMAudioSampleBufferCreateWithPacketDescriptions(
|
||||||
|
allocator: nil,
|
||||||
|
dataBuffer: blockBuffer,
|
||||||
|
dataReady: true,
|
||||||
|
makeDataReadyCallback: nil,
|
||||||
|
refcon: nil,
|
||||||
|
formatDescription: formatDescription,
|
||||||
|
sampleCount: numSamples,
|
||||||
|
presentationTimeStamp: presentationTimeStamp,
|
||||||
|
packetDescriptions: nil,
|
||||||
|
sampleBufferOut: &sampleBuffer
|
||||||
|
)
|
||||||
|
guard let sampleBuffer, status == noErr else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return sampleBuffer
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,88 +0,0 @@
|
||||||
import Foundation
|
|
||||||
|
|
||||||
struct RingBuffer<Element> {
|
|
||||||
var first: Element? {
|
|
||||||
buffer[top]
|
|
||||||
}
|
|
||||||
|
|
||||||
var count: Int {
|
|
||||||
if top == bottom {
|
|
||||||
return first == nil ? 0 : buffer.count
|
|
||||||
}
|
|
||||||
let value = bottom - top
|
|
||||||
return value < 0 ? value + buffer.count : value
|
|
||||||
}
|
|
||||||
|
|
||||||
// swiftlint:disable empty_count
|
|
||||||
var isEmpty: Bool {
|
|
||||||
count == 0
|
|
||||||
}
|
|
||||||
|
|
||||||
var isFull: Bool {
|
|
||||||
return count == (mask + 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
private var top: Int = 0
|
|
||||||
private var mask: Int = 0
|
|
||||||
private var bottom: Int = 0
|
|
||||||
private var buffer: [Element?]
|
|
||||||
private let extensible: Bool
|
|
||||||
|
|
||||||
init(_ capacity: Int, extensible: Bool = true) {
|
|
||||||
buffer = .init(repeating: nil, count: capacity)
|
|
||||||
mask = capacity - 1
|
|
||||||
self.extensible = extensible
|
|
||||||
}
|
|
||||||
|
|
||||||
mutating func append(_ newElement: Element) -> Bool {
|
|
||||||
guard !isFull else {
|
|
||||||
return extend(newElement)
|
|
||||||
}
|
|
||||||
defer {
|
|
||||||
bottom += 1
|
|
||||||
bottom &= mask
|
|
||||||
}
|
|
||||||
buffer[bottom] = newElement
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
@discardableResult
|
|
||||||
mutating func removeFirst() -> Element? {
|
|
||||||
defer {
|
|
||||||
buffer[top] = nil
|
|
||||||
top += 1
|
|
||||||
top &= mask
|
|
||||||
}
|
|
||||||
return buffer[top]
|
|
||||||
}
|
|
||||||
|
|
||||||
mutating func removeAll() {
|
|
||||||
for i in 0..<buffer.count {
|
|
||||||
buffer[i] = nil
|
|
||||||
}
|
|
||||||
top = 0
|
|
||||||
bottom = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
private mutating func extend(_ newElement: Element) -> Bool {
|
|
||||||
guard extensible else {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
let tail = buffer[0..<top]
|
|
||||||
let head = buffer[top...]
|
|
||||||
buffer.replaceSubrange(top..., with: tail)
|
|
||||||
buffer.replaceSubrange(0..<top, with: head)
|
|
||||||
bottom = count
|
|
||||||
top = 0
|
|
||||||
buffer.append(contentsOf: [Element?](repeating: nil, count: buffer.count))
|
|
||||||
mask = buffer.count - 1
|
|
||||||
return append(newElement)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension RingBuffer: CustomStringConvertible {
|
|
||||||
// MARK: CustomStringConvertible
|
|
||||||
var description: String {
|
|
||||||
buffer.description
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
import Foundation
|
||||||
|
import XCTest
|
||||||
|
import AVFoundation
|
||||||
|
|
||||||
|
@testable import HaishinKit
|
||||||
|
|
||||||
|
final class FLVVideoFourCCTests: XCTestCase {
|
||||||
|
func testMain() {
|
||||||
|
XCTAssertEqual("av01", str4(n: Int(FLVVideoFourCC.av1.rawValue)))
|
||||||
|
XCTAssertEqual("hvc1", str4(n: Int(FLVVideoFourCC.hevc.rawValue)))
|
||||||
|
XCTAssertEqual("vp09", str4(n: Int(FLVVideoFourCC.vp9.rawValue)))
|
||||||
|
}
|
||||||
|
|
||||||
|
func str4(n: Int) -> String {
|
||||||
|
var result = String(UnicodeScalar((n >> 24) & 255)?.description ?? "")
|
||||||
|
result.append(UnicodeScalar((n >> 16) & 255)?.description ?? "")
|
||||||
|
result.append(UnicodeScalar((n >> 8) & 255)?.description ?? "")
|
||||||
|
result.append(UnicodeScalar(n & 255)?.description ?? "")
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
import Foundation
|
||||||
|
import AVFoundation
|
||||||
|
import XCTest
|
||||||
|
|
||||||
|
@testable import HaishinKit
|
||||||
|
|
||||||
|
final class HEVCDecoderConfigurationRecordTests: XCTestCase {
|
||||||
|
func testMain() {
|
||||||
|
let data = Data([1, 1, 96, 0, 0, 0, 176, 0, 0, 0, 0, 0, 93, 240, 0, 252, 253, 248, 248, 0, 0, 15, 3, 32, 0, 1, 0, 24, 64, 1, 12, 1, 255, 255, 1, 96, 0, 0, 3, 0, 176, 0, 0, 3, 0, 0, 3, 0, 93, 21, 192, 144, 33, 0, 1, 0, 36, 66, 1, 1, 1, 96, 0, 0, 3, 0, 176, 0, 0, 3, 0, 0, 3, 0, 93, 160, 2, 40, 128, 39, 28, 178, 226, 5, 123, 145, 101, 83, 80, 16, 16, 16, 8, 34, 0, 1, 0, 7, 68, 1, 192, 44, 188, 20, 201])
|
||||||
|
let hevc = HEVCDecoderConfigurationRecord(data: data)
|
||||||
|
var formatDescription: CMFormatDescription?
|
||||||
|
_ = hevc.makeFormatDescription(&formatDescription)
|
||||||
|
XCTAssertNotNil(formatDescription)
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,7 +7,7 @@ import XCTest
|
||||||
final class NALUnitReaderTests: XCTestCase {
|
final class NALUnitReaderTests: XCTestCase {
|
||||||
func testMain() {
|
func testMain() {
|
||||||
let data = Data([0, 0, 0, 1, 9, 240, 0, 0, 0, 1, 103, 77, 64, 13, 218, 5, 7, 236, 4, 64, 0, 0, 3, 0, 64, 0, 0, 7, 131, 197, 10, 168, 0, 0, 0, 1, 104, 239, 60, 128, 0, 0, 0, 1, 101, 136, 130, 1, 15, 250, 120, 30, 255, 244, 55, 157, 215, 115, 255, 239, 112, 39, 83, 211, 17, 103, 152, 229, 241, 131, 49, 7, 123, 10, 145, 184, 0, 0, 3, 3, 133, 122, 49, 20, 214, 115, 51, 202, 59, 43, 204, 79, 27, 229, 101, 135, 60, 234, 243, 78, 210, 98, 30, 252, 36, 38, 20, 202, 41, 121, 70, 45, 15, 54, 125, 153, 199, 236, 90, 142, 247, 27, 202, 17, 205, 77, 133, 21, 189, 212, 159, 87, 222, 100, 53, 75, 211, 139, 219, 83, 89, 59, 199, 242, 182, 18, 245, 72, 70, 50, 230, 58, 82, 122, 179, 121, 243, 232, 107, 206, 157, 13, 151, 218, 93, 118, 157, 216, 67, 142, 2, 95, 69, 134, 167, 106, 101, 67, 112, 72, 120, 144, 105, 148, 234, 94, 74, 154, 149, 190, 13, 10, 88, 148, 169, 56, 46, 152, 176, 173, 110, 22, 215, 35, 18, 203, 125, 158, 16, 25, 228, 163, 26, 63, 30, 3, 96, 123, 237, 109, 12, 174, 216, 184, 25, 33, 123, 175, 69, 154, 240, 37, 168, 99, 38, 144, 221, 227, 119, 206, 215, 149, 111, 250, 180, 134, 78, 85, 50, 129, 178, 93, 255, 227, 144, 100, 156, 113, 113, 235, 47, 242, 68, 236, 109, 135, 87, 84, 178, 184, 163, 161, 170, 184, 84, 68, 113, 213, 73, 180, 25, 1, 77, 13, 222, 138, 69, 24, 104, 255, 218, 76, 224, 26, 122, 0, 231, 230, 203, 211, 172, 224, 26, 184, 69, 180, 123, 221, 8, 182, 241, 202, 193, 169, 120, 208, 135, 31, 82, 168, 125, 93, 207, 207, 109, 14, 243, 179, 97, 102, 58, 243, 14, 152, 13, 231, 30, 221, 177, 9, 72, 68, 212, 196, 71, 223, 142, 0, 248, 116, 139, 133, 210, 142, 83, 112, 87, 53, 138, 103, 202, 169, 112, 27, 7, 213, 152, 144, 207, 141, 84, 183, 121, 30, 128, 64, 95, 28, 10, 88, 116, 188, 83, 127, 181, 57, 47, 5, 19, 62, 132, 173, 201, 203, 170, 68, 224, 135, 134, 58, 206, 71, 77, 98, 77, 150, 225, 111, 103, 65, 84, 29, 176, 97, 72, 182, 151, 220, 153, 39, 247, 78, 136, 9, 166, 140, 221, 243, 68, 139, 229, 236, 189, 181, 124, 7, 35, 230, 139, 247, 223, 16, 78, 15, 189, 12, 144, 241, 169, 170, 166, 232, 17, 221, 212, 71, 69, 95, 122, 9, 36, 153, 246, 136, 111, 36, 50, 56, 118, 181, 240, 100, 5, 137, 252, 23, 244, 131, 41, 190, 128, 198, 134, 232, 40, 242, 214, 82, 69, 9, 168, 59, 179, 254, 220, 234, 16, 1, 170, 182, 214, 131, 169, 124, 91, 19, 65, 162, 179, 8, 98, 204, 219, 240, 6, 79, 49, 67, 120, 31, 236, 103, 167, 108, 213, 69, 193, 226, 66, 66, 242, 52, 18, 161, 42, 164, 133, 191, 82, 156, 2, 204, 75, 254, 217, 111, 215, 140, 157, 195, 195, 112, 120, 165, 163, 136, 125, 92, 195, 182, 99, 106, 220])
|
let data = Data([0, 0, 0, 1, 9, 240, 0, 0, 0, 1, 103, 77, 64, 13, 218, 5, 7, 236, 4, 64, 0, 0, 3, 0, 64, 0, 0, 7, 131, 197, 10, 168, 0, 0, 0, 1, 104, 239, 60, 128, 0, 0, 0, 1, 101, 136, 130, 1, 15, 250, 120, 30, 255, 244, 55, 157, 215, 115, 255, 239, 112, 39, 83, 211, 17, 103, 152, 229, 241, 131, 49, 7, 123, 10, 145, 184, 0, 0, 3, 3, 133, 122, 49, 20, 214, 115, 51, 202, 59, 43, 204, 79, 27, 229, 101, 135, 60, 234, 243, 78, 210, 98, 30, 252, 36, 38, 20, 202, 41, 121, 70, 45, 15, 54, 125, 153, 199, 236, 90, 142, 247, 27, 202, 17, 205, 77, 133, 21, 189, 212, 159, 87, 222, 100, 53, 75, 211, 139, 219, 83, 89, 59, 199, 242, 182, 18, 245, 72, 70, 50, 230, 58, 82, 122, 179, 121, 243, 232, 107, 206, 157, 13, 151, 218, 93, 118, 157, 216, 67, 142, 2, 95, 69, 134, 167, 106, 101, 67, 112, 72, 120, 144, 105, 148, 234, 94, 74, 154, 149, 190, 13, 10, 88, 148, 169, 56, 46, 152, 176, 173, 110, 22, 215, 35, 18, 203, 125, 158, 16, 25, 228, 163, 26, 63, 30, 3, 96, 123, 237, 109, 12, 174, 216, 184, 25, 33, 123, 175, 69, 154, 240, 37, 168, 99, 38, 144, 221, 227, 119, 206, 215, 149, 111, 250, 180, 134, 78, 85, 50, 129, 178, 93, 255, 227, 144, 100, 156, 113, 113, 235, 47, 242, 68, 236, 109, 135, 87, 84, 178, 184, 163, 161, 170, 184, 84, 68, 113, 213, 73, 180, 25, 1, 77, 13, 222, 138, 69, 24, 104, 255, 218, 76, 224, 26, 122, 0, 231, 230, 203, 211, 172, 224, 26, 184, 69, 180, 123, 221, 8, 182, 241, 202, 193, 169, 120, 208, 135, 31, 82, 168, 125, 93, 207, 207, 109, 14, 243, 179, 97, 102, 58, 243, 14, 152, 13, 231, 30, 221, 177, 9, 72, 68, 212, 196, 71, 223, 142, 0, 248, 116, 139, 133, 210, 142, 83, 112, 87, 53, 138, 103, 202, 169, 112, 27, 7, 213, 152, 144, 207, 141, 84, 183, 121, 30, 128, 64, 95, 28, 10, 88, 116, 188, 83, 127, 181, 57, 47, 5, 19, 62, 132, 173, 201, 203, 170, 68, 224, 135, 134, 58, 206, 71, 77, 98, 77, 150, 225, 111, 103, 65, 84, 29, 176, 97, 72, 182, 151, 220, 153, 39, 247, 78, 136, 9, 166, 140, 221, 243, 68, 139, 229, 236, 189, 181, 124, 7, 35, 230, 139, 247, 223, 16, 78, 15, 189, 12, 144, 241, 169, 170, 166, 232, 17, 221, 212, 71, 69, 95, 122, 9, 36, 153, 246, 136, 111, 36, 50, 56, 118, 181, 240, 100, 5, 137, 252, 23, 244, 131, 41, 190, 128, 198, 134, 232, 40, 242, 214, 82, 69, 9, 168, 59, 179, 254, 220, 234, 16, 1, 170, 182, 214, 131, 169, 124, 91, 19, 65, 162, 179, 8, 98, 204, 219, 240, 6, 79, 49, 67, 120, 31, 236, 103, 167, 108, 213, 69, 193, 226, 66, 66, 242, 52, 18, 161, 42, 164, 133, 191, 82, 156, 2, 204, 75, 254, 217, 111, 215, 140, 157, 195, 195, 112, 120, 165, 163, 136, 125, 92, 195, 182, 99, 106, 220])
|
||||||
let reader = NALUnitReader()
|
let reader = AVCNALUnitReader()
|
||||||
let units = reader.read(data)
|
let units = reader.read(data)
|
||||||
let sps = units.first(where: { $0.type == .sps })
|
let sps = units.first(where: { $0.type == .sps })
|
||||||
XCTAssertEqual(sps?.data.bytes, [103, 77, 64, 13, 218, 5, 7, 236, 4, 64, 0, 0, 3, 0, 64, 0, 0, 7, 131, 197, 10, 168])
|
XCTAssertEqual(sps?.data.bytes, [103, 77, 64, 13, 218, 5, 7, 236, 4, 64, 0, 0, 3, 0, 64, 0, 0, 7, 131, 197, 10, 168])
|
||||||
|
@ -16,7 +16,7 @@ final class NALUnitReaderTests: XCTestCase {
|
||||||
|
|
||||||
func testSlice_startCode3() {
|
func testSlice_startCode3() {
|
||||||
let data = Data([0, 0, 1, 65, 226, 8, 13, 224, 179, 253, 15, 80, 87, 254, 170, 10, 255, 213, 65, 95, 250, 168, 43, 255, 85, 5, 127, 234, 160, 175, 253, 84, 21, 255, 170, 130, 10, 197, 255, 170, 134, 250, 37, 66, 31, 232, 170, 28, 59, 199, 255, 170, 135, 42, 122, 250, 11, 143, 255, 85, 5, 127, 234, 160, 175, 253, 84, 43, 208, 134, 33, 111, 244, 37, 66, 221, 88, 190, 147, 21, 200, 236, 47, 210, 127, 166, 196, 119, 250, 168, 43, 255, 85, 5, 127, 234, 160, 175, 253, 84, 21, 255, 170, 130, 191, 245, 80, 87, 254, 170, 10, 255, 213, 65, 95, 250, 168, 43, 248])
|
let data = Data([0, 0, 1, 65, 226, 8, 13, 224, 179, 253, 15, 80, 87, 254, 170, 10, 255, 213, 65, 95, 250, 168, 43, 255, 85, 5, 127, 234, 160, 175, 253, 84, 21, 255, 170, 130, 10, 197, 255, 170, 134, 250, 37, 66, 31, 232, 170, 28, 59, 199, 255, 170, 135, 42, 122, 250, 11, 143, 255, 85, 5, 127, 234, 160, 175, 253, 84, 43, 208, 134, 33, 111, 244, 37, 66, 221, 88, 190, 147, 21, 200, 236, 47, 210, 127, 166, 196, 119, 250, 168, 43, 255, 85, 5, 127, 234, 160, 175, 253, 84, 21, 255, 170, 130, 191, 245, 80, 87, 254, 170, 10, 255, 213, 65, 95, 250, 168, 43, 248])
|
||||||
let reader = NALUnitReader()
|
let reader = AVCNALUnitReader()
|
||||||
let units = reader.read(data)
|
let units = reader.read(data)
|
||||||
XCTAssertEqual([65, 226, 8, 13], units.first?.data.bytes[0..<4])
|
XCTAssertEqual([65, 226, 8, 13], units.first?.data.bytes[0..<4])
|
||||||
XCTAssertTrue(units.contains(where: { $0.type == .slice }))
|
XCTAssertTrue(units.contains(where: { $0.type == .slice }))
|
||||||
|
@ -24,7 +24,7 @@ final class NALUnitReaderTests: XCTestCase {
|
||||||
|
|
||||||
func testSPSPPS_startCode3() {
|
func testSPSPPS_startCode3() {
|
||||||
let data = Data([0, 0, 1, 39, 66, 0, 30, 171, 64, 88, 25, 242, 203, 53, 1, 1, 1, 2, 0, 0, 1, 40, 206, 60, 128, 0, 0, 1, 39, 66, 0, 30, 171, 64, 88, 25, 242, 203, 53, 1, 1, 1, 2, 0, 0, 1, 40, 206, 60, 128, 0, 0, 1, 101, 184, 32, 3, 255, 255, 254, 30, 30, 40, 0, 8, 162, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 175, 255, 227, 240, 65, 192, 1, 16, 101, 17, 204, 73, 101, 165, 194, 60, 154, 126, 49, 8, 164, 150, 125, 247, 223, 125, 247, 223, 125, 247, 223, 125, 247, 223, 127, 255, 138, 252, 16, 120, 0, 55, 178, 27, 153, 226, 14, 166, 169, 75, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 193, 63, 255, 134, 166, 0, 0, 128, 200, 0, 8, 17, 0, 1, 96, 242, 96, 19, 129, 190, 129, 218, 96, 235, 136, 1, 198, 4, 169, 254, 196, 184, 65, 20, 5, 128, 176, 30, 2, 0, 160, 2, 32, 166, 47, 196, 70, 248, 176, 128, 1, 5, 23, 44, 129, 0, 128, 61, 204, 4, 163, 208, 131, 132, 72, 82, 216, 66, 185, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 224, 31, 255, 96, 174, 0, 9, 168, 2, 235, 144, 14, 120, 97, 73, 182, 124, 161, 0, 0, 32, 32, 0, 2, 12, 64, 0, 32, 65, 65, 134, 48, 150, 0, 2, 1, 128, 6, 2, 0, 19, 128, 18, 51, 13, 97, 202, 112, 8, 110, 242, 1, 128, 6, 185, 128, 130, 164, 24, 117, 238, 64, 27, 154, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 233, 235, 174, 186, 235, 175, 255, 255, 130, 239, 0, 7, 24, 27, 56, 90, 108, 195, 52, 5, 156, 12, 212, 90, 62, 1, 23, 128, 8, 35, 201, 76, 218, 71, 9, 31, 159, 253, 221, 199, 65, 220, 0, 24, 152, 156, 8, 30, 102, 87, 136, 225, 17, 170, 242, 109, 0, 88, 97, 19, 133, 35, 14, 179, 217, 217, 188, 212, 50, 138, 112, 86, 161, 151, 215, 56, 73, 126, 108, 130, 28, 45, 172, 222, 5, 7, 27, 252, 215, 255, 121, 11, 86, 3, 2, 86, 156, 239, 209, 189, 183, 117, 226, 29, 21, 192, 236, 87, 16, 153, 48, 100, 226, 90, 243, 160, 0, 100, 129, 102, 20, 1, 17, 64, 38, 251, 224, 128, 1, 0, 25, 192, 240, 160, 62, 54, 11, 90, 25, 108, 164, 6, 82, 223, 19, 200, 0, 4, 0, 136, 131, 97, 133, 147, 194, 128, 35, 135, 110, 31, 255, 234, 131, 191, 85, 162, 0, 1, 0, 61, 111, 224, 82, 52, 69, 101, 187, 238, 215, 255, 131, 0, 79, 136, 142, 24, 190, 138, 230, 192, 9, 218, 71, 116])
|
let data = Data([0, 0, 1, 39, 66, 0, 30, 171, 64, 88, 25, 242, 203, 53, 1, 1, 1, 2, 0, 0, 1, 40, 206, 60, 128, 0, 0, 1, 39, 66, 0, 30, 171, 64, 88, 25, 242, 203, 53, 1, 1, 1, 2, 0, 0, 1, 40, 206, 60, 128, 0, 0, 1, 101, 184, 32, 3, 255, 255, 254, 30, 30, 40, 0, 8, 162, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 251, 239, 190, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 175, 255, 227, 240, 65, 192, 1, 16, 101, 17, 204, 73, 101, 165, 194, 60, 154, 126, 49, 8, 164, 150, 125, 247, 223, 125, 247, 223, 125, 247, 223, 125, 247, 223, 127, 255, 138, 252, 16, 120, 0, 55, 178, 27, 153, 226, 14, 166, 169, 75, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 193, 63, 255, 134, 166, 0, 0, 128, 200, 0, 8, 17, 0, 1, 96, 242, 96, 19, 129, 190, 129, 218, 96, 235, 136, 1, 198, 4, 169, 254, 196, 184, 65, 20, 5, 128, 176, 30, 2, 0, 160, 2, 32, 166, 47, 196, 70, 248, 176, 128, 1, 5, 23, 44, 129, 0, 128, 61, 204, 4, 163, 208, 131, 132, 72, 82, 216, 66, 185, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 224, 31, 255, 96, 174, 0, 9, 168, 2, 235, 144, 14, 120, 97, 73, 182, 124, 161, 0, 0, 32, 32, 0, 2, 12, 64, 0, 32, 65, 65, 134, 48, 150, 0, 2, 1, 128, 6, 2, 0, 19, 128, 18, 51, 13, 97, 202, 112, 8, 110, 242, 1, 128, 6, 185, 128, 130, 164, 24, 117, 238, 64, 27, 154, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 235, 174, 186, 233, 235, 174, 186, 235, 175, 255, 255, 130, 239, 0, 7, 24, 27, 56, 90, 108, 195, 52, 5, 156, 12, 212, 90, 62, 1, 23, 128, 8, 35, 201, 76, 218, 71, 9, 31, 159, 253, 221, 199, 65, 220, 0, 24, 152, 156, 8, 30, 102, 87, 136, 225, 17, 170, 242, 109, 0, 88, 97, 19, 133, 35, 14, 179, 217, 217, 188, 212, 50, 138, 112, 86, 161, 151, 215, 56, 73, 126, 108, 130, 28, 45, 172, 222, 5, 7, 27, 252, 215, 255, 121, 11, 86, 3, 2, 86, 156, 239, 209, 189, 183, 117, 226, 29, 21, 192, 236, 87, 16, 153, 48, 100, 226, 90, 243, 160, 0, 100, 129, 102, 20, 1, 17, 64, 38, 251, 224, 128, 1, 0, 25, 192, 240, 160, 62, 54, 11, 90, 25, 108, 164, 6, 82, 223, 19, 200, 0, 4, 0, 136, 131, 97, 133, 147, 194, 128, 35, 135, 110, 31, 255, 234, 131, 191, 85, 162, 0, 1, 0, 61, 111, 224, 82, 52, 69, 101, 187, 238, 215, 255, 131, 0, 79, 136, 142, 24, 190, 138, 230, 192, 9, 218, 71, 116])
|
||||||
let reader = NALUnitReader()
|
let reader = AVCNALUnitReader()
|
||||||
XCTAssertNotNil(reader.makeFormatDescription(data))
|
XCTAssertNotNil(reader.makeFormatDescription(data))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
import Foundation
|
|
||||||
import XCTest
|
|
||||||
|
|
||||||
@testable import HaishinKit
|
|
||||||
|
|
||||||
final class RTMPReaderTests: XCTestCase {
|
|
||||||
func testReader() {
|
|
||||||
let bundle = Bundle(for: type(of: self))
|
|
||||||
let url = URL(fileURLWithPath: bundle.path(forResource: "SampleVideo_360x240_5mb", ofType: "flv")!)
|
|
||||||
let reader = FLVReader(url: url)
|
|
||||||
while true {
|
|
||||||
guard let _ = reader.next() else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,127 @@
|
||||||
|
import Foundation
|
||||||
|
import XCTest
|
||||||
|
import CoreMedia
|
||||||
|
|
||||||
|
@testable import HaishinKit
|
||||||
|
|
||||||
|
final class CMAudioSampleBufferUtilTests: XCTestCase {
|
||||||
|
func test48000_2chTest() {
|
||||||
|
let streamBasicDescription = AudioStreamBasicDescription(
|
||||||
|
mSampleRate: 48000.0,
|
||||||
|
mFormatID: kAudioFormatLinearPCM,
|
||||||
|
mFormatFlags: 0xc,
|
||||||
|
mBytesPerPacket: 4,
|
||||||
|
mFramesPerPacket: 1,
|
||||||
|
mBytesPerFrame: 4,
|
||||||
|
mChannelsPerFrame: 2,
|
||||||
|
mBitsPerChannel: 16,
|
||||||
|
mReserved: 0
|
||||||
|
)
|
||||||
|
if let buffer = makeSampleBuffer(streamBasicDescription) {
|
||||||
|
XCTAssertNotNil(CMAudioSampleBufferUtil.makeSampleBuffer(buffer, numSamples: 1024, presentationTimeStamp: .zero))
|
||||||
|
} else {
|
||||||
|
XCTFail()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func test48000_4chTest() {
|
||||||
|
let streamBasicDescription = AudioStreamBasicDescription(
|
||||||
|
mSampleRate: 48000.0,
|
||||||
|
mFormatID: kAudioFormatLinearPCM,
|
||||||
|
mFormatFlags: 0xc,
|
||||||
|
mBytesPerPacket: 8,
|
||||||
|
mFramesPerPacket: 1,
|
||||||
|
mBytesPerFrame: 8,
|
||||||
|
mChannelsPerFrame: 4,
|
||||||
|
mBitsPerChannel: 16,
|
||||||
|
mReserved: 0
|
||||||
|
)
|
||||||
|
if let buffer = makeSampleBuffer(streamBasicDescription) {
|
||||||
|
XCTAssertNotNil(CMAudioSampleBufferUtil.makeSampleBuffer(buffer, numSamples: 1024, presentationTimeStamp: .zero))
|
||||||
|
} else {
|
||||||
|
XCTFail()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func test48000_3chTest() {
|
||||||
|
let streamBasicDescription = AudioStreamBasicDescription(
|
||||||
|
mSampleRate: 48000.0,
|
||||||
|
mFormatID: kAudioFormatLinearPCM,
|
||||||
|
mFormatFlags: 0xc,
|
||||||
|
mBytesPerPacket: 6,
|
||||||
|
mFramesPerPacket: 1,
|
||||||
|
mBytesPerFrame: 6,
|
||||||
|
mChannelsPerFrame: 3,
|
||||||
|
mBitsPerChannel: 16,
|
||||||
|
mReserved: 0
|
||||||
|
)
|
||||||
|
if let buffer = makeSampleBuffer(streamBasicDescription) {
|
||||||
|
XCTAssertNotNil(CMAudioSampleBufferUtil.makeSampleBuffer(buffer, numSamples: 1024, presentationTimeStamp: .zero))
|
||||||
|
} else {
|
||||||
|
XCTFail()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func test48000_2chTest_mac() {
|
||||||
|
let streamBasicDescription = AudioStreamBasicDescription(
|
||||||
|
mSampleRate: 48000.0,
|
||||||
|
mFormatID: kAudioFormatLinearPCM,
|
||||||
|
mFormatFlags: 0x29,
|
||||||
|
mBytesPerPacket: 4,
|
||||||
|
mFramesPerPacket: 1,
|
||||||
|
mBytesPerFrame: 4,
|
||||||
|
mChannelsPerFrame: 1,
|
||||||
|
mBitsPerChannel: 32,
|
||||||
|
mReserved: 0
|
||||||
|
)
|
||||||
|
if let buffer = makeSampleBuffer(streamBasicDescription) {
|
||||||
|
XCTAssertNotNil(CMAudioSampleBufferUtil.makeSampleBuffer(buffer, numSamples: 1024, presentationTimeStamp: .zero))
|
||||||
|
} else {
|
||||||
|
XCTFail()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func makeSampleBuffer(_ streamBasicDescription: AudioStreamBasicDescription) -> CMSampleBuffer? {
|
||||||
|
guard let formatDescription = try? CMAudioFormatDescription(audioStreamBasicDescription: streamBasicDescription) else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var status: OSStatus = noErr
|
||||||
|
var blockBuffer: CMBlockBuffer?
|
||||||
|
let blockSize = 1024 * Int(streamBasicDescription.mBytesPerPacket)
|
||||||
|
status = CMBlockBufferCreateWithMemoryBlock(
|
||||||
|
allocator: nil,
|
||||||
|
memoryBlock: nil,
|
||||||
|
blockLength: blockSize,
|
||||||
|
blockAllocator: nil,
|
||||||
|
customBlockSource: nil,
|
||||||
|
offsetToData: 0,
|
||||||
|
dataLength: blockSize,
|
||||||
|
flags: 0,
|
||||||
|
blockBufferOut: &blockBuffer
|
||||||
|
)
|
||||||
|
guard let blockBuffer, status == noErr else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
status = CMBlockBufferFillDataBytes(with: 0, blockBuffer: blockBuffer, offsetIntoDestination: 0, dataLength: blockSize)
|
||||||
|
guard status == noErr else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var sampleBuffer: CMSampleBuffer?
|
||||||
|
status = CMAudioSampleBufferCreateWithPacketDescriptions(
|
||||||
|
allocator: nil,
|
||||||
|
dataBuffer: blockBuffer,
|
||||||
|
dataReady: true,
|
||||||
|
makeDataReadyCallback: nil,
|
||||||
|
refcon: nil,
|
||||||
|
formatDescription: formatDescription,
|
||||||
|
sampleCount: 1024,
|
||||||
|
presentationTimeStamp: CMTimeMake(value: 1024, timescale: Int32(streamBasicDescription.mSampleRate)),
|
||||||
|
packetDescriptions: nil,
|
||||||
|
sampleBufferOut: &sampleBuffer
|
||||||
|
)
|
||||||
|
guard let sampleBuffer, status == noErr else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return sampleBuffer
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,82 +0,0 @@
|
||||||
import Foundation
|
|
||||||
import XCTest
|
|
||||||
|
|
||||||
@testable import HaishinKit
|
|
||||||
|
|
||||||
final class RingBufferTests: XCTestCase {
|
|
||||||
func testExtensibleCircularBuffer() {
|
|
||||||
var buffer = RingBuffer<String>(4, extensible: false)
|
|
||||||
_ = buffer.append("a")
|
|
||||||
_ = buffer.append("b")
|
|
||||||
_ = buffer.append("c")
|
|
||||||
_ = buffer.append("d")
|
|
||||||
XCTAssertEqual(buffer.count, 4)
|
|
||||||
XCTAssertEqual(buffer.isFull, true)
|
|
||||||
print(buffer)
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "a")
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "b")
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "c")
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "d")
|
|
||||||
_ = buffer.append("a")
|
|
||||||
_ = buffer.append("b")
|
|
||||||
_ = buffer.append("c")
|
|
||||||
_ = buffer.append("d")
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "a")
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "b")
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "c")
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "d")
|
|
||||||
print(buffer)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testNonExtensibleCircularBuffer() {
|
|
||||||
var buffer = RingBuffer<String>(4, extensible: true)
|
|
||||||
_ = buffer.append("a")
|
|
||||||
_ = buffer.append("b")
|
|
||||||
_ = buffer.append("c")
|
|
||||||
_ = buffer.append("d")
|
|
||||||
XCTAssertEqual(buffer.count, 4)
|
|
||||||
XCTAssertEqual(buffer.isFull, true)
|
|
||||||
print(buffer)
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "a")
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "b")
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "c")
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "d")
|
|
||||||
XCTAssertEqual(buffer.count, 0)
|
|
||||||
XCTAssertEqual(buffer.isEmpty, true)
|
|
||||||
_ = buffer.append("a")
|
|
||||||
_ = buffer.append("b")
|
|
||||||
_ = buffer.append("c")
|
|
||||||
_ = buffer.append("d")
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "a")
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "b")
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "c")
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "d")
|
|
||||||
print(buffer)
|
|
||||||
}
|
|
||||||
|
|
||||||
func testExtensibleCircularBuffer2() {
|
|
||||||
var buffer = RingBuffer<String>(4, extensible: true)
|
|
||||||
_ = buffer.append("a")
|
|
||||||
_ = buffer.append("b")
|
|
||||||
_ = buffer.append("c")
|
|
||||||
_ = buffer.append("d")
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "a")
|
|
||||||
XCTAssertEqual(buffer.removeFirst(), "b")
|
|
||||||
XCTAssertEqual(buffer.count, 2)
|
|
||||||
XCTAssertEqual(buffer.isFull, false)
|
|
||||||
_ = buffer.append("e")
|
|
||||||
_ = buffer.append("f")
|
|
||||||
XCTAssertEqual(buffer.count, 4)
|
|
||||||
XCTAssertEqual(buffer.isFull, true)
|
|
||||||
_ = buffer.append("g")
|
|
||||||
_ = buffer.append("h")
|
|
||||||
XCTAssertEqual(buffer.count, 6)
|
|
||||||
XCTAssertEqual("c", buffer.removeFirst())
|
|
||||||
XCTAssertEqual("d", buffer.removeFirst())
|
|
||||||
XCTAssertEqual("e", buffer.removeFirst())
|
|
||||||
XCTAssertEqual("f", buffer.removeFirst())
|
|
||||||
XCTAssertEqual("g", buffer.removeFirst())
|
|
||||||
XCTAssertEqual("h", buffer.removeFirst())
|
|
||||||
XCTAssertEqual(buffer.count, 0)
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/!=(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.!=(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"!=(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:10HaishinKit7ASArrayV","extendedModule":"Swift","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asarray\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/!=(_:_:)"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/!=(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.!=(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"!=(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:10HaishinKit7ASArrayV","extendedModule":"Swift","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asarray\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASArray/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/!=(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV","text":"ASArray"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV","text":"ASArray"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/==(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/==(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.==(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"==(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:10HaishinKit7ASArrayV2eeoiySbAC_ACtFZ","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asarray\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASArray/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV","text":"ASArray"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV","text":"ASArray"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/==(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/==(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.==(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"==(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:10HaishinKit7ASArrayV2eeoiySbAC_ACtFZ","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASArray/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asarray\/equatable-implementations"}}}
|
|
@ -1 +1 @@
|
||||||
{"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/customdebugstringconvertible-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/CustomDebugStringConvertible-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/debugDescription"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"CustomDebugStringConvertible Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/debugDescription":{"role":"symbol","title":"debugDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/debugDescription","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/debugdescription"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
{"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/customdebugstringconvertible-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/CustomDebugStringConvertible-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/debugDescription"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"CustomDebugStringConvertible Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray/debugDescription":{"role":"symbol","title":"debugDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/debugDescription","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/debugdescription"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/debugdescription"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/debugDescription","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"CustomDebugStringConvertible.debugDescription"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"debugDescription","roleHeading":"Instance Property","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"symbolKind":"property","externalID":"s:10HaishinKit7ASArrayV16debugDescriptionSSvp","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/CustomDebugStringConvertible-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray/CustomDebugStringConvertible-Implementations":{"role":"collectionGroup","title":"CustomDebugStringConvertible Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/CustomDebugStringConvertible-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asarray\/customdebugstringconvertible-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASArray/debugDescription":{"role":"symbol","title":"debugDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/debugDescription","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/debugdescription"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/debugdescription"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/debugDescription","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"CustomDebugStringConvertible.debugDescription"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"debugDescription","roleHeading":"Instance Property","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"symbolKind":"property","externalID":"s:10HaishinKit7ASArrayV16debugDescriptionSSvp","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/CustomDebugStringConvertible-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray/CustomDebugStringConvertible-Implementations":{"role":"collectionGroup","title":"CustomDebugStringConvertible Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/CustomDebugStringConvertible-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asarray\/customdebugstringconvertible-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/debugDescription":{"role":"symbol","title":"debugDescription","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"debugDescription"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/debugDescription","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/debugdescription"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
|
@ -1 +1 @@
|
||||||
{"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/!=(_:_:)","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/==(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/!=(_:_:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/==(_:_:)"}}}
|
{"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/!=(_:_:)","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/==(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/!=(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASArray/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASArray","preciseIdentifier":"s:10HaishinKit7ASArrayV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/==(_:_:)"}}}
|
|
@ -1 +1 @@
|
||||||
{"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/expressiblebyarrayliteral-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/ExpressibleByArrayLiteral-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(arrayLiteral:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"ExpressibleByArrayLiteral Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray/init(arrayLiteral:)":{"role":"symbol","title":"init(arrayLiteral:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"arrayLiteral"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?...)"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(arrayLiteral:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/init(arrayliteral:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"}}}
|
{"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/expressiblebyarrayliteral-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/ExpressibleByArrayLiteral-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(arrayLiteral:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"ExpressibleByArrayLiteral Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray/init(arrayLiteral:)":{"role":"symbol","title":"init(arrayLiteral:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"arrayLiteral"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?...)"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(arrayLiteral:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/init(arrayliteral:)"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"arrayLiteral"},{"kind":"text","text":" "},{"kind":"internalParam","text":"elements"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?...)"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/init(arrayliteral:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(arrayLiteral:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"ExpressibleByArrayLiteral.init(arrayLiteral:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"init(arrayLiteral:)","roleHeading":"Initializer","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"arrayLiteral"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?...)"}],"symbolKind":"init","externalID":"s:10HaishinKit7ASArrayV12arrayLiteralACypSgd_tcfc","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/ExpressibleByArrayLiteral-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray/init(arrayLiteral:)":{"role":"symbol","title":"init(arrayLiteral:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"arrayLiteral"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?...)"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(arrayLiteral:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/init(arrayliteral:)"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/ExpressibleByArrayLiteral-Implementations":{"role":"collectionGroup","title":"ExpressibleByArrayLiteral Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/ExpressibleByArrayLiteral-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asarray\/expressiblebyarrayliteral-implementations"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"arrayLiteral"},{"kind":"text","text":" "},{"kind":"internalParam","text":"elements"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?...)"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/init(arrayliteral:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(arrayLiteral:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"ExpressibleByArrayLiteral.init(arrayLiteral:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"init(arrayLiteral:)","roleHeading":"Initializer","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"arrayLiteral"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?...)"}],"symbolKind":"init","externalID":"s:10HaishinKit7ASArrayV12arrayLiteralACypSgd_tcfc","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/ExpressibleByArrayLiteral-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/init(arrayLiteral:)":{"role":"symbol","title":"init(arrayLiteral:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"arrayLiteral"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?...)"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(arrayLiteral:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/init(arrayliteral:)"},"doc://HaishinKit/documentation/HaishinKit/ASArray/ExpressibleByArrayLiteral-Implementations":{"role":"collectionGroup","title":"ExpressibleByArrayLiteral Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/ExpressibleByArrayLiteral-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asarray\/expressiblebyarrayliteral-implementations"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"count"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/init(count:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(count:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates a new instance containing the specified number of a single."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"count"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":")"}],"title":"init(count:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit7ASArrayV5countACSi_tcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray/init(count:)":{"role":"symbol","title":"init(count:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"count"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance containing the specified number of a single."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(count:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/init(count:)"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"count"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/init(count:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(count:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates a new instance containing the specified number of a single."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"count"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":")"}],"title":"init(count:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit7ASArrayV5countACSi_tcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/init(count:)":{"role":"symbol","title":"init(count:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"count"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance containing the specified number of a single."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(count:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/init(count:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": ["},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?])"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/init(data:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(data:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates a new instance of data."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": ["},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?])"}],"title":"init(data:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit7ASArrayV4dataACSayypSgG_tcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": ["},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?])"}],"abstract":[{"type":"text","text":"Creates a new instance of data."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/init(data:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": ["},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?])"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/init(data:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(data:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates a new instance of data."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": ["},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?])"}],"title":"init(data:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit7ASArrayV4dataACSayypSgG_tcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": ["},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?])"}],"abstract":[{"type":"text","text":"Creates a new instance of data."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/init(data:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"length"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/length"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/length","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The length of an array."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"length"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"}],"title":"length","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit7ASArrayV6lengthSivp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/length":{"role":"symbol","title":"length","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"length"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"}],"abstract":[{"type":"text","text":"The length of an array."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/length","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/length"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"length"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/length"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/length","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The length of an array."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"length"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"}],"title":"length","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit7ASArrayV6lengthSivp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray/length":{"role":"symbol","title":"length","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"length"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"}],"abstract":[{"type":"text","text":"The length of an array."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/length","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/length"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"subscript"},{"kind":"text","text":"("},{"kind":"internalParam","text":"i"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":") -> "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"? { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" "},{"kind":"keyword","text":"set"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/subscript(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/subscript(_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Accesses the element at the specified position."}],"kind":"symbol","metadata":{"role":"symbol","title":"subscript(_:)","roleHeading":"Instance Subscript","fragments":[{"kind":"keyword","text":"subscript"},{"kind":"text","text":"("},{"kind":"keyword","text":"Any"},{"kind":"text","text":") -> "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?"}],"symbolKind":"subscript","externalID":"s:10HaishinKit7ASArrayVyypSgypcip","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASArray/subscript(_:)":{"role":"symbol","title":"subscript(_:)","fragments":[{"kind":"keyword","text":"subscript"},{"kind":"text","text":"("},{"kind":"keyword","text":"Any"},{"kind":"text","text":") -> "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?"}],"abstract":[{"type":"text","text":"Accesses the element at the specified position."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/subscript(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/subscript(_:)"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"subscript"},{"kind":"text","text":"("},{"kind":"internalParam","text":"i"},{"kind":"text","text":": "},{"kind":"keyword","text":"Any"},{"kind":"text","text":") -> "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"? { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" "},{"kind":"keyword","text":"set"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asarray\/subscript(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/subscript(_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Accesses the element at the specified position."}],"kind":"symbol","metadata":{"role":"symbol","title":"subscript(_:)","roleHeading":"Instance Subscript","fragments":[{"kind":"keyword","text":"subscript"},{"kind":"text","text":"("},{"kind":"keyword","text":"Any"},{"kind":"text","text":") -> "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?"}],"symbolKind":"subscript","externalID":"s:10HaishinKit7ASArrayVyypSgypcip","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASArray":{"role":"symbol","title":"ASArray","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASArray"}],"abstract":[{"type":"text","text":"The ASArray class represents an array value for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASArray"}],"url":"\/documentation\/haishinkit\/asarray"},"doc://HaishinKit/documentation/HaishinKit/ASArray/subscript(_:)":{"role":"symbol","title":"subscript(_:)","fragments":[{"kind":"keyword","text":"subscript"},{"kind":"text","text":"("},{"kind":"keyword","text":"Any"},{"kind":"text","text":") -> "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?"}],"abstract":[{"type":"text","text":"Accesses the element at the specified position."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASArray\/subscript(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asarray\/subscript(_:)"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASObject"},{"kind":"text","text":" = ["},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" : "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?]"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asobject"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASObject","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The ASObject class represents an object for AcrionScript."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASObject"}],"title":"ASObject","roleHeading":"Type Alias","role":"symbol","symbolKind":"typealias","externalID":"s:10HaishinKit8ASObjecta","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"ASObject"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASObject":{"role":"symbol","title":"ASObject","fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASObject"}],"abstract":[{"type":"text","text":"The ASObject class represents an object for AcrionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASObject"}],"url":"\/documentation\/haishinkit\/asobject"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASObject"},{"kind":"text","text":" = ["},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" : "},{"kind":"keyword","text":"Any"},{"kind":"text","text":"?]"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asobject"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASObject","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The ASObject class represents an object for AcrionScript."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASObject"}],"title":"ASObject","roleHeading":"Type Alias","role":"symbol","symbolKind":"typealias","externalID":"s:10HaishinKit8ASObjecta","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"ASObject"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASObject":{"role":"symbol","title":"ASObject","fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASObject"}],"abstract":[{"type":"text","text":"The ASObject class represents an object for AcrionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASObject"}],"url":"\/documentation\/haishinkit\/asobject"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"register"},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"T"},{"kind":"text","text":">("},{"kind":"externalParam","text":"type"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"T"},{"kind":"text","text":".Type, "},{"kind":"externalParam","text":"named"},{"kind":"text","text":" "},{"kind":"internalParam","text":"name"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"where"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"T"},{"kind":"text","text":" : "},{"kind":"typeIdentifier","text":"Decodable","preciseIdentifier":"s:Se"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/astypedobject\/register(type:named:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/register(type:named:)","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"register"},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"T"},{"kind":"text","text":">("},{"kind":"externalParam","text":"type"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"T"},{"kind":"text","text":".Type, "},{"kind":"externalParam","text":"named"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"title":"register(type:named:)","roleHeading":"Type Method","role":"symbol","symbolKind":"method","externalID":"s:10HaishinKit13ASTypedObjectV8register4type5namedyxm_SStSeRzlFZ","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASTypedObject":{"role":"symbol","title":"ASTypedObject","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASTypedObject"}],"abstract":[{"type":"text","text":"The ASTypedObject class represents a typed object for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASTypedObject"}],"url":"\/documentation\/haishinkit\/astypedobject"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject/register(type:named:)":{"role":"symbol","title":"register(type:named:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"register"},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"T"},{"kind":"text","text":">("},{"kind":"externalParam","text":"type"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"T"},{"kind":"text","text":".Type, "},{"kind":"externalParam","text":"named"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/register(type:named:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/astypedobject\/register(type:named:)"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"register"},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"T"},{"kind":"text","text":">("},{"kind":"externalParam","text":"type"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"T"},{"kind":"text","text":".Type, "},{"kind":"externalParam","text":"named"},{"kind":"text","text":" "},{"kind":"internalParam","text":"name"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":") "},{"kind":"keyword","text":"where"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"T"},{"kind":"text","text":" : "},{"kind":"typeIdentifier","text":"Decodable","preciseIdentifier":"s:Se"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/astypedobject\/register(type:named:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/register(type:named:)","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"register"},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"T"},{"kind":"text","text":">("},{"kind":"externalParam","text":"type"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"T"},{"kind":"text","text":".Type, "},{"kind":"externalParam","text":"named"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"title":"register(type:named:)","roleHeading":"Type Method","role":"symbol","symbolKind":"method","externalID":"s:10HaishinKit13ASTypedObjectV8register4type5namedyxm_SStSeRzlFZ","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASTypedObject/register(type:named:)":{"role":"symbol","title":"register(type:named:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"register"},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"T"},{"kind":"text","text":">("},{"kind":"externalParam","text":"type"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"T"},{"kind":"text","text":".Type, "},{"kind":"externalParam","text":"named"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/register(type:named:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/astypedobject\/register(type:named:)"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject":{"role":"symbol","title":"ASTypedObject","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASTypedObject"}],"abstract":[{"type":"text","text":"The ASTypedObject class represents a typed object for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASTypedObject"}],"url":"\/documentation\/haishinkit\/astypedobject"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"TypedObjectDecoder"},{"kind":"text","text":" = ("},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":", "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASObject","preciseIdentifier":"s:10HaishinKit8ASObjecta","text":"ASObject"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> "},{"kind":"keyword","text":"Any"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/astypedobject\/typedobjectdecoder"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/TypedObjectDecoder","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"TypedObjectDecoder"}],"title":"ASTypedObject.TypedObjectDecoder","roleHeading":"Type Alias","role":"symbol","symbolKind":"typealias","externalID":"s:10HaishinKit13ASTypedObjectV05TypedD7Decodera","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"TypedObjectDecoder"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASObject":{"role":"symbol","title":"ASObject","fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASObject"}],"abstract":[{"type":"text","text":"The ASObject class represents an object for AcrionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASObject"}],"url":"\/documentation\/haishinkit\/asobject"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject":{"role":"symbol","title":"ASTypedObject","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASTypedObject"}],"abstract":[{"type":"text","text":"The ASTypedObject class represents a typed object for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASTypedObject"}],"url":"\/documentation\/haishinkit\/astypedobject"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject/TypedObjectDecoder":{"role":"symbol","title":"ASTypedObject.TypedObjectDecoder","fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"TypedObjectDecoder"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/TypedObjectDecoder","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"TypedObjectDecoder"}],"url":"\/documentation\/haishinkit\/astypedobject\/typedobjectdecoder"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"TypedObjectDecoder"},{"kind":"text","text":" = ("},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":", "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASObject","preciseIdentifier":"s:10HaishinKit8ASObjecta","text":"ASObject"},{"kind":"text","text":") "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> "},{"kind":"keyword","text":"Any"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/astypedobject\/typedobjectdecoder"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/TypedObjectDecoder","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"TypedObjectDecoder"}],"title":"ASTypedObject.TypedObjectDecoder","roleHeading":"Type Alias","role":"symbol","symbolKind":"typealias","externalID":"s:10HaishinKit13ASTypedObjectV05TypedD7Decodera","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"TypedObjectDecoder"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject":{"role":"symbol","title":"ASTypedObject","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASTypedObject"}],"abstract":[{"type":"text","text":"The ASTypedObject class represents a typed object for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASTypedObject"}],"url":"\/documentation\/haishinkit\/astypedobject"},"doc://HaishinKit/documentation/HaishinKit/ASObject":{"role":"symbol","title":"ASObject","fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASObject"}],"abstract":[{"type":"text","text":"The ASObject class represents an object for AcrionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASObject"}],"url":"\/documentation\/haishinkit\/asobject"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject/TypedObjectDecoder":{"role":"symbol","title":"ASTypedObject.TypedObjectDecoder","fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"TypedObjectDecoder"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/TypedObjectDecoder","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"TypedObjectDecoder"}],"url":"\/documentation\/haishinkit\/astypedobject\/typedobjectdecoder"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"unregister"},{"kind":"text","text":"("},{"kind":"externalParam","text":"typeNamed"},{"kind":"text","text":" "},{"kind":"internalParam","text":"name"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/astypedobject\/unregister(typenamed:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/unregister(typeNamed:)","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"unregister"},{"kind":"text","text":"("},{"kind":"externalParam","text":"typeNamed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"title":"unregister(typeNamed:)","roleHeading":"Type Method","role":"symbol","symbolKind":"method","externalID":"s:10HaishinKit13ASTypedObjectV10unregister9typeNamedySS_tFZ","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject/unregister(typeNamed:)":{"role":"symbol","title":"unregister(typeNamed:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"unregister"},{"kind":"text","text":"("},{"kind":"externalParam","text":"typeNamed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/unregister(typeNamed:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/astypedobject\/unregister(typenamed:)"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject":{"role":"symbol","title":"ASTypedObject","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASTypedObject"}],"abstract":[{"type":"text","text":"The ASTypedObject class represents a typed object for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASTypedObject"}],"url":"\/documentation\/haishinkit\/astypedobject"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"unregister"},{"kind":"text","text":"("},{"kind":"externalParam","text":"typeNamed"},{"kind":"text","text":" "},{"kind":"internalParam","text":"name"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/astypedobject\/unregister(typenamed:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/unregister(typeNamed:)","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"unregister"},{"kind":"text","text":"("},{"kind":"externalParam","text":"typeNamed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"title":"unregister(typeNamed:)","roleHeading":"Type Method","role":"symbol","symbolKind":"method","externalID":"s:10HaishinKit13ASTypedObjectV10unregister9typeNamedySS_tFZ","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASTypedObject":{"role":"symbol","title":"ASTypedObject","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASTypedObject"}],"abstract":[{"type":"text","text":"The ASTypedObject class represents a typed object for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASTypedObject"}],"url":"\/documentation\/haishinkit\/astypedobject"},"doc://HaishinKit/documentation/HaishinKit/ASTypedObject/unregister(typeNamed:)":{"role":"symbol","title":"unregister(typeNamed:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"unregister"},{"kind":"text","text":"("},{"kind":"externalParam","text":"typeNamed"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASTypedObject\/unregister(typeNamed:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/astypedobject\/unregister(typenamed:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASUndefined"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asundefined"],"traits":[{"interfaceLanguage":"swift"}]}],"relationshipsSections":[{"identifiers":["doc:\/\/HaishinKit\/s23CustomStringConvertibleP"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The ASUndefined class represents an undefined for ActionScript."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASUndefined"}],"title":"ASUndefined","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:10HaishinKit11ASUndefinedV","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"ASUndefined"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"topicSections":[{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined\/description"]}],"references":{"doc://HaishinKit/documentation/HaishinKit/ASUndefined/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asundefined\/description"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASUndefined":{"role":"symbol","title":"ASUndefined","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASUndefined"}],"abstract":[{"type":"text","text":"The ASUndefined class represents an undefined for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASUndefined"}],"url":"\/documentation\/haishinkit\/asundefined"},"doc://HaishinKit/s23CustomStringConvertibleP":{"type":"unresolvable","title":"Swift.CustomStringConvertible","identifier":"doc:\/\/HaishinKit\/s23CustomStringConvertibleP"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASUndefined"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asundefined"],"traits":[{"interfaceLanguage":"swift"}]}],"relationshipsSections":[{"identifiers":["doc:\/\/HaishinKit\/s23CustomStringConvertibleP"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The ASUndefined class represents an undefined for ActionScript."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASUndefined"}],"title":"ASUndefined","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:10HaishinKit11ASUndefinedV","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"ASUndefined"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"topicSections":[{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined\/description"]}],"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/s23CustomStringConvertibleP":{"type":"unresolvable","title":"Swift.CustomStringConvertible","identifier":"doc:\/\/HaishinKit\/s23CustomStringConvertibleP"},"doc://HaishinKit/documentation/HaishinKit/ASUndefined":{"role":"symbol","title":"ASUndefined","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASUndefined"}],"abstract":[{"type":"text","text":"The ASUndefined class represents an undefined for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASUndefined"}],"url":"\/documentation\/haishinkit\/asundefined"},"doc://HaishinKit/documentation/HaishinKit/ASUndefined/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asundefined\/description"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asundefined\/description"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined\/description","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"CustomStringConvertible.description"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"description","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit11ASUndefinedV11descriptionSSvp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASUndefined":{"role":"symbol","title":"ASUndefined","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASUndefined"}],"abstract":[{"type":"text","text":"The ASUndefined class represents an undefined for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASUndefined"}],"url":"\/documentation\/haishinkit\/asundefined"},"doc://HaishinKit/documentation/HaishinKit/ASUndefined/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asundefined\/description"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asundefined\/description"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined\/description","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"CustomStringConvertible.description"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"description","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit11ASUndefinedV11descriptionSSvp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASUndefined/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asundefined\/description"},"doc://HaishinKit/documentation/HaishinKit/ASUndefined":{"role":"symbol","title":"ASUndefined","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASUndefined"}],"abstract":[{"type":"text","text":"The ASUndefined class represents an undefined for ActionScript."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASUndefined","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASUndefined"}],"url":"\/documentation\/haishinkit\/asundefined"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml"],"traits":[{"interfaceLanguage":"swift"}]}],"relationshipsSections":[{"identifiers":["doc:\/\/HaishinKit\/s23CustomStringConvertibleP","doc:\/\/HaishinKit\/SQ"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"title":"ASXML","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:10HaishinKit5ASXMLV","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"ASXML"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/init(data:)"]},{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/description"]},{"title":"Default Implementations","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations"],"generated":true}],"references":{"doc://HaishinKit/SQ":{"type":"unresolvable","title":"Swift.Equatable","identifier":"doc:\/\/HaishinKit\/SQ"},"doc://HaishinKit/documentation/HaishinKit/ASXML/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxml\/equatable-implementations"},"doc://HaishinKit/s23CustomStringConvertibleP":{"type":"unresolvable","title":"Swift.CustomStringConvertible","identifier":"doc:\/\/HaishinKit\/s23CustomStringConvertibleP"},"doc://HaishinKit/documentation/HaishinKit/ASXML/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance of string."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/init(data:)"},"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/description"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml"],"traits":[{"interfaceLanguage":"swift"}]}],"relationshipsSections":[{"identifiers":["doc:\/\/HaishinKit\/s23CustomStringConvertibleP","doc:\/\/HaishinKit\/SQ"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"title":"ASXML","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:10HaishinKit5ASXMLV","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"ASXML"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/init(data:)"]},{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/description"]},{"title":"Default Implementations","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations"],"generated":true}],"references":{"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"},"doc://HaishinKit/s23CustomStringConvertibleP":{"type":"unresolvable","title":"Swift.CustomStringConvertible","identifier":"doc:\/\/HaishinKit\/s23CustomStringConvertibleP"},"doc://HaishinKit/SQ":{"type":"unresolvable","title":"Swift.Equatable","identifier":"doc:\/\/HaishinKit\/SQ"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxml\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASXML/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance of string."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/init(data:)"},"doc://HaishinKit/documentation/HaishinKit/ASXML/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/description"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/!=(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.!=(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"!=(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:10HaishinKit5ASXMLV","extendedModule":"Swift","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxml\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASXML/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/!=(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/!=(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.!=(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"!=(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:10HaishinKit5ASXMLV","extendedModule":"Swift","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"},"doc://HaishinKit/documentation/HaishinKit/ASXML/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/!=(_:_:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxml\/equatable-implementations"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV","text":"ASXML"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV","text":"ASXML"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/==(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/==(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.==(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"==(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:10HaishinKit5ASXMLV2eeoiySbAC_ACtFZ","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXML/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxml\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASXML/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV","text":"ASXML"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV","text":"ASXML"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/==(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/==(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.==(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"==(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:10HaishinKit5ASXMLV2eeoiySbAC_ACtFZ","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXML/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxml\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/description"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/description","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"CustomStringConvertible.description"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"description","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit5ASXMLV11descriptionSSvp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/description"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/description"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/description","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"CustomStringConvertible.description"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"description","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit5ASXMLV11descriptionSSvp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"},"doc://HaishinKit/documentation/HaishinKit/ASXML/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/description"}}}
|
|
@ -1 +1 @@
|
||||||
{"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/!=(_:_:)","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/==(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"},"doc://HaishinKit/documentation/HaishinKit/ASXML/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASXML/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/!=(_:_:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
{"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/!=(_:_:)","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/==(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"},"doc://HaishinKit/documentation/HaishinKit/ASXML/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXML","preciseIdentifier":"s:10HaishinKit5ASXMLV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASXML/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/!=(_:_:)"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/init(data:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/init(data:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates a new instance of string."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"title":"init(data:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit5ASXMLV4dataACSS_tcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXML/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance of string."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/init(data:)"},"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxml\/init(data:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/init(data:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates a new instance of string."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"title":"init(data:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit5ASXMLV4dataACSS_tcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXML":{"role":"symbol","title":"ASXML","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXML"}],"abstract":[{"type":"text","text":"ActionScript 3.0 introduces a new XML type."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXML"}],"url":"\/documentation\/haishinkit\/asxml"},"doc://HaishinKit/documentation/HaishinKit/ASXML/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance of string."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXML\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxml\/init(data:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument"],"traits":[{"interfaceLanguage":"swift"}]}],"relationshipsSections":[{"identifiers":["doc:\/\/HaishinKit\/s23CustomStringConvertibleP","doc:\/\/HaishinKit\/SQ"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","interfaceLanguage":"swift"},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/init(data:)"]},{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/description"]},{"title":"Default Implementations","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations"],"generated":true}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"title":"ASXMLDocument","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:10HaishinKit13ASXMLDocumentV","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"references":{"doc://HaishinKit/SQ":{"type":"unresolvable","title":"Swift.Equatable","identifier":"doc:\/\/HaishinKit\/SQ"},"doc://HaishinKit/s23CustomStringConvertibleP":{"type":"unresolvable","title":"Swift.CustomStringConvertible","identifier":"doc:\/\/HaishinKit\/s23CustomStringConvertibleP"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/description"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance of string."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/init(data:)"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument"],"traits":[{"interfaceLanguage":"swift"}]}],"relationshipsSections":[{"identifiers":["doc:\/\/HaishinKit\/s23CustomStringConvertibleP","doc:\/\/HaishinKit\/SQ"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","interfaceLanguage":"swift"},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/init(data:)"]},{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/description"]},{"title":"Default Implementations","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations"],"generated":true}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"title":"ASXMLDocument","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:10HaishinKit13ASXMLDocumentV","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/s23CustomStringConvertibleP":{"type":"unresolvable","title":"Swift.CustomStringConvertible","identifier":"doc:\/\/HaishinKit\/s23CustomStringConvertibleP"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance of string."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/init(data:)"},"doc://HaishinKit/SQ":{"type":"unresolvable","title":"Swift.Equatable","identifier":"doc:\/\/HaishinKit\/SQ"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/description"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/!=(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.!=(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"!=(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:10HaishinKit13ASXMLDocumentV","extendedModule":"Swift","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/!=(_:_:)"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/!=(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.!=(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"!=(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:10HaishinKit13ASXMLDocumentV","extendedModule":"Swift","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/!=(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/equatable-implementations"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV","text":"ASXMLDocument"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV","text":"ASXMLDocument"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/==(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/==(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.==(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"==(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:10HaishinKit13ASXMLDocumentV2eeoiySbAC_ACtFZ","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/equatable-implementations"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV","text":"ASXMLDocument"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV","text":"ASXMLDocument"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/==(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/==(_:_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Equatable.==(_:_:)"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"role":"symbol","title":"==(_:_:)","roleHeading":"Operator","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"symbolKind":"op","externalID":"s:10HaishinKit13ASXMLDocumentV2eeoiySbAC_ACtFZ","extendedModule":"HaishinKit","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/Equatable-Implementations":{"role":"collectionGroup","title":"Equatable Implementations","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations","kind":"article","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/equatable-implementations"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/description"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/description","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"CustomStringConvertible.description"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"description","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit13ASXMLDocumentV11descriptionSSvp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/description"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/description"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/description","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"CustomStringConvertible.description"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"description","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit13ASXMLDocumentV11descriptionSSvp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument"]]},"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/description":{"role":"symbol","title":"description","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/description","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/description"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"}}}
|
|
@ -1 +1 @@
|
||||||
{"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/!=(_:_:)","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/==(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/==(_:_:)"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/!=(_:_:)"}}}
|
{"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/!=(_:_:)","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/==(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"HaishinKit"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/!=(_:_:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/==(_:_:)":{"role":"symbol","title":"==(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"=="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"ASXMLDocument","preciseIdentifier":"s:10HaishinKit13ASXMLDocumentV"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/==(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/==(_:_:)"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/init(data:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/init(data:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates a new instance of string."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"title":"init(data:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit13ASXMLDocumentV4dataACSS_tcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance of string."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/init(data:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/asxmldocument\/init(data:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/init(data:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates a new instance of string."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"title":"init(data:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit13ASXMLDocumentV4dataACSS_tcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument/init(data:)":{"role":"symbol","title":"init(data:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"data"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates a new instance of string."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument\/init(data:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/asxmldocument\/init(data:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/ASXMLDocument":{"role":"symbol","title":"ASXMLDocument","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"ASXMLDocument"}],"abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/ASXMLDocument","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ASXMLDocument"}],"url":"\/documentation\/haishinkit\/asxmldocument"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"A"},{"kind":"text","text":">"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/atomic"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"title":"Atomic","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:10HaishinKit6AtomicV","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"Atomic"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/init(_:)"]},{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/value"]},{"title":"Instance Methods","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/mutate(_:)"]}],"references":{"doc://HaishinKit/documentation/HaishinKit/Atomic":{"role":"symbol","title":"Atomic","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Atomic"}],"url":"\/documentation\/haishinkit\/atomic"},"doc://HaishinKit/documentation/HaishinKit/Atomic/init(_:)":{"role":"symbol","title":"init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates an instance of value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/init(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/init(_:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/Atomic/value":{"role":"symbol","title":"value","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"}],"abstract":[{"type":"text","text":"Getter for the value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/value","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/value"},"doc://HaishinKit/documentation/HaishinKit/Atomic/mutate(_:)":{"role":"symbol","title":"mutate(_:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"mutate"},{"kind":"text","text":"(("},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Setter for the value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/mutate(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/mutate(_:)"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"A"},{"kind":"text","text":">"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/atomic"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"title":"Atomic","roleHeading":"Structure","role":"symbol","symbolKind":"struct","externalID":"s:10HaishinKit6AtomicV","modules":[{"name":"HaishinKit"}],"navigatorTitle":[{"kind":"identifier","text":"Atomic"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit"]]},"topicSections":[{"title":"Initializers","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/init(_:)"]},{"title":"Instance Properties","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/value"]},{"title":"Instance Methods","identifiers":["doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/mutate(_:)"]}],"references":{"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/Atomic/mutate(_:)":{"role":"symbol","title":"mutate(_:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"mutate"},{"kind":"text","text":"(("},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Setter for the value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/mutate(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/mutate(_:)"},"doc://HaishinKit/documentation/HaishinKit/Atomic/value":{"role":"symbol","title":"value","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"}],"abstract":[{"type":"text","text":"Getter for the value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/value","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/value"},"doc://HaishinKit/documentation/HaishinKit/Atomic/init(_:)":{"role":"symbol","title":"init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates an instance of value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/init(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/init(_:)"},"doc://HaishinKit/documentation/HaishinKit/Atomic":{"role":"symbol","title":"Atomic","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Atomic"}],"url":"\/documentation\/haishinkit\/atomic"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/atomic\/init(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/init(_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates an instance of value."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":")"}],"title":"init(_:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit6AtomicVyACyxGxcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/Atomic/init(_:)":{"role":"symbol","title":"init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates an instance of value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/init(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/init(_:)"},"doc://HaishinKit/documentation/HaishinKit/Atomic":{"role":"symbol","title":"Atomic","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Atomic"}],"url":"\/documentation\/haishinkit\/atomic"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/atomic\/init(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/init(_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Creates an instance of value."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":")"}],"title":"init(_:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:10HaishinKit6AtomicVyACyxGxcfc","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/Atomic/init(_:)":{"role":"symbol","title":"init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Creates an instance of value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/init(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/init(_:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/Atomic":{"role":"symbol","title":"Atomic","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Atomic"}],"url":"\/documentation\/haishinkit\/atomic"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"mutating"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"mutate"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"transform"},{"kind":"text","text":": ("},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/atomic\/mutate(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/mutate(_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Setter for the value."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"mutate"},{"kind":"text","text":"(("},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"title":"mutate(_:)","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:10HaishinKit6AtomicV6mutateyyyxzXEF","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/Atomic/mutate(_:)":{"role":"symbol","title":"mutate(_:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"mutate"},{"kind":"text","text":"(("},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Setter for the value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/mutate(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/mutate(_:)"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/Atomic":{"role":"symbol","title":"Atomic","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Atomic"}],"url":"\/documentation\/haishinkit\/atomic"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"mutating"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"mutate"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"transform"},{"kind":"text","text":": ("},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/atomic\/mutate(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/mutate(_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Setter for the value."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"mutate"},{"kind":"text","text":"(("},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"title":"mutate(_:)","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:10HaishinKit6AtomicV6mutateyyyxzXEF","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/Atomic/mutate(_:)":{"role":"symbol","title":"mutate(_:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"mutate"},{"kind":"text","text":"(("},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Setter for the value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/mutate(_:)","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/mutate(_:)"},"doc://HaishinKit/documentation/HaishinKit/Atomic":{"role":"symbol","title":"Atomic","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Atomic"}],"url":"\/documentation\/haishinkit\/atomic"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
|
@ -1 +1 @@
|
||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/atomic\/value"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/value","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Getter for the value."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"}],"title":"value","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit6AtomicV5valuexvp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/Atomic/value":{"role":"symbol","title":"value","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"}],"abstract":[{"type":"text","text":"Getter for the value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/value","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/value"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"},"doc://HaishinKit/documentation/HaishinKit/Atomic":{"role":"symbol","title":"Atomic","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Atomic"}],"url":"\/documentation\/haishinkit\/atomic"}}}
|
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/haishinkit\/atomic\/value"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/value","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Getter for the value."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"}],"title":"value","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:10HaishinKit6AtomicV5valuexvp","modules":[{"name":"HaishinKit"}]},"hierarchy":{"paths":[["doc:\/\/HaishinKit\/documentation\/HaishinKit","doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic"]]},"references":{"doc://HaishinKit/documentation/HaishinKit/Atomic":{"role":"symbol","title":"Atomic","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Atomic"}],"abstract":[{"type":"text","text":"Atomic"},{"type":"text","text":" class"}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Atomic"}],"url":"\/documentation\/haishinkit\/atomic"},"doc://HaishinKit/documentation/HaishinKit/Atomic/value":{"role":"symbol","title":"value","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"A"}],"abstract":[{"type":"text","text":"Getter for the value."}],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit\/Atomic\/value","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit\/atomic\/value"},"doc://HaishinKit/documentation/HaishinKit":{"role":"collection","title":"HaishinKit","abstract":[],"identifier":"doc:\/\/HaishinKit\/documentation\/HaishinKit","kind":"symbol","type":"topic","url":"\/documentation\/haishinkit"}}}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue