2012-05-12 1 views
2

내가 Qt의 포논 프레임 워크를 직접 표시 9 백엔드를 사용하려고 다음과 같은 오류 받고 있어요 :직접 표시 9 포논 오류 "핀을 연결할 수 없습니다"

Pins cannot connect due to not supporting the same transport. (0x80040266) 

사람이 알고 있나요 무엇이 오류 수단 및/또는 그것을 고치는 방법? 이 문제는 phonon의 Direct Show 9 백엔드에서 문제가됩니까?

+0

이'VFW_E_NO_TRANSPORT'는 내부 DirectShow 핀 연결 실패에서 비롯된 것입니다. 세부 정보를 찾으려면 정확히 어떤 필터/핀이 실패했는지 알아야합니다. –

답변

2

명백하게 문제는 잘못된 메타 데이터와 관련이 있습니다. Id3 태그가 올바르지 않은 경우 직접 백엔드 9 백엔드가 그에 대한 쵸크를 표시합니다. 나는 다음과 같은 함수를 작성하여 문제를 해결 :

void removeTags(UDJ::DataStore::song_info_t& song){ 
    static int fileCount =0; 
    if(song.source.fileName().endsWith(".mp3")){ 
    UDJ::Logger::instance()->log("On windows and got mp3, copying and striping metadata tags"); 
    QString tempCopy = QDesktopServices::storageLocation(QDesktopServices::TempLocation) + "/striped" + QString::number(fileCount) +".mp3"; 
    if(QFile::exists(tempCopy)){ 
     UDJ::Logger::instance()->log("Prevoius file existed, deleting now"); 
     if(QFile::remove(tempCopy)){ 
     UDJ::Logger::instance()->log("File removal worked"); 
     } 
    } 
    bool fileCopyWorked = QFile::copy(song.source.fileName(), tempCopy); 
    if(!fileCopyWorked){ 
     UDJ::Logger::instance()->log("File copy didn't work"); 
     return; 
    } 

    TagLib::MPEG::File file(tempCopy.toStdString().c_str()); 
    file.strip(); 
    file.save(); 
    Phonon::MediaSource newSource(tempCopy); 
    song.source = newSource; 
    if(fileCount == 3){ 
     fileCount =0; 
    } 
    else{ 
     fileCount++; 
    } 
    } 
} 

song_info_t 그것이 source 전화에 포논 :: MediaSource의 멤버 단지 구조체이다. 이 함수는 taglib을 사용하여 노래의 모든 메타 데이터를 제거하고 새 노래를 임시 파일로 저장하여 작동합니다. 이 함수는 또한 파일 이름을 회전 시키므로 임시 파일에 사용되므로 무한 개수의 임시 복사본 파일이 만들어지지 않습니다. 이 오류가 발생한 다른 사용자에게 도움이되기를 바랍니다.

+0

이것은 DirectShow에 대해 문서화 된 문제이므로 Windows 관련 코드를 작성하는 경우 해결 방법이 있습니다. 아마도 파일 복사본이 필요하지 않도록이 임시 해결책을 포함하는 Phonon 픽스가있을 것입니다. 그러나 Windows에서 파일을 복사하면 저에게 효과적이었습니다. 감사합니다 @Kurtis. – moodboom