הבעייה
אחת הבעיות הנפוצות במחשבי HTPC הוא שבעת התקנה של נגן או CODEC חדש, נגנים מסויימים 0כגון ה SPlayer,ZoomPlayer,Media Player Classic וכו´) פתאום מתחילים "להשתגע" ולעיתים אף מפסיקים לעבוד לחלוטין או חלקית (למשל מנגנים סוגי קבצים מסויים מצויין, ואחר לא מתנגן כלל).
הסיבה לתופעה מתרחשת בעיקר בגלל בניית "גרף" לא נכון שמשתמש בפילטרים הלא נכונים. בניית גרפים לא נכונה היא תופעה שגורמת לא פעם לפירמוטו מחדש של המחשב. כמה עצוב.
קצת רקע
רוב הנגנים במחשב משתמשים לצורך ניגון קבצי הוידאו בטכנולוגיה של מיקרוסופט שנקראת DirectShow
(שהיא חלק מחבילת DirectX). טכנולוגיה זו אחראית בעצם על נושא הוידאו במערכות ההפעלה WINDOWS השונות כיום.
בבסיס ה DirectShow קיים רכיב שנקרא גרף (Graph). רכיב זה בעצם מאכלס בתוכו רכיבים אחרים שנקראים פילטרים (filters). לכל פילטר בגרף יש תפקיד שונה. לדוגמה האחד אחראי על פתיחת הקובץ ואחר אחראי על פענוח הנתונים וכו. ישנם מספר קטגוריות של סוגי פילטרים ב DirectShow:
-
Source filter – פילטר זה יודע לקחת נתונים מאיזה שהוא מקור. לדוגמה: קובץ על הדיסק או מצלמה שמחוברת למחשב או נתונים שמגיעים מהאינטרנט וכו´
-
Transform filter – פילטר זה מבצע עיבוד כלשהו על הנתונים ומעביר אותם אחרי העיבוד לפילטר הבא. לדוגמה: פילטר שמפענח ערוץ וידאו או פילטר שיודע להוסיף כתוביות לוידאו וכו´
-
Rendering filter – פילטר זה בד"כ שולח את הנתונים לרכיב חומרה או תצוגה כלשהו. לדוגמה שולח וידאו לכרטיס המסך לצורך תצוגה או אודיו לכרטיס הקול לצורך השמעה או שומר נתונים לקובץ וכו´
הגרף מזכיר משחק של לגו. לכל רכיב בו יש פינים שמאפשרים התמחברות לסוג פילטר שונה ביציאה או בכניסה שלו.
לרכיב הגרף מכניסים את הפילטרים שבהם אנו רוצים להשתמש ובנוסף גם מבצעים חיבורים בין אותם הפילטרים כדי שיווצר משהו שנקרא Filter Graph. החיבור הזה הוא כיווני (במורד הזרם) כלומר הנתונים זורמים בו מפילטר המקור לפילטר היעד (ע"ע התמונה הראשונה למטה).
את הגרפים השונים ניתן לבדוק וליצור על ידי תוכנה חינמית של מיקרוסופט הנקראית GraphEdit.
בגרפים הרלוונטים לניגון קבצי וידאו שנוצרים ע"י הנגנים תמיד יהיו לפחות הפילטרים הבאים:
-
Video Source Filter – תפקידו לקחת את קובץ הוידאו ולקרוא משם את הנתונים
-
Video Splitter Filter – תפקידו להפריד מהערוץ המקודד את ערוץ הוידאו ואת ערוץ האודיו
-
Video Decoder Filter – תפקידו לקבל את ערוץ הוידאו המקודד ולפענח אותו (video decoder)
-
Audio Decoder Filter – תפקידו לקבל את ערוץ האודיו המקודד ולפענח אותו (audio decoder)
-
Video Renderer Filter – תפקידו לקבל את ערוץ הוידאו המפוענח ולשלוח אותו לכרטיס המסך (ומשם בדר"כ למסך)
-
Audio Render Filter – תפקידו לקבל את ערוץ האודיו המפוענח ולשלוח אותו לכרטיס הקול (ומשם בדר"כ לרמקולים)
שימו לב שקיימים פילטרים שיודעים לבצע שתי פעולות ביחד כגון ה Halli Media Splitter שידוע גם לפתוח קובץ מסוג MKV וגם להפריד את ערוץ הוידאו וערוץ האודיו.
ראו דוגמה לגרף שנבנה בניגון קובץ DivX (ראו תמונה 1)
אז מה הבעיה ?
מכיוון שהרבה פעמים אנחנו מתקינים קודקים חדשים במערכת קורה לא פעם שמותקנים אצלנו כל מיני פילטרים שונים ומשונים שאנחנו כלל לא יודעים על קיומם או על התקנתם.
לעיתים הם משנים את סדר הבחירה הנכון של הנגן ולכן קורה שהנגן פתאום בונה לנו גרף עם פילטרים חדשים ולא רצויים.
לפעמים הנגן מצליח לנגן ולהציג וידאו גם עם הפילטרים הלא רצויים אבל לעתים העסק פתאום מגמגם או מפסיק לעבוד.
עוד חומר על מנגנון הבחירה של הפילטרים על ידי הנגן ומה זה merit ואיך ניתן לשנות אותו ניתן למצוא במאמר הבא.
אז בואו נמצא מיהו הפילטר הסורר ונחליף או נסיר אותו !
זה לא תמיד פשוט כ"כ לדעת באיזה פילטרים הנגן משתמש, ויותר גרוע, מי הפילטר הסורר דווקא. לכן קשה מאוד לזהות את הבעיות הללו ולמצוא את הפילטר הסורר.
כאמור, בכדי לנסות ולמצוא את הגרף שנבנה מומלץ מאוד להשתמש באפליקציה שנקראת GraphEdit.
תוכנת GraphEdit מאפשרת לנו לבנות בעצמנו גרפים ולדמות את פעולת הבנייה בנגן עצמו.
הבעייה היא שלעיתים הגרף המיוצר בתוכנת ה GraphEdit הוא לאו דווקא זה שמיוצר ע"י הנגן (אני כרגע לא אפרט את הסיבות לכך). GraphEdit רק מציג לנו מה ברירת המחדל (כלומר, ההעדפה של המחשב). במקרים מסויימים ניתן להתחבר (Connect to remote graph) במידה והנגן תומך בכך, אך רוב הנגנים אינם טורחים לעשות זאת.
במידה וזה המצב, אין ביכולתנו לדעת מהו הגרף האמיתי והיכן הפילטר הסורר…
הפתרון
דרך פשוטה לראות את הפילטרים בהם הנגן בחר היא להשתמש בפילטר שנקרא FFDSHOW Audio Decoder
והוא חלק מחבילת ה FFDSHOW הכל-כך מוכרת (הסברים על FFDSHOW ניתן למצוא באתר).
מה שנחמד בפילטר המסוים הזה הוא שברגע שהנגן משתמש בפילטר זה כחלק מהגרף שהוא בונה מוסיף הפילטר הזה איקון בשורת היישומים (TaskBar). דרך לחיצה על כפתור העכבר הימני על איקון זה נפתח תפריט שבחלקו העליון רשומים כל הפילטרים שכרגע בשימוש ע"י הנגן !!
חץ צהוב מצביע לאיקון של DDSHOW Audio Filter
חץ כחול מצביע למסגרת כחולה שמציגה את כל הפילטרים שבשימוש הגרף אותו הנגן בנה:
כיצד גורמים לנגן להשתמש בפילטר הזה ?
פותחים את אפלקציית ההגדרות של ה FFDSHOW Audio Filter. נקראת Audio decoder configuration
בתפריט שנקרא Codcs נגשים לשדה שנקרא Uncompressed ושם צריך לבחור בשדה שנקראה all supported.
* שימו לב שבסיום הבדיקות שלכם רצוי להחזיר שדה זה להיות disabled !!
מה עושה השינוי?
המשמעות של שינוי זה הוא שמעכשיו כל פילטר שמוציא ערוץ אודיו שעבר פיענוח כלשהו (כלומר אחרי פריסה) יתחבר לפילטר הזה (פעולה זו בעצם מעלה את העדיפות ,merit, של הפילטר).
אתם יכולים לראות שבתמונה השניה במאמר התווסף פילטר ה ffdshow audio decoder בין פילטר
ה MP3 Decoder (שמוציא ערוץ אודיו מפוענח) לבין פילטר Device Default DirectSound
(אגב זהו ה Renderer Filter)
סיכום
ברגע שיש לנו רשימה ברורה של פילטרים, ניתן להוסיף אותם ל-GRAPHEDIT ולראות כיצד הם משפיעים על המערכת. ברגע שחושדים במשהו (רצוי להריץ את GRAPHEDIT כשהמערכת עובדת תקינה ולרשום את שמות הפילטרים שנמצאים בשימוש, בכדי שאפשר יהיה לזהות שינוי לאחר התקנה של נגן או פילטר חדש שעושה לנו בעיות).
ניטרול או שינוי של ה-MERIT של הפילטרים הבעייתיים, ושיפור מצבם של אלה שעובדים כשורה יחזיר לנו את הנגנים ואת המחשב למצב כשיר.
תוספת קטנה למאמר
תוספת שמתייחסת רק לאלה שיש להם פילטר שמבצע passthrough לאודיו הדיגיטלי (בדר"כ כדי לשלוח את אודיו רב-ערוצי המקודד ישירות לרסיבר בלי הפענוח).
כדי שפילטר ה ffdshow audio decoder יתחבר אל הגרף (ואז דרכו ניתן לראות מהם הפילטרים בשימוש ע"י הנגן כפי שמוסבר במאמר) חייבים להוריד בזמן הבדיקות את פעולת ה passthrough מהפילטר (לדוגמה ל AC3Filter פילטר יש יכולת זו ראו תמונה)
אחרי הבדיקות ומציאת הפילטר הסורר ניתן כמובן להחזיר את יכולת ה passthrough

להמשך תגובות לכתבה לחץ כאן.
חלק מהתכנים באתר כוללים מעת לעת קישורים לתוכניות שותפים, שעבורם האתר מקבל עמלה עם רכישה בפועל באמצעותם.
עמלה זו איננה מייקרת את עלות הרכישה של המוצרים.