簡易プレイヤにLAV対応・・・できず が、できた


LAVを対応しようと奮闘してましたがうまくいかないです。
たぶん普通に再生するだけならなんとかなりそうなのですが、音声ストリームを切り替える部分がどうも実装方法がわからず。

分かる方今したらコメントかメール頂けると嬉しいです。(サンプルがあると助かります VC++)」

追記
GraphStudioNextにて色々いじってたら、IAMStreamSelectインターフェイスでなんとなくできるのかなぁと。
DirectShowのフィルター一覧を検索して LAV Spliter Sourceと見つけたらAudio側のstream番号を変更すれば複数ストリームも対応出来そうな気がします。
今は、Haali + ffdshowを基本フィルタ一覧から拾ってきて手動でPINを繋げてますが、そこにLAVも拾うようにして、設定からLAVを使うのかHaaliを使うのかを選択できるようにして、LAVだったら、stream番号変更の形を取るといけるのかなぁと思ってますがやってみないとなんともですね。
googleで色々調べても何も出てこない(プレイヤ側は出てくるけど、実装側のソースは出てこない)ので暇見てやるしかないね。
自動でPINを組む形(Haaliを使わない+ffdshowを使わない)状態だとH.265再生できるので、Haali Simple Media SplitterにてVIDEOのPINがないことが問題で再生できないっぽいんですよね。

追記

IAMStreamSelectに対応出来ました。

実装方法等は別途書くかも知れません。

追記

メモリ解放わすれてました。

DWORD CntPin2(IAMStreamSelect *pFilter) {
    DWORD i,j,k,k1,k2,l;
    k =k1=k2= 0;
    l = 0;
    au = etc = 0;
    AM_MEDIA_TYPE *am;
    LPWSTR p;
    pFilter->Count(&i);
    l = i;
    for (j = 0; j < i; j++) {
        pFilter->Info(j, &am, NULL, NULL, NULL, &p, NULL, NULL);
        if (am->majortype == MEDIATYPE_Audio) {
            streamname[k] = p;
            k++;
        }
        else {
            l--;
            if (am->majortype == MEDIATYPE_Video) {
                streamname1[k1] = p;
                au++;
                k1++;
            }
            else {
                if (etc == 0)etc = j;
                    streamname2[k2] = p;
                k2++;
            }
        }
        CoTaskMemFree(p);
        DeleteMediaType(am);
        FreeMediaType(*am);
    }
    return l;
}

追記 2017.09.24

VRのみに対応わすれてました(ダイナソアのOPなど)。

if(prend)  // prendはEVRが使えるかのポインタ NULLならEVRは未獲得
    pGraphBuilder->AddFilter(prend, L"Enhanced Video Renderer");
pGraphBuilder->RenderFile(ss,NULL);
//Filtervideooff(pGraphBuilder);
//pGraphBuilder->RenderFile(ss, NULL);
if (prend)
    Filtervideooff2(pGraphBuilder);
//Filtervideooff3(pGraphBuilder);
if(pGraphBuilder)
    pGraphBuilder->QueryInterface(IID_IMediaSeeking,(LPVOID *)&pMediaSeeking);
Filtersdown(pGraphBuilder, NULL);
audionum = 1;
if (iam) {
    audionum = CntPin2(iam);
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください