दिलचस्प पोस्ट
क्या फ़ंक्शन के अंदर आयात करने के लिए अजगर? कुंज: स्थापना के बाद "आदेश नहीं मिला" मोचा / चाई की उम्मीद है। फेंक दिया त्रुटियों को पकड़ने के लिए नहीं PhpMyAdmin के लिए उपयोगकर्ता 'रूट' @ 'लोकलहोस्ट' के लिए पहुंच पर निषेध अस्वीकृत पायथन में स्ट्रिंग से पूर्णांक मान कैसे प्राप्त करें? अन्य ड्रॉपडाउन सूची के चयन के आधार पर एक ड्रॉपडाउन सूची को पॉप्युलेट करें रूबी में ग्रिड उत्पन्न करना Jquery: कैसे सो जाओ या देरी? अजगर के eval () बनाम ast.literal_eval () का उपयोग करना? हवाई कांच खिड़की पर गैर क्लाइंट पेंटिंग एंड्रॉइड – बटन दोहराएँ कार्रवाई को पकड़ो वीबीए का प्रयोग करके सभी सबफ़ोल्डर्स के माध्यम से लूप एक MongoDB संग्रह में परिवर्तनों के लिए कैसे सुनने के लिए? क्या कभी एक एंकर के भीतर एक div डाल रहा है? एक स्ट्रिंग में बाइट्स कनवर्ट करें?

IPhone पर मशाल / फ्लैश चालू करें

मुझे पता है कि फ्लैश को चालू करने और इसे iPhone 4 पर रखने का एकमात्र तरीका वीडियो कैमरा को चालू करना है। मुझे हालांकि कोड का पूरा यकीन नहीं है। मैं यह कोशिश कर रहा हूं:

-(IBAction)turnTorchOn { AVCaptureSession *captureSession = [[AVCaptureSession alloc] init]; AVCaptureDevice *videoCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; NSError *error = nil; AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:videoCaptureDevice error:&error]; if (videoInput) { [captureSession addInput:videoInput]; AVCaptureVideoDataOutput* videoOutput = [[AVCaptureVideoDataOutput alloc] init]; [videoOutput setSampleBufferDelegate:self queue:dispatch_get_current_queue()]; [captureSession addOutput:videoOutput]; [captureSession startRunning]; videoCaptureDevice.torchMode = AVCaptureTorchModeOn; } } 

क्या कोई जानता है कि यह काम करेगा या क्या मुझे कुछ भी याद आ रहा है? (मेरे पास आईफोन 4 नहीं है, पर परीक्षण करने के लिए-कुछ नए एपीआई की कोशिश कर रहा है)।

धन्यवाद

वेब के समाधान से एकत्रित समाधान "IPhone पर मशाल / फ्लैश चालू करें"

lockforConfiguration को आपके कोड में सेट किया जाता है, जहां आप अपने AVCaptureDevice को घोषित करते हैं एक संपत्ति है।

 [videoCaptureDevice lockForConfiguration:nil]; 

यहां एक छोटा संस्करण है जिसे आप प्रकाश को चालू या बंद करने के लिए उपयोग कर सकते हैं:

 AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; if ([device hasTorch]) { [device lockForConfiguration:nil]; [device setTorchMode:AVCaptureTorchModeOn]; // use AVCaptureTorchModeOff to turn off [device unlockForConfiguration]; } 

अद्यतन: (मार्च 2015)

आईओएस 6.0 और बाद में, आप निम्नलिखित विधि का उपयोग करके मशाल की चमक या स्तर को नियंत्रित कर सकते हैं:

 - (void)setTorchToLevel:(float)torchLevel { AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; if ([device hasTorch]) { [device lockForConfiguration:nil]; if (torchLevel <= 0.0) { [device setTorchMode:AVCaptureTorchModeOff]; } else { if (torchLevel >= 1.0) torchLevel = AVCaptureMaxAvailableTorchLevel; BOOL success = [device setTorchModeOnWithLevel:torchLevel error:nil]; } [device unlockForConfiguration]; } } 

आप setTorchModeOnWithLevel: से वापसी मूल्य ( success ) की निगरानी भी कर सकते हैं setTorchModeOnWithLevel: यदि आप स्तर बहुत अधिक सेट करने की कोशिश करते हैं और मशाल ओवरहेटिंग हो रही है, तो आपको विफल हो सकता है उस स्थिति में AVCaptureMaxAvailableTorchLevel के स्तर को स्थापित करने से स्तर को उच्चतम स्तर तक सेट किया जाएगा जो कि मशाल के तापमान को दिया जाता है।

iWasRobbed का जवाब महान है, सिवाय एक AVCapture सत्र हर समय पृष्ठभूमि में चल रहा है। मेरे आईफोन 4 एस पर यह उपकरण के अनुसार लगभग 12% सीपीयू पावर लेता है, इसलिए मेरा ऐप एक मिनट में लगभग 1% बैटरी लेता है दूसरे शब्दों में अगर ए वी कैप्चर के लिए डिवाइस तैयार है तो यह सस्ता नहीं है।

मेरे ऐप के नीचे दिए गए कोड का इस्तेमाल करना 0.187% मिनट की आवश्यकता है ताकि बैटरी जीवन 5x से अधिक लंबा हो।

यह कोड किसी भी डिवाइस पर ठीक काम करता है (दोनों 3GS (कोई फ्लैश नहीं) और 4 एस पर परीक्षण किया गया) सिम्युलेटर में 4.3 पर भी परीक्षण किया।

 #import <AVFoundation/AVFoundation.h> - (void) turnTorchOn:(BOOL)on { Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice"); if (captureDeviceClass != nil) { AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; if ([device hasTorch] && [device hasFlash]){ [device lockForConfiguration:nil]; if (on) { [device setTorchMode:AVCaptureTorchModeOn]; [device setFlashMode:AVCaptureFlashModeOn]; torchIsOn = YES; } else { [device setTorchMode:AVCaptureTorchModeOff]; [device setFlashMode:AVCaptureFlashModeOff]; torchIsOn = NO; } [device unlockForConfiguration]; } } } 

नीचे एक बेहतर जवाब देखें: https://stackoverflow.com/a/10054088/308315


पुराना उत्तर:

सबसे पहले, आपके ऐप Delegate .h फ़ाइल में:

 #import <AVFoundation/AVFoundation.h> @interface AppDelegate : NSObject <UIApplicationDelegate> { AVCaptureSession *torchSession; } @property (nonatomic, retain) AVCaptureSession * torchSession; @end 

फिर अपने AppDelegate .m फ़ाइल में:

 @implementation AppDelegate @synthesize torchSession; - (void)dealloc { [torchSession release]; [super dealloc]; } - (id) init { if ((self = [super init])) { // initialize flashlight // test if this class even exists to ensure flashlight is turned on ONLY for iOS 4 and above Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice"); if (captureDeviceClass != nil) { AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; if ([device hasTorch] && [device hasFlash]){ if (device.torchMode == AVCaptureTorchModeOff) { NSLog(@"Setting up flashlight for later use..."); AVCaptureDeviceInput *flashInput = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil]; AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init]; AVCaptureSession *session = [[AVCaptureSession alloc] init]; [session beginConfiguration]; [device lockForConfiguration:nil]; [session addInput:flashInput]; [session addOutput:output]; [device unlockForConfiguration]; [output release]; [session commitConfiguration]; [session startRunning]; [self setTorchSession:session]; [session release]; } } } } return self; } 

फिर कभी भी आप इसे चालू करना चाहते हैं, बस ऐसा कुछ करें:

 // test if this class even exists to ensure flashlight is turned on ONLY for iOS 4 and above Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice"); if (captureDeviceClass != nil) { AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; [device lockForConfiguration:nil]; [device setTorchMode:AVCaptureTorchModeOn]; [device setFlashMode:AVCaptureFlashModeOn]; [device unlockForConfiguration]; } 

और इसे बंद करने के लिए समान:

 // test if this class even exists to ensure flashlight is turned on ONLY for iOS 4 and above Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice"); if (captureDeviceClass != nil) { AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; [device lockForConfiguration:nil]; [device setTorchMode:AVCaptureTorchModeOff]; [device setFlashMode:AVCaptureFlashModeOff]; [device unlockForConfiguration]; } 

मैंने एक मशाल प्लगइन लिखा है जो कॉर्डोबा 2.2.0 के लिए काम करता है। आप इसे यहां देख सकते हैं:

https://github.com/tomschreck/iOS-Torch-Plugin

आईओएस 6.0 और इसके बाद के संस्करण से, मशाल फ्लैश चालू / बंद करने से,

 - (void) toggleFlash { AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; if ([device hasTorch] && [device hasFlash]){ [device lockForConfiguration:nil]; [device setFlashMode:(device.flashActive) ? AVCaptureFlashModeOff : AVCaptureFlashModeOn]; [device setTorchMode:(device.torchActive) ? AVCaptureTorchModeOff : AVCaptureTorchModeOn]; [device unlockForConfiguration]; } } 

पीएस यह दृष्टिकोण केवल सुझाव है अगर आपके पास कार्य बंद / बंद नहीं है याद रखें कि एक और विकल्प Auto यानी AVCaptureFlashModeAuto और AVCaptureTorchModeAuto साथ ही ऑटो मोड का समर्थन करने के लिए, आप वर्तमान मोड का ट्रैक रख सकते हैं और फ्लैश और मशाल के उस परिवर्तन मोड के आधार पर।

स्विफ्ट 2.0 संस्करण:

 func setTorchLevel(torchLevel: Float) { self.captureSession?.beginConfiguration() defer { self.captureSession?.commitConfiguration() } if let device = backCamera?.device where device.hasTorch && device.torchAvailable { do { try device.lockForConfiguration() defer { device.unlockForConfiguration() } if torchLevel <= 0.0 { device.torchMode = .Off } else if torchLevel >= 1.0 { try device.setTorchModeOnWithLevel(min(torchLevel, AVCaptureMaxAvailableTorchLevel)) } } catch let error { print("Failed to set up torch level with error \(error)") return } } } 
 //import fremework in .h file #import <AVFoundation/AVFoundation.h> { AVCaptureSession *torchSession; } @property(nonatomic,retain)AVCaptureSession *torchSession; -(IBAction)onoff:(id)sender; //implement in .m file @synthesize torchSession; -(IBAction)onoff:(id)sender { AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; if ([device hasTorch] && [device hasFlash]) { if (device.torchMode == AVCaptureTorchModeOff) { [button setTitle:@"OFF" forState:UIControlStateNormal]; AVCaptureDeviceInput *flashInput = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil]; AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init]; AVCaptureSession *session = [[AVCaptureSession alloc] init]; [session beginConfiguration]; [device lockForConfiguration:nil]; [device setTorchMode:AVCaptureTorchModeOn]; [device setFlashMode:AVCaptureFlashModeOn]; [session addInput:flashInput]; [session addOutput:output]; [device unlockForConfiguration]; [output release]; [session commitConfiguration]; [session startRunning]; [self setTorchSession:session]; [session release]; } else { [button setTitle:@"ON" forState:UIControlStateNormal]; [torchSession stopRunning]; } } } - (void)dealloc { [torchSession release]; [super dealloc]; } 

यह काम बहुत अच्छी तरह से है .. आशा है कि यह किसी की सहायता करे!

 -(IBAction)flashlight:(id)sender { AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; if ([device hasTorch] && [device hasFlash]){ if (device.torchMode == AVCaptureTorchModeOff) { [sender setTitle:@"Torch Off" forState:UIControlStateNormal]; AVCaptureDeviceInput *flashInput = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil]; AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init]; AVCaptureSession *cam = [[AVCaptureSession alloc] init]; [cam beginConfiguration]; [device lockForConfiguration:nil]; [device setTorchMode:AVCaptureTorchModeOn]; [device setFlashMode:AVCaptureFlashModeOn]; [cam addInput:flashInput]; [cam addOutput:output]; [device unlockForConfiguration]; [cam commitConfiguration]; [cam startRunning]; [self setTorchSession:cam]; } else { [sender setTitle:@"Torch On" forState:UIControlStateNormal]; [_torchSession stopRunning]; } } } 

स्विफ्ट 4 के लिए इसका इस्तेमाल करें

 func toggleFlash() { guard let device = AVCaptureDevice.default(for: AVMediaType.video) else {return} if device.hasTorch { do { try device.lockForConfiguration() if device.torchMode == AVCaptureDevice.TorchMode.on { device.torchMode = AVCaptureDevice.TorchMode.off //AVCaptureDevice.TorchModeAVCaptureDevice.TorchMode.off } else { do { try device.setTorchModeOn(level: 1.0) } catch { print(error) } } device.unlockForConfiguration() } catch { print(error) } } }