{"id":19929,"date":"2026-09-17T20:13:01","date_gmt":"2026-09-17T18:13:01","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/narzedzia\/browser-audio-codec-support\/"},"modified":"2026-09-17T20:13:01","modified_gmt":"2026-09-17T18:13:01","slug":"browser-audio-codec-support","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/browser-audio-codec-support\/","title":{"rendered":"Sprawdzenie kodek\u00f3w audio w przegl\u0105darce: kt\u00f3re formaty ta przegl\u0105darka odtwarza, strumieniuje i nagrywa"},"content":{"rendered":"<div class=\"lw-cs\" id=\"cs-wurzel\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<style>\n.lw-cs .cs-kacheln { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; margin: 14px 0 4px; }\n.lw-cs .cs-kachel { background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-radius: 8px; padding: 11px 14px; min-width: 0; }\n.lw-cs .cs-kachel-name { font-size: 0.74rem; color: var(--text-secondary, #a0a0b0); text-transform: uppercase; letter-spacing: 0.4px; }\n.lw-cs .cs-kachel-wert { font-family: monospace; font-size: 1.4rem; font-weight: 700; color: var(--text-primary, #e8e8ee); line-height: 1.25; white-space: nowrap; }\n.lw-cs .cs-tabelle { overflow-x: auto; margin-top: 6px; }\n.lw-cs table { border-collapse: collapse; width: 100%; font-size: 0.86rem; }\n.lw-cs th, .lw-cs td { text-align: left; padding: 6px 10px; border-bottom: 1px solid var(--border, #2a2a35); white-space: nowrap; }\n.lw-cs th { color: var(--text-primary, #e8e8ee); }\n.lw-cs td { color: var(--text-primary, #e8e8ee); }\n.lw-cs td.cs-typ { font-family: monospace; color: var(--text-secondary, #a0a0b0); }\n.lw-cs .cs-ja { color: var(--ok, #7ee787); font-weight: 700; }\n.lw-cs .cs-vielleicht { color: var(--cs-warn); font-weight: 700; }\n.lw-cs .cs-nein { color: var(--text-secondary, #a0a0b0); }\n.lw-cs { --cs-warn: #e8a33d; }\n:root[data-theme=\"light\"] .lw-cs { --cs-warn: #8f5300; }\n.lw-cs .cs-h { font-weight: 700; color: var(--text-primary, #e8e8ee); font-size: 0.95rem; margin: 24px 0 8px; }\n.lw-cs .cs-klein { font-size: 0.84rem; color: var(--text-secondary, #a0a0b0); line-height: 1.55; }\n.lw-cs .cs-knopf { background: transparent; color: var(--text-secondary, #a0a0b0); border: 1px solid var(--border, #2a2a35); padding: 9px 14px; border-radius: 6px; cursor: pointer; font-size: 0.9rem; margin-top: 14px; }\n.lw-cs a { color: var(--accent, #2ba6df); }\n@media (max-width: 480px) {\n    .lw-cs .cs-kacheln { grid-template-columns: 1fr 1fr; gap: 8px; }\n    .lw-cs .cs-kachel-wert { font-size: 1.15rem; }\n    .lw-cs th, .lw-cs td { padding: 6px 6px; }\n}\n<\/style>\n<p style=\"color: var(--text-secondary, #a0a0b0); margin-bottom: 18px;\">To, kt\u00f3re formaty audio odtwarza przegl\u0105darka, decyduje o tym, co dociera na stron\u0119 i jakiego formatu potrzebuje pr\u00f3bka d\u017awi\u0119kowa. Sprawdzenie pyta wprost t\u0119 przegl\u0105dark\u0119: element audio przez canPlayType, Media Source Extensions dla strumieniowania i MediaRecorder dla nagra\u0144. Nic nie jest pobierane ani wysy\u0142ane, to same zapytania.<\/p>\n<div id=\"cs-kacheln\" class=\"cs-kacheln\" data-mp-mask aria-live=\"polite\"><\/div>\n<div class=\"cs-h\">Odtwarzanie<\/div>\n<div class=\"cs-tabelle\">\n<table>\n<thead>\n<tr>\n<th>Format<\/th>\n<th>Typ MIME<\/th>\n<th>Element audio<\/th>\n<th>MediaSource<\/th>\n<\/tr>\n<\/thead>\n<tbody id=\"cs-abspielen\" data-mp-mask><\/tbody>\n<\/table><\/div>\n<p class=\"cs-klein\" style=\"margin: 8px 0 0;\">\u201ePrawdopodobnie\u201d oznacza wed\u0142ug standardu HTML, \u017ce przegl\u0105darka jest pewna; \u201emo\u017ce\u201d to ostro\u017cna odpowied\u017a zalecana przez standard, dop\u00f3ki obs\u0142uga nie jest ani potwierdzona, ani wykluczona.<\/p>\n<div class=\"cs-h\">Nagrywanie w przegl\u0105darce<\/div>\n<div class=\"cs-tabelle\">\n<table>\n<thead>\n<tr>\n<th>Format<\/th>\n<th>Typ MIME<\/th>\n<th>MediaRecorder<\/th>\n<\/tr>\n<\/thead>\n<tbody id=\"cs-aufnehmen\" data-mp-mask><\/tbody>\n<\/table><\/div>\n<p class=\"cs-klein\" style=\"margin: 8px 0 0;\">MediaRecorder dotyczy nagra\u0144 w przegl\u0105darce, na przyk\u0142ad notatki g\u0142osowej na stronie. Bez tego interfejsu w ka\u017cdym wierszu widnieje \u201enieznane\u201d.<\/p>\n<p>    <button id=\"cs-kopieren\" type=\"button\" class=\"cs-knopf\">Kopiowanie wyniku<\/button><br \/>\n    <span id=\"cs-kopiert\" data-mp-mask class=\"cs-klein\" style=\"margin-left: 10px;\"><\/span><\/p>\n<div class=\"cs-h\">Co oznaczaj\u0105 odpowiedzi<\/div>\n<p class=\"cs-klein\" style=\"margin: 0 0 6px;\">canPlayType w elemencie audio odpowiada wed\u0142ug standardu HTML pustym tekstem, gdy przegl\u0105darka na pewno nie potrafi odtworzy\u0107 danego typu, \u201emaybe\u201d, gdy nie potrafi ani potwierdzi\u0107, ani wykluczy\u0107 obs\u0142ugi, oraz \u201eprobably\u201d, gdy jest pewna.<\/p>\n<p class=\"cs-klein\" style=\"margin: 0 0 6px;\">MediaSource.isTypeSupported m\u00f3wi tylko, \u017ce dla tego typu da si\u0119 utworzy\u0107 SourceBuffer; specyfikacja wyra\u017anie zaznacza, \u017ce p\u00f3\u017aniejsze addSourceBuffer i tak mo\u017ce si\u0119 nie powie\u015b\u0107, gdy zabraknie zasob\u00f3w.<\/p>\n<p class=\"cs-klein\" style=\"margin: 0 0 6px;\">MediaRecorder.isTypeSupported wymienia kontenery i kodeki, w kt\u00f3rych ta przegl\u0105darka potrafi nagrywa\u0107. Ta lista cz\u0119sto r\u00f3\u017cni si\u0119 od listy format\u00f3w odtwarzanych.<\/p>\n<p class=\"cs-klein\" style=\"margin: 20px 0 0;\">\u0179r\u00f3d\u0142a:<br \/>\n        <a href=\"https:\/\/html.spec.whatwg.org\/multipage\/media.html#mime-types\" rel=\"noopener\">HTML Standard, 4.8.11.3 MIME types<\/a> \u00b7<br \/>\n        <a href=\"https:\/\/www.w3.org\/TR\/media-source-2\/\" rel=\"noopener\">Media Source Extensions<\/a>\n    <\/p>\n<p class=\"cs-klein\" style=\"font-size: 0.8rem; margin: 14px 0 0;\">Odpowiedzi dotycz\u0105 tej przegl\u0105darki na tym urz\u0105dzeniu, razem z systemem i jego dekoderami sprz\u0119towymi; inne urz\u0105dzenie mo\u017ce odpowiedzie\u0107 inaczej. Sprawdzane s\u0105 deklaracje przegl\u0105darki, a nie samo odtwarzanie.<\/p>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"To, kt\u00f3re formaty audio odtwarza przegl\u0105darka, decyduje o tym, co dociera na stron\u0119 i jakiego formatu potrzebuje pr\u00f3bka d\u017awi\u0119kowa. Sprawdzenie pyta wprost t\u0119 przegl\u0105dark\u0119: element audio przez canPlayType, Media Source Extensions dla strumieniowania i MediaRecorder dla nagra\u0144. Nic nie jest pobierane ani wysy\u0142ane, to same zapytania.\",\"h_abspielen\":\"Odtwarzanie\",\"h_aufnehmen\":\"Nagrywanie w przegl\u0105darce\",\"sp_format\":\"Format\",\"sp_typ\":\"Typ MIME\",\"sp_element\":\"Element audio\",\"sp_mediasource\":\"MediaSource\",\"sp_recorder\":\"MediaRecorder\",\"abspielen_hinweis\":\"\u201ePrawdopodobnie\u201d oznacza wed\u0142ug standardu HTML, \u017ce przegl\u0105darka jest pewna; \u201emo\u017ce\u201d to ostro\u017cna odpowied\u017a zalecana przez standard, dop\u00f3ki obs\u0142uga nie jest ani potwierdzona, ani wykluczona.\",\"aufnehmen_hinweis\":\"MediaRecorder dotyczy nagra\u0144 w przegl\u0105darce, na przyk\u0142ad notatki g\u0142osowej na stronie. Bez tego interfejsu w ka\u017cdym wierszu widnieje \u201enieznane\u201d.\",\"knopf_kopieren\":\"Kopiowanie wyniku\",\"kopiert\":\"skopiowano\",\"kopieren_fehler\":\"kopiowanie niemo\u017cliwe\",\"k_spielbar\":\"Odtwarzalne\",\"k_sicher\":\"Potwierdzone\",\"k_quelle\":\"Przez MediaSource\",\"k_aufnahme\":\"Formaty nagrywania\",\"wert_probably\":\"prawdopodobnie\",\"wert_maybe\":\"mo\u017ce\",\"wert_ja\":\"tak\",\"wert_nein\":\"nie\",\"wert_unbekannt\":\"nieznane\",\"h_erklaerung\":\"Co oznaczaj\u0105 odpowiedzi\",\"erkl_canplaytype\":\"canPlayType w elemencie audio odpowiada wed\u0142ug standardu HTML pustym tekstem, gdy przegl\u0105darka na pewno nie potrafi odtworzy\u0107 danego typu, \u201emaybe\u201d, gdy nie potrafi ani potwierdzi\u0107, ani wykluczy\u0107 obs\u0142ugi, oraz \u201eprobably\u201d, gdy jest pewna.\",\"erkl_mediasource\":\"MediaSource.isTypeSupported m\u00f3wi tylko, \u017ce dla tego typu da si\u0119 utworzy\u0107 SourceBuffer; specyfikacja wyra\u017anie zaznacza, \u017ce p\u00f3\u017aniejsze addSourceBuffer i tak mo\u017ce si\u0119 nie powie\u015b\u0107, gdy zabraknie zasob\u00f3w.\",\"erkl_aufnahme\":\"MediaRecorder.isTypeSupported wymienia kontenery i kodeki, w kt\u00f3rych ta przegl\u0105darka potrafi nagrywa\u0107. Ta lista cz\u0119sto r\u00f3\u017cni si\u0119 od listy format\u00f3w odtwarzanych.\",\"quellen_titel\":\"\u0179r\u00f3d\u0142a\",\"grenze\":\"Odpowiedzi dotycz\u0105 tej przegl\u0105darki na tym urz\u0105dzeniu, razem z systemem i jego dekoderami sprz\u0119towymi; inne urz\u0105dzenie mo\u017ce odpowiedzie\u0107 inaczej. Sprawdzane s\u0105 deklaracje przegl\u0105darki, a nie samo odtwarzanie.\"};<\/p>\n<p>    \/\/ KERN-ANFANG ------------------------------------------------------------\n    \/\/ Gefragt wird der Browser selbst: canPlayType am Audio-Element,\n    \/\/ MediaSource.isTypeSupported und MediaRecorder.isTypeSupported. Alle drei\n    \/\/ kommen als Funktionen herein, damit die Pruefung eigene einsetzen kann.<\/p>\n<p>    var ABSPIELEN = [\n        { id: 'wav', name: 'WAV (PCM)', typ: 'audio\/wav' },\n        { id: 'aiff', name: 'AIFF', typ: 'audio\/aiff' },\n        { id: 'flac', name: 'FLAC', typ: 'audio\/flac' },\n        { id: 'flac_mp4', name: 'FLAC in MP4', typ: 'audio\/mp4; codecs=\"flac\"' },\n        { id: 'mp3', name: 'MP3', typ: 'audio\/mpeg' },\n        { id: 'mp3_mp4', name: 'MP3 in MP4', typ: 'audio\/mp4; codecs=\"mp3\"' },\n        { id: 'aac_lc', name: 'AAC-LC in MP4', typ: 'audio\/mp4; codecs=\"mp4a.40.2\"' },\n        { id: 'he_aac', name: 'HE-AAC in MP4', typ: 'audio\/mp4; codecs=\"mp4a.40.5\"' },\n        { id: 'alac', name: 'ALAC in MP4', typ: 'audio\/mp4; codecs=\"alac\"' },\n        { id: 'vorbis_ogg', name: 'Vorbis in Ogg', typ: 'audio\/ogg; codecs=\"vorbis\"' },\n        { id: 'opus_ogg', name: 'Opus in Ogg', typ: 'audio\/ogg; codecs=\"opus\"' },\n        { id: 'opus_webm', name: 'Opus in WebM', typ: 'audio\/webm; codecs=\"opus\"' },\n        { id: 'vorbis_webm', name: 'Vorbis in WebM', typ: 'audio\/webm; codecs=\"vorbis\"' },\n        { id: 'ac3', name: 'AC-3 in MP4', typ: 'audio\/mp4; codecs=\"ac-3\"' },\n        { id: 'ec3', name: 'E-AC-3 in MP4', typ: 'audio\/mp4; codecs=\"ec-3\"' }\n    ];\n    var AUFNEHMEN = [\n        { id: 'webm_opus', name: 'Opus in WebM', typ: 'audio\/webm;codecs=opus' },\n        { id: 'webm', name: 'WebM (Vorgabe)', typ: 'audio\/webm' },\n        { id: 'ogg_opus', name: 'Opus in Ogg', typ: 'audio\/ogg;codecs=opus' },\n        { id: 'mp4_aac', name: 'AAC in MP4', typ: 'audio\/mp4;codecs=mp4a.40.2' },\n        { id: 'mp4', name: 'MP4 (Vorgabe)', typ: 'audio\/mp4' },\n        { id: 'wav', name: 'WAV (PCM)', typ: 'audio\/wav' },\n        { id: 'mpeg', name: 'MP3', typ: 'audio\/mpeg' }\n    ];<\/p>\n<p>    function pruefen(kannSpielen, quelleStuetzt, nimmtAuf) {\n        var abspielen = ABSPIELEN.map(function (f) {\n            var antwort = null;\n            if (kannSpielen) {\n                try { antwort = String(kannSpielen(f.typ) || ''); } catch (e) { antwort = null; }\n            }\n            var quelle = null;\n            if (quelleStuetzt) {\n                try { quelle = !!quelleStuetzt(f.typ); } catch (e) { quelle = null; }\n            }\n            return { id: f.id, name: f.name, typ: f.typ, element: antwort, quelle: quelle };\n        });\n        var aufnehmen = AUFNEHMEN.map(function (f) {\n            var kann = null;\n            if (nimmtAuf) {\n                try { kann = !!nimmtAuf(f.typ); } catch (e) { kann = null; }\n            }\n            return { id: f.id, name: f.name, typ: f.typ, kann: kann };\n        });\n        return { abspielen: abspielen, aufnehmen: aufnehmen };\n    }<\/p>\n<p>    function bewerten(e) {\n        var sicher = 0, vielleicht = 0, quelle = 0, aufnahme = 0, quelleBekannt = false, aufnahmeBekannt = false;\n        e.abspielen.forEach(function (z) {\n            if (z.element === 'probably') { sicher++; }\n            else if (z.element === 'maybe') { vielleicht++; }\n            if (z.quelle !== null) { quelleBekannt = true; if (z.quelle) { quelle++; } }\n        });\n        e.aufnehmen.forEach(function (z) {\n            if (z.kann !== null) { aufnahmeBekannt = true; if (z.kann) { aufnahme++; } }\n        });\n        return {\n            gesamt: e.abspielen.length, sicher: sicher, vielleicht: vielleicht, spielbar: sicher + vielleicht,\n            quelle: quelle, quelleBekannt: quelleBekannt, aufnahme: aufnahme, aufnahmeBekannt: aufnahmeBekannt,\n            aufnahmeGesamt: e.aufnehmen.length\n        };\n    }<\/p>\n<p>    function bericht(e) {\n        var zeilen = [T.h_abspielen];\n        e.abspielen.forEach(function (z) {\n            zeilen.push('  ' + z.name + ' (' + z.typ + '): ' + antwortText(z.element) + ' | MediaSource: ' + jaNein(z.quelle));\n        });\n        zeilen.push(T.h_aufnehmen);\n        e.aufnehmen.forEach(function (z) {\n            zeilen.push('  ' + z.name + ' (' + z.typ + '): ' + jaNein(z.kann));\n        });\n        return zeilen.join('\\n');\n    }\n    \/\/ KERN-ENDE --------------------------------------------------------------<\/p>\n<p>    function antwortText(a) {\n        if (a === 'probably') { return T.wert_probably; }\n        if (a === 'maybe') { return T.wert_maybe; }\n        if (a === '') { return T.wert_nein; }\n        return T.wert_unbekannt;\n    }\n    function jaNein(w) { return w === null ? T.wert_unbekannt : (w ? T.wert_ja : T.wert_nein); }\n    function klasse(a) {\n        if (a === 'probably' || a === true) { return 'cs-ja'; }\n        if (a === 'maybe') { return 'cs-vielleicht'; }\n        return 'cs-nein';\n    }\n    function text(schluessel, werte) {\n        return String(T[schluessel]).replace(\/\\{(\\w+)\\}\/g, function (m, k) { return werte && werte[k] !== undefined ? werte[k] : m; });\n    }\n    function el(id) { return document.getElementById(id); }<\/p>\n<p>    function kachel(name, wert) {\n        var d = document.createElement('div'), n = document.createElement('div'), w = document.createElement('div');\n        d.className = 'cs-kachel'; n.className = 'cs-kachel-name'; w.className = 'cs-kachel-wert';\n        n.textContent = name;\n        w.textContent = wert;\n        w.setAttribute('data-kachel', name);\n        d.appendChild(n); d.appendChild(w);\n        return d;\n    }<\/p>\n<p>    function darstellen(e) {\n        var z = bewerten(e);\n        var k = el('cs-kacheln');\n        k.textContent = '';\n        k.appendChild(kachel(T.k_spielbar, z.spielbar + ' \/ ' + z.gesamt));\n        k.appendChild(kachel(T.k_sicher, String(z.sicher)));\n        k.appendChild(kachel(T.k_quelle, z.quelleBekannt ? (z.quelle + ' \/ ' + z.gesamt) : T.wert_unbekannt));\n        k.appendChild(kachel(T.k_aufnahme, z.aufnahmeBekannt ? (z.aufnahme + ' \/ ' + z.aufnahmeGesamt) : T.wert_unbekannt));<\/p>\n<p>        var tb = el('cs-abspielen');\n        tb.textContent = '';\n        e.abspielen.forEach(function (zeile) {\n            var tr = document.createElement('tr');\n            [[zeile.name, ''], [zeile.typ, 'cs-typ'], [antwortText(zeile.element), klasse(zeile.element)], [jaNein(zeile.quelle), klasse(zeile.quelle)]]\n                .forEach(function (feld) {\n                    var td = document.createElement('td');\n                    td.textContent = feld[0];\n                    if (feld[1]) { td.className = feld[1]; }\n                    tr.appendChild(td);\n                });\n            tb.appendChild(tr);\n        });<\/p>\n<p>        var ta = el('cs-aufnehmen');\n        ta.textContent = '';\n        e.aufnehmen.forEach(function (zeile) {\n            var tr = document.createElement('tr');\n            [[zeile.name, ''], [zeile.typ, 'cs-typ'], [jaNein(zeile.kann), klasse(zeile.kann)]].forEach(function (feld) {\n                var td = document.createElement('td');\n                td.textContent = feld[0];\n                if (feld[1]) { td.className = feld[1]; }\n                tr.appendChild(td);\n            });\n            ta.appendChild(tr);\n        });\n        return e;\n    }<\/p>\n<p>    function messen() {\n        var audio = null;\n        try { audio = document.createElement('audio'); } catch (e) { audio = null; }\n        var kannSpielen = audio && audio.canPlayType ? function (t) { return audio.canPlayType(t); } : null;\n        var Quelle = window.MediaSource || window.WebKitMediaSource;\n        var quelleStuetzt = Quelle && Quelle.isTypeSupported ? function (t) { return Quelle.isTypeSupported(t); } : null;\n        var Rec = window.MediaRecorder;\n        var nimmtAuf = Rec && Rec.isTypeSupported ? function (t) { return Rec.isTypeSupported(t); } : null;\n        return pruefen(kannSpielen, quelleStuetzt, nimmtAuf);\n    }<\/p>\n<p>    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.CS = {\n        T: T, ABSPIELEN: ABSPIELEN, AUFNEHMEN: AUFNEHMEN, pruefen: pruefen, bewerten: bewerten, bericht: bericht,\n        darstellen: darstellen, messen: messen, antwortText: antwortText, jaNein: jaNein, text: text\n    };<\/p>\n<p>    if (!el('cs-wurzel') || !el('cs-kacheln')) { return; }\n    var ergebnis = darstellen(messen());\n    var kopieren = el('cs-kopieren'), kopiert = el('cs-kopiert');\n    if (kopieren) {\n        kopieren.addEventListener('click', function () {\n            var t = bericht(ergebnis);\n            function gut() { kopiert.textContent = T.kopiert; }\n            if (navigator.clipboard && navigator.clipboard.writeText) {\n                navigator.clipboard.writeText(t).then(gut, function () { kopiert.textContent = T.kopieren_fehler; });\n            } else {\n                kopiert.textContent = T.kopieren_fehler;\n            }\n        });\n    }\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pyta t\u0119 przegl\u0105dark\u0119 wprost, kt\u00f3re formaty audio odtwarza przez element audio, strumieniuje przez Media Source Extensions i nagrywa przez MediaRecorder, oraz podaje odpowied\u017a dla ka\u017cdego kontenera i kodeka wraz ze znaczeniem \u201eprobably\u201d i \u201emaybe\u201d.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9284,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92906],"class_list":["post-19929","page","type-page","status-publish","hentry","tag-music-production-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Sprawdzenie kodek\u00f3w audio w przegl\u0105darce: kt\u00f3re formaty ta przegl\u0105darka odtwarza, strumieniuje i nagrywa - Lukas Wojcik - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/browser-audio-codec-support\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sprawdzenie kodek\u00f3w audio w przegl\u0105darce: kt\u00f3re formaty ta przegl\u0105darka odtwarza, strumieniuje i nagrywa - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Pyta t\u0119 przegl\u0105dark\u0119 wprost, kt\u00f3re formaty audio odtwarza przez element audio, strumieniuje przez Media Source Extensions i nagrywa przez MediaRecorder, oraz podaje odpowied\u017a dla ka\u017cdego kontenera i kodeka wraz ze znaczeniem \u201eprobably\u201d i \u201emaybe\u201d.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/browser-audio-codec-support\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/browser-audio-codec-support\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/browser-audio-codec-support\\\/\",\"name\":\"Sprawdzenie kodek\u00f3w audio w przegl\u0105darce: kt\u00f3re formaty ta przegl\u0105darka odtwarza, strumieniuje i nagrywa - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-09-17T18:13:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/browser-audio-codec-support\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/browser-audio-codec-support\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/browser-audio-codec-support\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/toolbox-3\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Sprawdzenie kodek\u00f3w audio w przegl\u0105darce: kt\u00f3re formaty ta przegl\u0105darka odtwarza, strumieniuje i nagrywa\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Sprawdzenie kodek\u00f3w audio w przegl\u0105darce: kt\u00f3re formaty ta przegl\u0105darka odtwarza, strumieniuje i nagrywa - Lukas Wojcik - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/browser-audio-codec-support\/","og_locale":"en_US","og_type":"article","og_title":"Sprawdzenie kodek\u00f3w audio w przegl\u0105darce: kt\u00f3re formaty ta przegl\u0105darka odtwarza, strumieniuje i nagrywa - Lukas Wojcik - Blog","og_description":"Pyta t\u0119 przegl\u0105dark\u0119 wprost, kt\u00f3re formaty audio odtwarza przez element audio, strumieniuje przez Media Source Extensions i nagrywa przez MediaRecorder, oraz podaje odpowied\u017a dla ka\u017cdego kontenera i kodeka wraz ze znaczeniem \u201eprobably\u201d i \u201emaybe\u201d.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/browser-audio-codec-support\/","og_site_name":"Lukas Wojcik - Blog","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/browser-audio-codec-support\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/browser-audio-codec-support\/","name":"Sprawdzenie kodek\u00f3w audio w przegl\u0105darce: kt\u00f3re formaty ta przegl\u0105darka odtwarza, strumieniuje i nagrywa - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-09-17T18:13:01+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/browser-audio-codec-support\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/browser-audio-codec-support\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/browser-audio-codec-support\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/toolbox-3\/"},{"@type":"ListItem","position":3,"name":"Sprawdzenie kodek\u00f3w audio w przegl\u0105darce: kt\u00f3re formaty ta przegl\u0105darka odtwarza, strumieniuje i nagrywa"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/19929","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=19929"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/19929\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9284"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=19929"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=19929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}