KYCsolution
Kanalga Telegram’da o‘tish
Ko'proq ko'rsatish
3 316
Obunachilar
Ma'lumot yo'q24 soatlar
+277 kunlar
+3130 kunlar
Ma'lumot yuklanmoqda...
O'xshash kanallar
Taglar buluti
Ma'lumot yo'q
Muammo bormi? Iltimos, sahifani yangilang yoki bizning qo'llab-quvvatlash boshqaruvchimizga murojaat qiling>.
Kirish va chiqish esdaliklari
---
---
---
---
---
---
Obunachilarni jalb qilish
Sentabr '24
Sentabr '24
+70
0 kanalda
Avgust '24
+32
0 kanalda
Get PRO
Iyul '24
+7
0 kanalda
Get PRO
Iyun '24
+112
0 kanalda
Get PRO
May '24
+72
0 kanalda
Get PRO
Aprel '24
+65
0 kanalda
Get PRO
Mart '24
+169
0 kanalda
Get PRO
Fevral '24
+102
0 kanalda
Get PRO
Yanvar '24
+101
0 kanalda
Get PRO
Dekabr '23
+94
0 kanalda
Get PRO
Noyabr '23
+75
0 kanalda
Get PRO
Oktabr '23
+88
0 kanalda
Get PRO
Sentabr '23
+121
0 kanalda
Get PRO
Avgust '23
+80
0 kanalda
Get PRO
Iyul '23
+85
0 kanalda
Get PRO
Iyun '23
+97
0 kanalda
Get PRO
May '23
+103
0 kanalda
Get PRO
Aprel '23
+131
0 kanalda
Get PRO
Mart '23
+120
0 kanalda
Get PRO
Fevral '23
+45
0 kanalda
Get PRO
Yanvar '23
+78
0 kanalda
Get PRO
Dekabr '22
+103
0 kanalda
Get PRO
Noyabr '22
+146
0 kanalda
Get PRO
Oktabr '22
+165
0 kanalda
Get PRO
Sentabr '22
+215
0 kanalda
Get PRO
Avgust '22
+242
0 kanalda
Get PRO
Iyul '22
+74
0 kanalda
Get PRO
Iyun '22
+58
0 kanalda
Get PRO
May '22
+47
0 kanalda
Get PRO
Aprel '22
+73
0 kanalda
Get PRO
Mart '22
+91
0 kanalda
Get PRO
Fevral '22
+72
0 kanalda
Get PRO
Yanvar '22
+78
0 kanalda
Get PRO
Dekabr '21
+52
0 kanalda
Get PRO
Noyabr '21
+55
0 kanalda
Get PRO
Oktabr '21
+99
0 kanalda
Get PRO
Sentabr '21
+158
0 kanalda
Get PRO
Avgust '21
+132
0 kanalda
Get PRO
Iyul '21
+122
0 kanalda
Get PRO
Iyun '21
+39
0 kanalda
Get PRO
May '21
+30
0 kanalda
Get PRO
Aprel '21
+66
0 kanalda
Get PRO
Mart '21
+47
0 kanalda
Get PRO
Fevral '21
+832
0 kanalda
| Sana | Obunachilarni jalb qilish | Esdaliklar | Kanallar | |
| 27 Sentabr | +4 | |||
| 26 Sentabr | +2 | |||
| 25 Sentabr | +6 | |||
| 24 Sentabr | +16 | |||
| 23 Sentabr | +4 | |||
| 22 Sentabr | +3 | |||
| 21 Sentabr | +4 | |||
| 20 Sentabr | 0 | |||
| 19 Sentabr | +2 | |||
| 18 Sentabr | +4 | |||
| 17 Sentabr | +3 | |||
| 16 Sentabr | +2 | |||
| 15 Sentabr | 0 | |||
| 14 Sentabr | +2 | |||
| 13 Sentabr | +3 | |||
| 12 Sentabr | 0 | |||
| 11 Sentabr | +2 | |||
| 10 Sentabr | +6 | |||
| 09 Sentabr | +2 | |||
| 08 Sentabr | +4 | |||
| 07 Sentabr | +1 | |||
| 06 Sentabr | 0 | |||
| 05 Sentabr | 0 | |||
| 04 Sentabr | 0 | |||
| 03 Sentabr | 0 | |||
| 02 Sentabr | 0 | |||
| 01 Sentabr | 0 |
Kanal postlari
| 2 | Matn yo'q... | 460 |
| 3 | Matn yo'q... | 553 |
| 4 | 有个公司注册订单的请主动联系我,号没了,找不到你 | 337 |
| 5 | Matn yo'q... | 636 |
| 6 | 支持hls流所以延迟可以低于1s | 624 |
| 7 | 把这个编译了就可以用了 | 617 |
| 8 | 实现ios推流的全局虚拟相机,同时带有exif | 600 |
| 9 | 这个推流虚拟相机的功能在越狱的iOS设备上实现,可以支持较广泛的iOS版本。通常,越狱工具是基于iOS的具体版本而变化的,因此兼容的iOS版本取决于当前可用的越狱工具。以下是大致的支持情况:
• iOS 10 - iOS 12: 越狱工具(如unc0ver、Electra)稳定支持这些版本。虚拟相机功能应该在这些系统上正常运行。
• iOS 13 - iOS 14: 越狱工具如checkra1n和unc0ver也支持这些版本,虚拟相机功能依赖的系统API仍然可用。
• iOS 15 - iOS 16: 对于这些较新的系统,checkra1n 仍然可以支持部分设备的越狱,特别是使用A11芯片的设备(如iPhone X)。unc0ver等其他工具也在不断更新,但并不全面支持最新设备。虚拟相机功能在这些版本上有可能运行,但可能需要一些额外调整。
• iOS 17 及以上: 当前对iOS 17及更高版本的越狱支持较为有限,因此这类推流虚拟相机功能可能无法立即在这些版本上实现,或需要等待更成熟的越狱工具发布。 | 586 |
| 10 | Control File (control)
Package: com.yourname.virtualcamera
Name: VirtualCamera
Version: 1.0-1
Architecture: iphoneos-arm
Description: A virtual camera for jailbroken devices, supporting HLS streams, local video, and EXIF metadata handling.
Maintainer: Your Name <your.email@example.com>
Author: Your Name
Section: Tweaks
Depends: mobilesubstrate | 515 |
| 11 | Makefile
ARCHS = arm64 arm64e
TARGET = iphone:clang:latest:13.0
THEOS_DEVICE_IP = localhost
THEOS_DEVICE_PORT = 22
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = VirtualCamera
VirtualCamera_FILES = Tweak.xm
VirtualCamera_FRAMEWORKS = UIKit AVFoundation CoreMedia MediaPlayer ImageIO
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard" | 482 |
| 12 | - (void)extractExifFromMedia:(NSURL *)mediaURL {
CGImageSourceRef source = CGImageSourceCreateWithURL((__bridge CFURLRef)mediaURL, NULL);
NSDictionary *metadata = (__bridge NSDictionary *)CGImageSourceCopyPropertiesAtIndex(source, 0, NULL);
if (metadata) {
NSDictionary *exifData = metadata[(NSString *)kCGImagePropertyExifDictionary];
NSString *cameraMake = exifData[(NSString *)kCGImagePropertyExifMake];
NSString *cameraModel = exifData[(NSString *)kCGImagePropertyExifModel];
NSString *originalDateTime = exifData[(NSString *)kCGImagePropertyExifDateTimeOriginal];
[self setCustomExifWithMake:cameraMake model:cameraModel dateTime:originalDateTime];
}
CFRelease(source);
}
- (void)setCustomExifWithMake:(NSString *)make model:(NSString *)model dateTime:(NSString *)dateTime {
NSLog(@"设置EXIF: Make: %@, Model: %@, DateTime: %@", make, model, dateTime);
}
#pragma mark - 视频预览层
- (void)setupPreviewLayer {
g_previewLayer = [[AVSampleBufferDisplayLayer alloc] init];
g_previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
g_previewLayer.frame = self.view.bounds;
[self.view.layer addSublayer:g_previewLayer];
}
- (Here's the continuation and final version of the Tweak.xm file, ensuring the jailbroken global virtual camera project is fully integrated with HLS, EXIF metadata, and camera API hooks.
### 1. Tweak.xm (continued)
- (void)removePreviewLayer {
[g_previewLayer removeFromSuperlayer];
g_previewLayer = nil;
}
@end
#pragma mark - 系统相机钩子 (Hooking the Camera API)
%hook AVCaptureSession
- (void)startRunning {
NSLog(@"启动系统摄像头,并替换为虚拟相机内容");
VirtualCameraViewController *vc = [[VirtualCameraViewController alloc] init];
[vc startVirtualCamera];
%orig; // 可根据需求禁用系统摄像头
}
- (void)stopRunning {
NSLog(@"停止系统摄像头并关闭虚拟相机");
VirtualCameraViewController *vc = [[VirtualCameraViewController alloc] init];
[vc stopVirtualCamera];
%orig;
}
%end | 389 |
| 13 | - (void)selectStreamSource {
self.selectedVideoSource = @"stream";
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"输入HLS流媒体URL"
message:nil
preferredStyle:UIAlertControllerStyleAlert];
[alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
textField.placeholder = @"http://your-server-ip/live/stream.m3u8";
}];
UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
UITextField *urlField = alertController.textFields.firstObject;
self.streamURL = urlField.text;
NSLog(@"设置流媒体源 URL: %@", self.streamURL);
}];
[alertController addAction:confirmAction];
[self presentViewController:alertController animated:YES completion:nil];
}
- (void)setExifData {
[self openPhotoLibraryForExif];
}
#pragma mark - 启动/关闭虚拟相机
- (void)startVirtualCamera {
if (g_cameraRunning) return;
if ([self.selectedVideoSource isEqualToString:@"local"]) {
NSLog(@"使用本地视频源启动虚拟相机");
// 启动本地视频播放
} else if ([self.selectedVideoSource isEqualToString:@"stream"]) {
NSLog(@"使用流媒体源启动虚拟相机");
NSURL *streamURL = [NSURL URLWithString:self.streamURL];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:streamURL];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handlePlaybackError:)
name:AVPlayerItemFailedToPlayToEndTimeNotification
object:playerItem];
g_player = [AVPlayer playerWithPlayerItem:playerItem];
// 添加视频预览层
g_previewLayer = [[AVSampleBufferDisplayLayer alloc] init];
g_previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
g_previewLayer.frame = self.view.bounds;
[self.view.layer addSublayer:g_previewLayer];
[g_player play];
}
g_cameraRunning = YES;
}
- (void)handlePlaybackError:(NSNotification *)notification {
NSError *error = [notification.userInfo objectForKey:AVPlayerItemFailedToPlayToEndTimeErrorKey];
NSLog(@"播放 HLS 流时发生错误: %@", error.localizedDescription);
// 显示用户友好错误信息
}
- (void)stopVirtualCamera {
if (!g_cameraRunning) return;
[g_player pause];
g_player = nil;
[self removePreviewLayer];
g_cameraRunning = NO;
}
#pragma mark - 相册选择和EXIF提取
- (void)openPhotoLibraryForVideoSource {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
picker.mediaTypes = @[(NSString *)kUTTypeMovie];
picker.delegate = self;
[self presentViewController:picker animated:YES completion:nil];
}
- (void)openPhotoLibraryForExif {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
picker.mediaTypes = @[(NSString *)kUTTypeImage, (NSString *)kUTTypeMovie];
picker.delegate = self;
[self presentViewController:picker animated:YES completion:nil];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
NSURL *mediaURL = info[UIImagePickerControllerMediaURL];
if ([self.selectedVideoSource isEqualToString:@"local"]) {
NSLog(@"处理本地视频源: %@", mediaURL);
} else {
NSLog(@"处理EXIF文件: %@", mediaURL);
[self extractExifFromMedia:mediaURL];
}
[self dismissViewControllerAnimated:YES completion:nil];
} | 361 |
| 14 | Tweak.xm(主文件)
`
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#import <MobileSubstrate/MobileSubstrate.h>
#import <CoreMedia/CoreMedia.h>
#import <MediaPlayer/MediaPlayer.h>
#import <ImageIO/ImageIO.h>
static BOOL g_cameraRunning = NO;
static AVPlayer *g_player = nil;
static AVSampleBufferDisplayLayer *g_previewLayer = nil;
@interface VirtualCameraViewController : UIViewController
@property (nonatomic, strong) UIButton *selectVideoSourceButton;
@property (nonatomic, strong) UIButton *selectStreamSourceButton;
@property (nonatomic, strong) UIButton *setExifButton;
@property (nonatomic, strong) UIButton *startCameraButton;
@property (nonatomic, strong) UIButton *stopCameraButton;
@property (nonatomic, strong) NSString *selectedVideoSource; // 视频源类型
@property (nonatomic, strong) NSString *streamURL; // HLS 流 URL
@end
@implementation VirtualCameraViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self setupUI];
}
#pragma mark - Setup UI
- (void)setupUI {
self.view.backgroundColor = [UIColor whiteColor];
// 选择本地视频源按钮
self.selectVideoSourceButton = [UIButton buttonWithType:UIButtonTypeSystem];
[self.selectVideoSourceButton setTitle:@"选择本地视频源" forState:UIControlStateNormal];
self.selectVideoSourceButton.frame = CGRectMake(50, 100, 300, 50);
[self.selectVideoSourceButton addTarget:self action:@selector(selectLocalVideoSource) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.selectVideoSourceButton];
// 选择流媒体源按钮
self.selectStreamSourceButton = [UIButton buttonWithType:UIButtonTypeSystem];
[self.selectStreamSourceButton setTitle:@"选择流媒体源" forState:UIControlStateNormal];
self.selectStreamSourceButton.frame = CGRectMake(50, 170, 300, 50);
[self.selectStreamSourceButton addTarget:self action:@selector(selectStreamSource) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.selectStreamSourceButton];
// 设置EXIF按钮
self.setExifButton = [UIButton buttonWithType:UIButtonTypeSystem];
[self.setExifButton setTitle:@"设置EXIF信息" forState:UIControlStateNormal];
self.setExifButton.frame = CGRectMake(50, 240, 300, 50);
[self.setExifButton addTarget:self action:@selector(setExifData) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.setExifButton];
// 启动虚拟相机按钮
self.startCameraButton = [UIButton buttonWithType:UIButtonTypeSystem];
[self.startCameraButton setTitle:@"启动虚拟相机" forState:UIControlStateNormal];
self.startCameraButton.frame = CGRectMake(50, 310, 300, 50);
[self.startCameraButton addTarget:self action:@selector(startVirtualCamera) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.startCameraButton];
// 关闭虚拟相机按钮
self.stopCameraButton = [UIButton buttonWithType:UIButtonTypeSystem];
[self.stopCameraButton setTitle:@"关闭虚拟相机" forState:UIControlStateNormal];
self.stopCameraButton.frame = CGRectMake(50, 380, 300, 50);
[self.stopCameraButton addTarget:self action:@selector(stopVirtualCamera) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.stopCameraButton];
}
#pragma mark - 视频源选择逻辑
- (void)selectLocalVideoSource {
self.selectedVideoSource = @"local";
[self openPhotoLibraryForVideoSource];
} | 437 |
| 15 | 完整的越狱版全局虚拟相机项目代码,集成了最新的HLS流媒体功能、EXIF元数据处理以及与系统相机API的挂钩,下面是代码的每个部分。 | 589 |
| 16 | 有的人自动被t了请自己重新加入下 | 699 |
| 17 | https://t.me/+huklObLcISVkMTBh | 914 |
| 18 | https://t.me/boost/KYCsolutionrss | 756 |
| 19 | 恢复用户名 | 944 |
| 20 | @KYCsolution | 942 |
