Я не смотрел исходный код VBulletin за некоторое время, но способ, которым они занимались в 2003 году, заключался в том, чтобы встроить вызов на свой сервер внутри кода. IIRC, он был на очень длинной строке кода (например, 200-300 + символов долго) и был разбит на несколько конкатенаций строк и т. Д.
Он не сделал ничего «плохого», если вы его пиратствовали - форум все еще работал на 100%. Но IP-адрес вашего сервера был зарегистрирован вместе с другой информацией, и они использовали это для расследования и принятия юридических мер.
Ваш номер лицензии был встроен в этот вызов, чтобы они могли легко отслеживать количество IP-адресов / веб-сайтов, на которых была запущена данная лицензионная копия.
Я только что проверил документацию онлайн, и метод naturalSize
устарел для объекта AVAsset. Однако всегда должен быть AVAssetTrack, который ссылается на AVAsset, а AVAssetTrack имеет метод naturalSize
, который вы можете вызвать.
naturalSize
Естественные размеры медиаданных, на которые ссылается дорожка. (только для чтения)
@property (неатомарный, только для чтения) CGSize naturalSize
Доступность
Доступно в iOS 4.0 и более поздних версиях. Объявлено в AVAssetTrack.h
Разрешение в Swift 3:
func resolutionSizeForLocalVideo(url:NSURL) -> CGSize? {
guard let track = AVAsset(URL: url).tracksWithMediaType(AVMediaTypeVideo).first else { return nil }
let size = CGSizeApplyAffineTransform(track.naturalSize, track.preferredTransform)
return CGSize(width: fabs(size.width), height: fabs(size.height))
}
Для Swift 4:
func resolutionSizeForLocalVideo(url:NSURL) -> CGSize? {
guard let track = AVAsset(url: url as URL).tracks(withMediaType: AVMediaType.video).first else { return nil }
let size = track.naturalSize.applying(track.preferredTransform)
return CGSize(width: fabs(size.width), height: fabs(size.height))
}
Решения без preferredTransform
не возвращают правильные значения для некоторых видео на последних устройствах!
Предупреждение об устаревании в официальной документации предлагает: «Вместо этого используйте naturalSize
и preferredTransform
, при необходимости, видеодорожки ресурса (см. Также tracksWithMediaType:
»). ). "
Я изменил свой код с:
CGSize size = [movieAsset naturalSize];
на
CGSize size = [[[movieAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] naturalSize];
Теперь он менее симпатичный и менее безопасный, но не сломается, когда они уронят этот код. метод.
Предупреждение об устаревании гласит:
Use the naturalSize and preferredTransform, as appropriate,
of the asset’s video tracks instead (see also tracksWithMediaType:).
Итак, нам нужен AVAssetTrack , и мы хотим, чтобы его naturalSize и предпочитали Transform . Доступ к этому можно получить с помощью следующего:
AVAssetTrack *track = [[asset tracksWithMediaType:AVMediaTypeVideo] firstObject];
CGSize dimensions = CGSizeApplyAffineTransform(track.naturalSize, track.preferredTransform);
актив , очевидно, ваш AVAsset .
Чтобы получить размерность AVAsset
, вы должны рассчитать объединение всех визуальных дорожек визуальных дорожек (после применения их соответствующего предпочтительного преобразования):
CGRect unionRect = CGRectZero;
for (AVAssetTrack *track in [asset tracksWithMediaCharacteristic:AVMediaCharacteristicVisual]) {
CGRect trackRect = CGRectApplyAffineTransform(CGRectMake(0.f,
0.f,
track.naturalSize.width,
track.naturalSize.height),
track.preferredTransform);
unionRect = CGRectUnion(unionRect, trackRect);
}
CGSize naturalSize = unionRect.size;
Методы, основанные на CGSizeApplyAffineTransform
, терпят неудачу когда ваш ресурс содержит треки с нетривиальным аффинным преобразованием (например, повороты на 45 градусов) или если ваш ресурс содержит треки с различным происхождением (например, два трека, воспроизводимые рядом с началом второго трека, увеличиваются по ширине первого дорожка).
См .: MediaPlayerPrivateAVFoundationCF::sizeChanged()
на https://opensource.apple.com/source/WebCore/WebCore-7536.30.2/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp
Это довольно простое расширение для AVAsset
в Swift 4 , чтобы получить размер видео, если доступно:
extension AVAsset {
var screenSize: CGSize? {
if let track = tracks(withMediaType: .video).first {
let size = __CGSizeApplyAffineTransform(track.naturalSize, track.preferredTransform)
return CGSize(width: fabs(size.width), height: fabs(size.height))
}
return nil
}
}