Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как можно проиграть потоковый звук? 
:(
    Опции темы
Incinerated
Дата 1.4.2008, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 18.5.2006
Где: Беларусь, Новопол оцк

Репутация: нет
Всего: нет



Есть небольшой кусок кода:
Код

PAVISTREAM paudio;
AVIStreamOpenFromFile(&paudio, "D:\\downloads\\1408.avi", streamtypeAUDIO, 0, 0, NULL);

как мне можно теперь проиграть это? ну я еще могу узнать информацию об этом звуке через AVIFileInfo(), но что дальше с этим делать я не знаю. Может знает кто-нибудь что-нибудь об этом?
PM MAIL   Вверх
BorisVorontsov
Дата 1.4.2008, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 1
Всего: 10



Эти функции служат не для воспроизведения, а для работы с данными потока. Эти данные можно рендерить ручками, а можно передать фильтру DirectShow, например. Но и первое и второе не самые лёгкие в реализации варианты.
Возможно, у тебя изначально неправильный подход, или ты плохо сформулировал вопрос. Тебе обязательно нужно воспроизводить данные, полученные этими функциями?


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Incinerated
Дата 1.4.2008, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 18.5.2006
Где: Беларусь, Новопол оцк

Репутация: нет
Всего: нет



Цитата(BorisVorontsov @ 1.4.2008,  09:31)
Эти функции служат не для воспроизведения, а для работы с данными потока. Эти данные можно рендерить ручками, а можно передать фильтру DirectShow, например. Но и первое и второе не самые лёгкие в реализации варианты.
Возможно, у тебя изначально неправильный подход, или ты плохо сформулировал вопрос. Тебе обязательно нужно воспроизводить данные, полученные этими функциями?

насчет обязатьельно пока не уверен, потому что это только часть программы, в общем мне нужно будет передавать по сети видео, и проигрывать его на другом компе. Я для начала хочу проиграть видео просто на своем компе...Видео проиграть получилось, а вот со звуком проблема...Видео проигрываю с помощью данных полученных этой функцией, поставив streamtypeVIDEO в 3 параметре...

Это сообщение отредактировал(а) Incinerated - 1.4.2008, 09:39
PM MAIL   Вверх
BorisVorontsov
Дата 1.4.2008, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 1
Всего: 10



Цитата(Incinerated @  1.4.2008,  09:38 Найти цитируемый пост)
Видео проигрываю


Посредством чего?


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Incinerated
Дата 1.4.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 18.5.2006
Где: Беларусь, Новопол оцк

Репутация: нет
Всего: нет



Цитата(BorisVorontsov @ 1.4.2008,  11:23)
Цитата(Incinerated @  1.4.2008,  09:38 Найти цитируемый пост)
Видео проигрываю


Посредством чего?

Код

AVIFileInit();
AVIStreamOpenFromFile(&ppstream, "D:\\downloads\\1408.avi", streamtypeVIDEO, 0, 0, NULL);

ZeroMemory (&info, sizeof(info));
AVIStreamInfo(ppstream, &info, sizeof(info));

Form1->Width = info.rcFrame.right - info.rcFrame.left;
Form1->Height = info.rcFrame.bottom - info.rcFrame.top;

memset(&bi, 0, sizeof(BITMAPINFO));
bi.bmiHeader.biSize = sizeof(bi.bmiHeader);
bi.bmiHeader.biWidth = info.rcFrame.right - info.rcFrame.left; //желаемая ширина
bi.bmiHeader.biHeight = info.rcFrame.bottom - info.rcFrame.top; //желаемая высота
bi.bmiHeader.biBitCount = 24;
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biCompression = BI_RGB;
bi.bmiHeader.biSizeImage = bi.bmiHeader.biWidth * bi.bmiHeader.biHeight * 4;

hdc = GetDC(Form1->Handle);
frame = ::AVIStreamGetFrameOpen(ppstream,&bi.bmiHeader);
Timer1->Interval = (1000/(info.dwRate / info.dwScale));
Timer1->Enabled = true;

//функция OnTimer
if (i!=info.dwLength){
  i++;
  getframe = ::AVIStreamGetFrame(frame,i);
  ::SetDIBitsToDevice(hdc,         // hDC
        0,                     // DestX
        0,                     // DestY
        bi.bmiHeader.biWidth,         // nDestWidth
        bi.bmiHeader.biHeight,         // nDestHeight
        0,                     // SrcX
        0,                     // SrcY
        0,                     // nStartScan
        bi.bmiHeader.biHeight,         // nNumScans
        getframe,                 // lpBits
        (LPBITMAPINFO)getframe,             // lpBitsInfo
        DIB_RGB_COLORS);             // wUsage
  }
 else Timer1->Enabled = false; 


вот в принципе и все...В результате у меня на форме проигрывается видео...Без звука...
PM MAIL   Вверх
BorisVorontsov
Дата 1.4.2008, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 1
Всего: 10



Ну вот, аналогичным способом выводи и звук, посредством того же waveOut*-API.


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Incinerated
Дата 1.4.2008, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 18.5.2006
Где: Беларусь, Новопол оцк

Репутация: нет
Всего: нет



Цитата(BorisVorontsov @ 1.4.2008,  12:46)
Ну вот, аналогичным способом выводи и звук, посредством того же waveOut*-API.

пытался...столкнулся с проблемой:
waveOutPrepareHeader() требует структуру во втором параметре. В этой структуре требуется указатель на LPSTR, а у меня есть только PAVISTREAM...и как следствие, если написать 
Код

char *wa = (char *)&paudio;
ошибок не выдает, но и не проигрывает.

Это сообщение отредактировал(а) Incinerated - 1.4.2008, 13:01
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.