Форум программистов, компьютерный форум CyberForum.ru

Переключение камеры во время записи в файл - Программирование iOS/iPhone

Восстановить пароль Регистрация
 
leadro
11 / 0 / 1
Регистрация: 24.10.2012
Сообщений: 8
31.01.2013, 04:50     Переключение камеры во время записи в файл #1
Всем привет,

Ребят нужна помощь в одной проблеме. Передо мной стоит задача перелючения камери с задней на фронтальную и назад во время записи в файл, при чем, что бы запись продолжалась.
Может ли кто-то посоветовать как такое можно совершить?
Может кто сталкивался с такой задачей и поделиться опытом?

Спасибо за внимание. Очен нужна помощь.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max Patsy
курлык-курлык
 Аватар для Max Patsy
84 / 93 / 3
Регистрация: 26.11.2009
Сообщений: 394
Записей в блоге: 1
31.01.2013, 14:43     Переключение камеры во время записи в файл #2
Думаю тебе это пригодится

http://forum.openframeworks.cc/index.php?topic=6879.0
http://www.cocoachina.com/bbs/read.php?tid-22935.html
leadro
11 / 0 / 1
Регистрация: 24.10.2012
Сообщений: 8
31.01.2013, 15:55  [ТС]     Переключение камеры во время записи в файл #3
Привет,
спасбо за ответ,
очень полезные ссылки и по ним я сделал переключение камери во время записи в файл, Вот код:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
NSError *error;
    AVCaptureDeviceInput *newVideoInput;
    AVCaptureDevicePosition currentCameraPosition = [[videoInput device] position];
    
    if (currentCameraPosition == AVCaptureDevicePositionBack)
    {
        currentCameraPosition = AVCaptureDevicePositionFront;
    }
    else
    {
        currentCameraPosition = AVCaptureDevicePositionBack;
    }
    
    AVCaptureDevice *backFacingCamera = nil;
    NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
    for (AVCaptureDevice *device in devices) 
    {
        if ([device position] == currentCameraPosition)
        {
            backFacingCamera = device;
        }
    }
    newVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:backFacingCamera error:&error];
    
    if (newVideoInput != nil)
    {
        [_captureSession beginConfiguration];
        
        [_captureSession removeInput:videoInput];
        if ([_captureSession canAddInput:newVideoInput])
        {
            [_captureSession addInput:newVideoInput];
            videoInput = newVideoInput;
        }
        else
        {
            [_captureSession addInput:videoInput];
        }
        //captureSession.sessionPreset = oriPreset;
        [_captureSession commitConfiguration];
    }
    
    _inputCamera = backFacingCamera;
и камера переключается на ура, но вот только появилась одна проблемка... после переключения камеры, аудио и видео рассинхронизированы... видео отстает от аудио....
Как можно с таким справиться?
Max Patsy
курлык-курлык
 Аватар для Max Patsy
84 / 93 / 3
Регистрация: 26.11.2009
Сообщений: 394
Записей в блоге: 1
31.01.2013, 16:09     Переключение камеры во время записи в файл #4
даже ничего не могу придумать пока, на стеке советуют паузить сьемку, создавать каждый раз новое видео и потом это склеивать, но это какое-то хреновое решение...
http://stackoverflow.com/questions/1...-switch-camera
leadro
11 / 0 / 1
Регистрация: 24.10.2012
Сообщений: 8
31.01.2013, 16:13  [ТС]     Переключение камеры во время записи в файл #5
то что хреновое это точно...
http://stackoverflow.com/questions/1...-switch-camera -- это мой же вопрос на стека....))
а вот решить этот момент как-то нужно, а то проект по швам расходиться а как решить вопрос не щнаю ((
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
31.01.2013, 16:27     Переключение камеры во время записи в файл #6
Идея, может быть, и идиотская, но чем черт не шутит...
А что если попробовать сначала добавлять input device в сессию, а только потом старый убивать?
Т.е. сначала [_captureSession addInput:newVideoInput]; а уже потом [_captureSession removeInput:oldVideoInput];
leadro
11 / 0 / 1
Регистрация: 24.10.2012
Сообщений: 8
31.01.2013, 16:49  [ТС]     Переключение камеры во время записи в файл #7
вариант конечно итересный, я по поводу ситуации сначала добавления newVideoInput а потом удаления старого.
Но тут такая слаживается ситуация:
при коде:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[_captureSession beginConfiguration];
        if ([_captureSession canAddInput:newVideoInput])
        {
            [_captureSession addInput:newVideoInput];
            videoInput = newVideoInput;
        }
        else
        {
            [_captureSession addInput:videoInput];
        }
        [_captureSession removeInput:videoInput];
        
        //captureSession.sessionPreset = oriPreset;
        [_captureSession commitConfiguration];
програма не заходит в if, а сразу бежит в else (тобиш сессия не может уже добавить еще один видео инпут), а кода срабатывает метод в else ([_captureSession addInput:videoInput] програма валиться с логом:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** An AVCaptureInput instance may not be added to more than one session'
*** First throw call stack:
(0x3350c2a3 0x3b37597f 0x3269b6b7 0x3269add1 0xbcaf 0x2d5d 0x3b78d11f 0x3b790b97 0x3b78c4b7 0x3b793139 0x3b79117f 0x334dff3b 0x33452ebd 0x33452d49 0x370072eb 0x35368301 0x22f5 0x2258)
libc++abi.dylib: terminate called throwing an exception

При попытке сразу добавить новый видео инпут (без проверки на возможность добавления), код:
Objective-C
1
2
3
4
5
6
7
8
9
[_captureSession beginConfiguration];
        
        [_captureSession addInput:newVideoInput];
        videoInput = newVideoInput;
        [_captureSession removeInput:videoInput];
        
        //captureSession.sessionPreset = oriPreset;
        [_captureSession commitConfiguration];
    }
прога валиться с совсем другим логом:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** Multiple audio/video AVCaptureInputs are not currently supported.'
*** First throw call stack:
(0x3350c2a3 0x3b37597f 0x3269b6b7 0x3269add1 0xbc9d 0x2dcd 0x3b78d11f 0x3b790b97 0x3b78c4b7 0x3b793139 0x3b79117f 0x334dff3b 0x33452ebd 0x33452d49 0x370072eb 0x35368301 0x2365 0x22c8)
libc++abi.dylib: terminate called throwing an exception

вот так как-то....
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
31.01.2013, 16:57     Переключение камеры во время записи в файл #8
Мда, в принципе этого следовало ожидать. Но не попробовать было преступлением
Еще можно попытаться использовать AVAssetWriter. Может, он пошустрее будет.
leadro
11 / 0 / 1
Регистрация: 24.10.2012
Сообщений: 8
31.01.2013, 17:06  [ТС]     Переключение камеры во время записи в файл #9
С AVAssetWriter говоришь.... интересная мысль... а можно как то по подробнее суть идеи и ее реализации?
а то у меня в проекте идет смесь AVAssetWriter и AVCaptureSession, то есть есть возможность разгуляться
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
31.01.2013, 17:24     Переключение камеры во время записи в файл #10
А нет. Очередная глупость. AVAssetWriterInput ему заменить нельзя. Извиняюсь за флуд
leadro
11 / 0 / 1
Регистрация: 24.10.2012
Сообщений: 8
31.01.2013, 17:27  [ТС]     Переключение камеры во время записи в файл #11
(((( плохо(((
может еще какие идеи есть... а то скоро заказчик пошлет куда подальше(((
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
01.02.2013, 07:03     Переключение камеры во время записи в файл #12
А зачем подписывались на разработку, если нет представления как делать?)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2013, 13:54     Переключение камеры во время записи в файл
Еще ссылки по теме:

Трансляция видео с камеры на пк
Может ли работать приложение в фоне на IOS, работа со вспышкой камеры
Swift Получить текущее время с правильно временной зоной с секундах с 1970 г

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
leadro
11 / 0 / 1
Регистрация: 24.10.2012
Сообщений: 8
01.02.2013, 13:54  [ТС]     Переключение камеры во время записи в файл #13
как розрабатывать проект я знаю, только закажчик фантазирует и с каждним днем придумывает новые фичи которые хочет добавить
Yandex
Объявления
01.02.2013, 13:54     Переключение камеры во время записи в файл
Ответ Создать тему
Опции темы

Текущее время: 09:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru