Russian Qt Forum

Qt => Qt Embedded => Тема начата: Ubuntu_linux от Январь 03, 2011, 02:53



Название: QtMobility трансляция video.
Отправлено: Ubuntu_linux от Январь 03, 2011, 02:53
Надо организовать передачу лайв видео с мобилки на , скажем,  ноут через 3G internet. Подскажите как это сделать. Звук вроде знаю как передать, а с видео в полном тупеке. Для звука использую серер jabber.


Название: Re: QtMobility трансляция video.
Отправлено: Ubuntu_linux от Январь 03, 2011, 20:52
Вопрос актуален!  ???


Название: Re: QtMobility трансляция video.
Отправлено: lit-uriy от Январь 03, 2011, 22:00
>>Вопрос актуален!
все пьют, что ты людям новый год мешаешь встречать
;)


Название: Re: QtMobility трансляция video.
Отправлено: ufna от Январь 03, 2011, 22:10
Разложи проблему по полочкам.

1. получение потока
2. конвертация
3. отправка (делиться на несколько пунктов)
4. получение


Название: Re: QtMobility трансляция video.
Отправлено: Ubuntu_linux от Январь 04, 2011, 03:09
Вот не могу понять по каким причинам на телефоне не хочит воспроизводиься звук с потока? Хотя при соединенит комп-комп звук есть на обоих. С микрофона, телефона, звук передаеься.      Все сделал как в примере QXmpp . Так при старте аудио звонка воспроизведения звука переходит в статус: IdleState
Код
C++ (Qt)
void Widget::callConnected(){
 
 
 callA=qobject_cast<QXmppCall*>(sender());
 ui->plainTextEdit->appendPlainText("Call connected!");
 
 
/// output
audioOutput = new QAudioOutput(QAudioDeviceInfo::defaultOutputDevice().preferredFormat(), this);
 connect(audioOutput,SIGNAL(stateChanged(QAudio::State)),this,SLOT(stateChanged(QAudio::State)));
audioOutput->start(callA);
 
/// input
QAudioInput *input=new QAudioInput(QAudioDeviceInfo::defaultInputDevice().preferredFormat(),this);
 input->start(callA);
}//callConnected
 


Название: Re: QtMobility трансляция video.
Отправлено: Ubuntu_linux от Январь 04, 2011, 11:01
 ???


Название: Re: QtMobility трансляция video.
Отправлено: Ubuntu_linux от Январь 04, 2011, 15:04
Кстати, при аудио звонке (Комп -Комп) я слышу сам себя, так вить не должно бить?
А звук не работает....

Вот исходники:
(Я собираю проект, прямо, подключив исходники lib QXmpp)


Название: Re: QtMobility трансляция video.
Отправлено: ufna от Январь 04, 2011, 19:01
Кстати, при аудио звонке (Комп -Комп) я слышу сам себя, так вить не должно бить?
А звук не работает....

Слышишь сам себя - это:
а) настройки карточки
б) ты не работаешь с эхоподавлением


По всему остальному - праздники, пока не до дум :)


Название: Re: QtMobility трансляция video.
Отправлено: Ubuntu_linux от Январь 04, 2011, 20:29
Кстати, при аудио звонке (Комп -Комп) я слышу сам себя, так вить не должно бить?
А звук не работает....

Слышишь сам себя - это:
а) настройки карточки
б) ты не работаешь с эхоподавлением


По всему остальному - праздники, пока не до дум :)
То не эхо точно, так как громкость большая и совсем не похоже на эхо.


Название: Re: QtMobility трансляция video.
Отправлено: ufna от Январь 04, 2011, 21:14
я же говорю - два пункта :) уберешь первый - останется только эхо. А первый - это настройки записи, посмотри любую программу по работе с аудио - это "мониторинг".


Название: Re: QtMobility трансляция video.
Отправлено: Ubuntu_linux от Январь 04, 2011, 22:06
я же говорю - два пункта :) уберешь первый - останется только эхо. А первый - это настройки записи, посмотри любую программу по работе с аудио - это "мониторинг".
Вы хотите сказать что эхо обусловлено самими настройками карточки?


Название: Re: QtMobility трансляция video.
Отправлено: ufna от Январь 04, 2011, 22:11
Есть два типа "слышишь себя".

1. это карточка инпут посылает на аутпут, т.е. "мониторинг" - это громко и ясно, часто просто выводится на нужный аутпут чтобы мониторить что ты пишешь/поешь и т.п. - скорее всего именно такое "слышу себя" у тебя.

2. эхо. Это когда ты слышишь свой же голос, который прошел туда-обратно по сети за счет того, что на второй стороне он попал либо в общий микс напрямую или через микрофон во время воспроизведения твоего голоса.


Название: Re: QtMobility трансляция video.
Отправлено: Ubuntu_linux от Январь 04, 2011, 22:17
Есть два типа "слышишь себя".

1. это карточка инпут посылает на аутпут, т.е. "мониторинг" - это громко и ясно, часто просто выводится на нужный аутпут чтобы мониторить что ты пишешь/поешь и т.п. - скорее всего именно такое "слышу себя" у тебя.

2. эхо. Это когда ты слышишь свой же голос, который прошел туда-обратно по сети за счет того, что на второй стороне он попал либо в общий микс напрямую или через микрофон во время воспроизведения твоего голоса.
Второе присутствует, но не в таких масштабах.  А с первым попробую по что-то покрутить.
 П.С. Но звука на девайсе (Symbian) все равно нету...


Название: Re: QtMobility трансляция video.
Отправлено: ufna от Январь 04, 2011, 22:21
А на симбе нет какой-нить будь "громкости"? К примеру для приложения и т.п. в настройках телефона.


Название: Re: QtMobility трансляция video.
Отправлено: Ubuntu_linux от Январь 04, 2011, 22:29
А на симбе нет какой-нить будь "громкости"? К примеру для приложения и т.п. в настройках телефона.

В смысле системной громкости? Громкость качельками давал, но безрезультатно.

Дело в том что другой пример на телефоне с записю-воспроизведения работает нормально. А в случае аудио звонка  я не слишу звука, а система говорит что QIODevice пустой (нечего воспроизводить)


Название: Re: QtMobility трансляция video.
Отправлено: Ubuntu_linux от Январь 05, 2011, 23:51
Для более детального анализа и для передачи видео в перспективе, реализовал собственный клиент(телефон)-сервер(комп).
И при передачи дискретных сообщений (типа таких: 4,54;9,48;1,32) удалось  уменьшит задержку между сообщениями до 300мс.

Теперь хочу реализовать непрерывающийся поток данных, чтоб  уменьшить  задержку. Идеально если она будет 50-100мс.

В кого какие идеи? ???


Название: Re: QtMobility трансляция video.
Отправлено: ufna от Январь 06, 2011, 00:54
Хмм, а как шлешь данные?


Название: Re: QtMobility трансляция video.
Отправлено: Ubuntu_linux от Январь 06, 2011, 01:25
Хмм, а как шлешь данные?

Записываю данные в сокет (который поворачивает изображения на виджете):

Код
C++ (Qt)
void Dialog::sendAccelerometerMessge(){
/// start get data from QAccelerometer
   QString  str="",strOut="";
   str=str.setNum(reading->x());
   strOut+=str.left(str.indexOf(".")+2)+";";
   str=str.setNum(reading->y());
   strOut+=str.left(str.indexOf(".")+2)+";";
   str=str.setNum(reading->z());
   strOut+=str.left(str.indexOf(".")+2)+";";
/// end get data
 
/// write data to socket
   QByteArray block;
   QDataStream out(&block,QIODevice::WriteOnly);
   out.setVersion(QDataStream::Qt_4_0);
 
   out<<(quint16)0;
   out<<strOut;
   out.device()->seek(0);
   out<<(quint16)(block.size()-(int)sizeof(quint16));
 
   client->write(block);
   client->flush();
 
}//sendAccelerometerMessage


Название: Re: QtMobility трансляция video.
Отправлено: Ubuntu_linux от Январь 06, 2011, 15:42
Поправил код  :P, теперь клиент  дожидается, перед отправкой сообщения, когда сервер пришлет ему отчет, что он получил предыдущее сообщение. Для определения дискретной скорости передачи сообщений, я каждые 10 сек отправляю на сервер тестовою строку "### 10 sec ###". А потом определяю количество сообщений которые пришли между  тестовыми строками.
В результате я получил, в среднем (+- 5 сообщений) 160 сообщений за 10 сек.  В одну сторону с клиента на сервер! (естественно в обратную сторону столько же )
За 1 сек. количество сообщений =16.
В результате будем иметь задержку между сообщениями в 1/16 =0.0625 сек. , или 63 мили-секунды ,  это  очень хорошо!
Притом это  общая задержка (туда - сюда)!  ;D


Название: Re: QtMobility трансляция video.
Отправлено: Ubuntu_linux от Январь 07, 2011, 01:26
Зависимость принятых сообщений со временем, всего 10 минут.  ;)

(http://forum.modelka.com.ua/index.php?app=core&module=attach&section=attach&attach_rel_module=post&attach_id=71776)


Название: Re: QtMobility трансляция video.
Отправлено: ufna от Февраль 25, 2011, 14:28
кстати, задержка тут скорее всего из-за буферизации данных. Точно так же винда делает, примерно в 100-200 мс отправляет данные. Для сокета это надо отрубаить.