Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DirectShow А что кроме avi? 
:(
    Опции темы
Чучмек
Дата 7.3.2012, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

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



Используя DirectShow легко сохранить видео в avi контейнер.
Но у avi есть один..., даже два недостатка.
Заголовок avi записывается при окончании записи.
Как сохранять видео в другие форматы - mp4,flv ? 
Стандартных фильтров, насколько я понял, нет.
Придется либо писать свой, либо устанавливать написанный дядечкой за денюжку.  

Это сообщение отредактировал(а) Чучмек - 7.3.2012, 20:12


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Чучмек
Дата 7.3.2012, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

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



Вот нарыл
FLV Encoder Filter
Правда буржуйская программа - 400$ хотят


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Чучмек
Дата 7.3.2012, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

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



Перевел интерфейсы
Цитата

EXTERN_C const CLSID IID_MainmediaFLVProp;

class IMainmediaFLVEncoder : public IUnknown
{
    public:
    STDMETHOD(SetProfile)(ULONG nIndex) = 0;
    STDMETHOD(SetLicenseKey)(ULONG nIndex)=0;
    STDMETHOD(GetProfilesAmount)(ULONG *nAmount) = 0;
    STDMETHOD(GetProfileName)(ULONG nIndex, BSTR *bstrProfile) = 0;

    STDMETHOD(GetFilterState)(ULONG *pState) = 0;

    STDMETHOD(GetCurrentPosition)(LONGLONG *pPos) = 0;

    STDMETHOD(GetFinalizePercentage)(ULONG *pPerc) = 0;
};


Цитата

EXTERN_C const CLSID IID_IEncoderProfile;

class IEncoderProfile : public IUnknown
{
public:

    STDMETHOD(SetVideoCodecType)    (VideoCodec eCodec) = 0;
    STDMETHOD(SetVideoBitrate)  (UINT nBitrate) = 0;
    STDMETHOD(SetVideoResolution)    (UINT nWidth, UINT nHeight) = 0;
    STDMETHOD(SetVideoFrameRate)    (LPCSTR szFrameRate) = 0;
    STDMETHOD(SetVideoGopSize)  (UINT nGopSize) = 0;
    STDMETHOD(SetVideoMaxRate)  (UINT nMaxRate) = 0;
    STDMETHOD(SetVideoMinRate)  (UINT nMinRate) =0;
    STDMETHOD(SetVideoBufferSize)    (UINT nBufferSize) = 0;
    STDMETHOD(EnableAspectRatio)    (BOOL bEnable) = 0;
    STDMETHOD_(BOOL, IsAspectRatioEnable)() = 0;

    STDMETHOD(GetVideoCodec)  (VideoCodec * eCodec) = 0;
    STDMETHOD(GetVideoBitrate)  (UINT * nBitrate) = 0;
    STDMETHOD(GetVideoResolution)    (UINT * nWidth, UINT * nHeight) = 0;
    STDMETHOD_(LPSTR, GetVideoFrameRate)() = 0;
    STDMETHOD(GetVideoGopSize)  (UINT * nGopSize) = 0;
    STDMETHOD(GetVideoMaxRate)  (UINT * nMaxRate) = 0;
    STDMETHOD(GetVideoMinRate)  (UINT * nMinRate) =0;
    STDMETHOD(GetVideoBufferSize)    (UINT * nBufferSize) = 0;

    STDMETHOD(SetAudioCodec)  (AudioCodec eCodec) = 0;
    STDMETHOD(SetAudioBitrate)  (UINT nBitrate) = 0;
    STDMETHOD(SetAudioChannels)  (UINT nChannels) = 0;
    STDMETHOD(SetAudioSampleRate)    (UINT nSampleRate) = 0;

    STDMETHOD(GetAudioCodec)  (AudioCodec * eCodec) = 0;
    STDMETHOD(GetAudioBitrate)  (UINT * nBitrate) = 0;
    STDMETHOD(GetAudioChannels)  (UINT * nChannels) = 0;
    STDMETHOD(GetAudioSampleRate)    (UINT * nSampleRate) = 0;
};


Код

VideoCodecFLV   = 22;
AudioCodecMP3   = 86017;

type
VideoCodec=cardinal;
AudioCodec=cardinal;


IMainmediaFLVEncoder = interface (IUnknown)
['{13BF9980-7239-4866-A5B8-A96857D3ED62}']
function SetProfile(nIndex:ULONG):Hresult;  stdcall;
function SetLicenseKey(nIndex:ULONG):Hresult;  stdcall;
function GetProfilesAmount(out nAmount:ULONG):Hresult;   stdcall;
function GetProfileName(nIndex:ULONG;out bstrProfile:widestring):Hresult;  stdcall;

function GetFilterState(out pState:ULONG):Hresult;  stdcall;

function GetCurrentPosition(out pPos:LONGLONG):Hresult;  stdcall;

function GetFinalizePercentage(out pPerc:ULONG):Hresult; stdcall;
end;



IEncoderProfile=interface (IUnknown)
['{1DE5F22F-D5D1-4980-9797-AC9931399A08}']
function SetVideoCodecType (eCodec:VideoCodec):Hresult;   stdcall;
function SetVideoBitrate(nBitrate:UINT):Hresult;  stdcall;
function SetVideoResolution(nWidth,nHeight:UINT):Hresult; stdcall;
function SetVideoFrameRate(szFrameRate:LPCSTR):Hresult; stdcall;
function SetVideoGopSize(nGopSize:UINT):Hresult;  stdcall;
function SetVideoMaxRate(nMaxRate:UINT):Hresult;   stdcall;
function SetVideoMinRate(nMinRate:UINT):Hresult;  stdcall;
function SetVideoBufferSize(nBufferSize:UINT):Hresult;  stdcall;
function EnableAspectRatio(bEnable:BOOL):Hresult;  stdcall;
function IsAspectRatioEnable:BOOL; stdcall;

function GetVideoCodec(out eCodec:VideoCodec):Hresult; stdcall;
function GetVideoBitrate(out nBitrate:UINT):Hresult; stdcall;
function GetVideoResolution    (out nWidth:UINT;out nHeight:UINT):Hresult;  stdcall;
function GetVideoFrameRate:LPSTR; stdcall;
function GetVideoGopSize(out nGopSize:UINT):Hresult; stdcall;
function GetVideoMaxRate(out nMaxRate:UINT):Hresult;  stdcall;
function GetVideoMinRate(out nMinRate:UINT):Hresult;   stdcall;
function GetVideoBufferSize(out nBufferSize:UINT):Hresult; stdcall;

function SetAudioCodec(eCodec:AudioCodec):Hresult; stdcall;
function SetAudioBitrate(nBitrate:UINT):Hresult;  stdcall;
function SetAudioChannels(nChannels:UINT):Hresult; stdcall;
function SetAudioSampleRate(nSampleRate:UINT):Hresult; stdcall;

function GetAudioCodec(out eCodec:AudioCodec):Hresult; stdcall;
function GetAudioBitrate(out nBitrate:UINT):Hresult; stdcall;
function GetAudioChannels(out nChannels:UINT):Hresult; stdcall;
function GetAudioSampleRate(out nSampleRate:UINT):Hresult; stdcall;
end;




--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Чучмек
Дата 9.3.2012, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

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



Цитата(Чучмек @  7.3.2012,  21:06 Найти цитируемый пост)
400$ хотят

Больше не хотят
Убрал проверку даты.
Убрал сообщение "this is trial..."
Изменил CLSID_MainmediaFLVEncoder на '{3CF34520-6BD8-45FC-BAD6-FC4633072DC3}'
Для установки необходимо выполнить
Код

 Regsvr32 mainmediaflvencoder.dll



--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Чучмек
Дата 17.3.2012, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

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



Идем дальше.
MP4
MP4 File Writer
Если кто нибудь разберется с этим Г. - честь ему и хвала.
Во первых - требует msvcr90.dll
Во вторых, даже если... - один хрен не работает. Максимум чего удалось добиться - картинка баз звука.
Скорей всего, наверное, необходимо наличие определенных кодек. 
Вот интерфейс MP4 File Writer-а
Код

type
IMP4Props=interface(IUnknown)
['{7c6ecc69-b82a-4613-8b75-b955d55c21c5}']
function get_VideoBitrate(out iVideoBirate:integer):HResult;stdcall;

function put_VideoBitrate(iVideoBirate:integer):HResult;stdcall;

function get_AudioBitrate(out iAudioBitrate:integer):HResult;stdcall;
function put_AudioBitrate(iAudioBitrate:integer):HResult;stdcall;

function get_IVOPQuant(out iLevel:integer):HResult;stdcall;

function put_IVOPQuant(iLevel:integer):HResult;stdcall;

function get_PVOPQuant(out iLevel:integer):HResult;stdcall;

function put_PVOPQuant(iLevel:integer):HResult;stdcall;

function set_AudioBitrateSelection(iIndex:integer):HResult;stdcall;

function get_AudioBitrateSelection(iAudioBitrateTable:pointer):HResult;stdcall;
end;


Вот сам MP4 File Writer


Это сообщение отредактировал(а) Чучмек - 17.3.2012, 12:21

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  mp4lib.zip 145,04 Kb


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Чучмек
Дата 18.3.2012, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

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



Поковыряем очередной фильтр от Mainmedia Software
Так называемый "iPod Encoder". Почему именно iPod - не совсем понятно. Наверное потому, что видео получается заточенным под iPod (АйПоц smile )
Но нам он подходит - по сути это mp4 кодировщик.
Вот выкладываю основную dll-ку фильтра, остальные все из FLV Encoder Filter (MFC71.dll;msvcp71.dll;msvcr71.dll;videoformat.dll;videotrans.dll;videocore.dll)
CLSID фильтра изменил на   ['{FB3069A8-C7F1-4950-91C3-BDD50F830766}']
Имя dll-ки на MP4_encoder.dll
Имя фильтра на MP4 Encoder
Убрал сообщение "this is trial..."
Убрал проверку даты.



Веимание!!!
Все права на FLV Encoder Filter   и iPod Encoder(MP4 Encoder) принадлежат Mainmedia Software
И если Вы надумаете использовать эти фильтры в коммерческих проектах - вы должны приобрести их у Mainmedia Software  



Это сообщение отредактировал(а) Чучмек - 18.3.2012, 10:40

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  MP4_encoder.zip 699,00 Kb


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Чучмек
Дата 21.3.2012, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

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



Цитата(Чучмек @  17.3.2012,  12:20 Найти цитируемый пост)
Если кто нибудь разберется с этим Г. - честь ему и хвала.

Вот теперь себя люблю я. Вот теперь себя хвалю я...
Разобрался и с msvcr90.dll - тащим с собой сборку Microsoft.VC90.CRT
И с отсутствием звука  -  Фильтр-источник видео необходимо подключать перед источником звука.(это касается и  iPod Encoder(MP4 Encoder)).
Осталась одна проблема - При просмотре видео бежит как на перемотке, а звук - нормальный.
Вот подправленная  mp4lib.dll с файлами Microsoft.VC90.CRT.
CLSID фильтра изменил на  ['{16646F30-0BB4-41CE-B97F-048380067750}']
версию Microsoft.VC90.CRT, в манифесте mp4lib.dll, изменил на 9.0.30729.1 (какая  была).

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  mp4lib.7z 480,98 Kb


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




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


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

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