Предварительный просмотр камеры замораживает на одной кадре (черное/частично отображаемое изображение), а прямая подача камеры никогда не запускается. Пользовательский интерфейс остается отзывчивым, но AvcaptureSession не доставляет кадры после инициализации. По сути, предварительный просмотр показывает несвежая или замороженная рама вместо живого видео. < /P>
func startReceivingUpdates() {
videoFrameService.delegate = self
cameraService.delegate = self
}
func stopReceivingUpdates() {
videoFrameService.delegate = nil
cameraService.delegate = nil
}
< /code>
Они вызываются в Onpear и Ondisappear представления соответственно < /p>
private func configureCaptureSession() {
guard status == .unconfigured else {
return
}
session.beginConfiguration()
defer {
session.commitConfiguration()
}
for input in session.inputs {
session.removeInput(input)
}
let device = AVCaptureDevice.default(
.builtInWideAngleCamera,
for: .video,
position: cameraPosition)
guard let camera = device else {
set(error: .cameraUnavailable)
status = .failed
return
}
do {
let cameraInput = try AVCaptureDeviceInput(device: camera)
if session.canAddInput(cameraInput) {
session.addInput(cameraInput)
} else {
set(error: .cannotAddInput)
status = .failed
return
}
if let audioCaptureDevice = audioCaptureDevice {
let audioInput = try AVCaptureDeviceInput(device: audioCaptureDevice)
if session.canAddInput(audioInput) {
session.addInput(audioInput)
}
}
} catch {
set(error: .createCaptureInput(error))
status = .failed
return
}
session.outputs.forEach { output in
session.removeOutput(output)
}
if session.canAddOutput(videoOutput) {
session.addOutput(videoOutput)
videoOutput.videoSettings =
[kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA]
let videoConnection = videoOutput.connection(with: .video)
videoConnection?.videoOrientation = .portrait
videoConnection?.isVideoMirrored = cameraPosition == .front
} else {
set(error: .cannotAddOutput)
status = .failed
return
}
if session.canAddOutput(audioOutput) {
session.addOutput(audioOutput)
}
if session.canAddOutput(photoOutput) {
session.addOutput(photoOutput)
let outputConnection = photoOutput.connection(with: .video)
if cameraPosition == .front {
outputConnection?.automaticallyAdjustsVideoMirroring = false
outputConnection?.isVideoMirrored = true
} else {
outputConnection?.automaticallyAdjustsVideoMirroring = false
outputConnection?.isVideoMirrored = false
}
}
status = .configured
}
< /code>
extension VideoFrameService: AVCaptureVideoDataOutputSampleBufferDelegate, AVCaptureAudioDataOutputSampleBufferDelegate {
func captureOutput(
_ output: AVCaptureOutput,
didOutput sampleBuffer: CMSampleBuffer,
from connection: AVCaptureConnection
) {
DispatchQueue.main.async {
self.delegate?.update(output: output, sampleBuffer: sampleBuffer)
}
}
}
< /code>
Click to see the image
what will be the root cause for this. and how to solve this
Подробнее здесь: https://stackoverflow.com/questions/797 ... howing-liv
Предварительный просмотр камеры AvcaptureSession FRESTIONS на одном кадре вместо того, чтобы показывать живое видео ⇐ IOS
Программируем под IOS
1756733244
Anonymous
Предварительный просмотр камеры замораживает на одной кадре (черное/частично отображаемое изображение), а прямая подача камеры никогда не запускается. Пользовательский интерфейс остается отзывчивым, но AvcaptureSession не доставляет кадры после инициализации. По сути, предварительный просмотр показывает несвежая или замороженная рама вместо живого видео. < /P>
func startReceivingUpdates() {
videoFrameService.delegate = self
cameraService.delegate = self
}
func stopReceivingUpdates() {
videoFrameService.delegate = nil
cameraService.delegate = nil
}
< /code>
Они вызываются в Onpear и Ondisappear представления соответственно < /p>
private func configureCaptureSession() {
guard status == .unconfigured else {
return
}
session.beginConfiguration()
defer {
session.commitConfiguration()
}
for input in session.inputs {
session.removeInput(input)
}
let device = AVCaptureDevice.default(
.builtInWideAngleCamera,
for: .video,
position: cameraPosition)
guard let camera = device else {
set(error: .cameraUnavailable)
status = .failed
return
}
do {
let cameraInput = try AVCaptureDeviceInput(device: camera)
if session.canAddInput(cameraInput) {
session.addInput(cameraInput)
} else {
set(error: .cannotAddInput)
status = .failed
return
}
if let audioCaptureDevice = audioCaptureDevice {
let audioInput = try AVCaptureDeviceInput(device: audioCaptureDevice)
if session.canAddInput(audioInput) {
session.addInput(audioInput)
}
}
} catch {
set(error: .createCaptureInput(error))
status = .failed
return
}
session.outputs.forEach { output in
session.removeOutput(output)
}
if session.canAddOutput(videoOutput) {
session.addOutput(videoOutput)
videoOutput.videoSettings =
[kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA]
let videoConnection = videoOutput.connection(with: .video)
videoConnection?.videoOrientation = .portrait
videoConnection?.isVideoMirrored = cameraPosition == .front
} else {
set(error: .cannotAddOutput)
status = .failed
return
}
if session.canAddOutput(audioOutput) {
session.addOutput(audioOutput)
}
if session.canAddOutput(photoOutput) {
session.addOutput(photoOutput)
let outputConnection = photoOutput.connection(with: .video)
if cameraPosition == .front {
outputConnection?.automaticallyAdjustsVideoMirroring = false
outputConnection?.isVideoMirrored = true
} else {
outputConnection?.automaticallyAdjustsVideoMirroring = false
outputConnection?.isVideoMirrored = false
}
}
status = .configured
}
< /code>
extension VideoFrameService: AVCaptureVideoDataOutputSampleBufferDelegate, AVCaptureAudioDataOutputSampleBufferDelegate {
func captureOutput(
_ output: AVCaptureOutput,
didOutput sampleBuffer: CMSampleBuffer,
from connection: AVCaptureConnection
) {
DispatchQueue.main.async {
self.delegate?.update(output: output, sampleBuffer: sampleBuffer)
}
}
}
< /code>
Click to see the image
what will be the root cause for this. and how to solve this
Подробнее здесь: [url]https://stackoverflow.com/questions/79752473/avcapturesession-camera-preview-freezes-on-a-single-frame-instead-of-showing-liv[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия