diff --git a/plugin.video.youtube/LICENSES/GPL-3.0-or-later b/plugin.video.youtube/LICENSES/GPL-3.0-or-later deleted file mode 100644 index 9cecc1d466..0000000000 --- a/plugin.video.youtube/LICENSES/GPL-3.0-or-later +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {one line to give the program's name and a brief idea of what it does.} - Copyright (C) {year} {name of author} - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - {project} Copyright (C) {year} {fullname} - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/plugin.video.youtube/addon.xml b/plugin.video.youtube/addon.xml index 6c2927e838..d30bd9f82f 100644 --- a/plugin.video.youtube/addon.xml +++ b/plugin.video.youtube/addon.xml @@ -1,9 +1,9 @@ - + - + @@ -13,14 +13,19 @@ -[fix] Nexus compatibility with InfoTagVideo |contrib: jurialmunkey| -[chg] make httpd /api url case insensitive due to skin choice of uppercase settings text -[chg] use listitem property for Inputstream Adaptive headers instead of url piped on Nexus+ +[new] quality and stream feature selection +[new] enable HLS live streams +[new] stream and language labelling +[chg] separately enable local/remote history +[chg] restore unsupported compatibility for Kodi v19 (Matrix) +[fix] fix various playback issues |contrib: various| +[fix] Limit host connections getting subscription feeds |contrib: cas--| +[fix] fix handling of connection failures [upd] Translations updated from Kodi Weblate - icon.png - fanart.jpg + resources/media/icon.png + resources/media/fanart.jpg all GPL-2.0-only diff --git a/plugin.video.youtube/changelog.txt b/plugin.video.youtube/changelog.txt new file mode 100644 index 0000000000..ea5b1eca8b --- /dev/null +++ b/plugin.video.youtube/changelog.txt @@ -0,0 +1,959 @@ +7.0.2 +[new] quality and stream feature selection +[new] enable HLS live streams +[new] stream and language labelling +[chg] separately enable local/remote history +[chg] restore unsupported compatibility for Kodi v19 (Matrix) +[fix] fix various playback issues |contrib: various| +[fix] Limit host connections getting subscription feeds |contrib: cas--| +[fix] fix handling of connection failures +[upd] Translations updated from Kodi Weblate + +7.0.1 +[fix] video duration not showing in lists +[upd] Translations updated from Kodi Weblate + +7.0.0 +[rem] removed support for versions of Kodi pre-Nexus v20 +[rem] removed support for python 2 +[rem] removed dependency on six +[upd] Translations updated from Kodi Weblate + +6.8.25 +[fix] Nexus compatibility with InfoTagVideo |contrib: jurialmunkey| +[chg] make httpd /api url case insensitive due to skin choice of uppercase settings text +[chg] use listitem property for Inputstream Adaptive headers instead of url piped on Nexus+ +[upd] Translations updated from Kodi Weblate + +6.8.24 +[fixup] resolve playback history not being updated +[add] add opus audio support +[upd] use more descript reasons for failed playback +[upd] Translations updated from Kodi Weblate + +6.8.23 +[revert] subscription groups/tags - causing breaking issues + +6.8.21 +[chg] Icons and Fanart updated |contrib: papercore-dev| +[add] Add setting General - Hide short videos (1 minute or less) +[add] Add support for /shorts/video_id format links |contrib: jmbreuer| +[add] Add Fanart to Subscriptions +[add] Access to Saved Playlists +[fix] Display of channel fanart +[fix] Misc missing fanart +[lang] translation updates from Weblate + +6.8.20 +[fix] Fix to_str |contrib: RNavega| +[fix] Fix playback buffering |contrib: RNavega| +[fix] Subtitle language names +[lang] translation updates from Weblate + +6.8.19 +[fix] /uri2addon/ endpoint for playback of youtube.com urls +[fix] Don't assume addon is installed in home directory |contrib: jfly| +[lang] translation updates from Weblate + +6.8.18 +[fix] Fix to_str |contrib: RNavega| +[fix] Fix playback buffering |contrib: RNavega| +[lang] translation updates from Weblate + +6.8.17 +[fix] Fix comments on Kodi 19+ |contrib: ramateur| +[fix] Fix ratebypass +[upd] Update icon and fanart |contrib: papercore-dev| +[lang] translation updates from Weblate + +6.8.16 +[fix] Fix playback of some content (ie. Music videos) +[fix] Calcuate n parameter to enable ratebypass + +6.8.15 +[fixup] No streams found, consent cookies |contrib: jaylinski| +[fixup] Age gate detection, show age gate error instead of 'No streams found' +[fixup] encoding of some titles/authors - ie. russian +[lang] translation updates from Weblate + +6.8.14 +[fixup] playback of some streams due to encoding issues +[fixup] default player response type + +6.8.13 +[fix] player config and client discovery +[fix] No Streams Found |contrib: 14mRh4X0r| +[fix] capability map to contain unversioned capabilities |contrib: jmbreuer| +[lang] zh_tw strings |contrib: JuenTingShie| + +6.8.11 +[fix] mktime overflow when loading My Subscriptions +[fix] encoding issues in search history |contrib: dreznichuk| + +6.8.10 +[fix] fix javascript player retrieval and playback of some videos for affected users |contrib: thomazz-nl| + - Invalid URL 'http://': No host supplied + +6.8.9 +[fix] my subscriptions section using YouTube RSS |contrib: PureHemp| +[fix] items per page settings on Kodi 19 +[chg] recommendations only available for users with custom history playlist id configured +[chg] no longer show watch later unless custom watch later playlist is configured +[rem] remove usage of discontinued api and dual login (no longer required) + +6.8.8 +[fixup] encoding of subtitle track names + +6.8.7 +[fixup] encoding of titles and authors during playback + +6.8.6 +[fix] some videos failing to play with an Invalid URL exception +[fix] searching in some instances with encoding issues |contrib: tsaklidis| +[fix] support python 3.9 html.unescape |contrib: asavah| + +6.8.5 +[fix] playback of purchased movies |contrib: MisterD81| +[fix] notifications for some languages on Kodi 19 +[fix] searching for some languages +[fix] loading on some versions of python 3 +[fix] some videos failing to play with an Invalid URL exception +[upd] use xbmcvfs.translatePath if available, clean up for Kodi 19 + +6.8.4 +[fix] next page now ignores sorting, remains at the end of the directory +[fix] searching, no longer require remote safe search +[fix] notifications for some languages +[chg] only log http server ping failures +[lang] zh_cn strings |contrib: yureng, xiaojun| + +6.8.3 +[fix] playback of some videos +[fix] notifications for some languages |contrib: Mutronics| +[fix] fix rating videos causing and error even though it succeeded +[upd] cache javascript player url for4 hours, reduces http requests per play by 1 +[upd] use new settings format on Kodi 19 +[lang] el_gr strings |contrib: twilight0| +[lang] hu_hu strings |contrib: thelacesz| + +6.8.2 +[fixup] recommendations with > 50 channels + +6.8.1 +[fix] playback failing +[fix] viewing comments when logged in +[fix] intermittent issue with Subscriptions +[fix] encoding of video unavailable messages +[upd] updates to recommendations +[upd] update logging for Kodi 19 +[lang] fr_fr strings |contrib: alan7000| +[lang] pl_pl strings |contrib: drrak| +[lang] nl_nl strings |contrib: Markman-B| + +6.8.0 +[add] support for video comments, Comments in the More... dialog |contrib: doko-desuka| +[add] simulate deprecated recommended home API |contrib: hedleyroos| +[fix] error caused by timestamp formatting +[fix] fix Premiere's exiting after 5 seconds |contrib: jpfox156| +[fix] playlists over json-rpc |contrib: JasperE84| +[lang] de_de strings |contrib: tweimer| +[lang] el_gr strings |contrib: twilight0| +[lang] es_es strings |contrib: roliverosc| +[lang] pt_pt strings |contrib: daniel3x| + +6.7.0 +[add] send PlaybackInit, PlaybackStarted, PlaybackStopped notifications containing video id, channel id, and the status of the playing video +[fix] allow playback regardless of API status + - fixes playback for strm, playlists, other add-ons, and sharing videos from devices +[fix] finding player config, allow playback to continue when not found if possible +[fix] fix possible loop due to invalid keys and login information +[fix] fix playback of mpeg-dash streams if HTTP Server - Listen on IP is blank +[upd] use a dialog to notify users of API key requirements with link to wiki + - https://ytaddon.page.link/keys +[rem] remove provided api keys +[lang] de_de strings |contrib: tweimer| +[lang] el_gr strings |contrib: twilight0| +[lang] hu_hu strings |contrib: thelacesz| +[lang] pl_pl strings |contrib: drrak| + +6.6.0 +[add] 'Play (Ask for quality)' context menu +[add] search by channel or playlist id +[add] hide_folders, hide_playlists, hide_search, and hide_live to /channel// end-point + - ie. plugin://plugin.video.youtube/channel/UC4PooiX37Pld1T8J5SYT-SQ/?hide_folders=true will hide all folders(Playlists, Search, and Live) in the channel listing +[fix] playback for some videos (ie. music videos) +[fix] playback of some videos with no adaptive video streams +[fix] don't update watch history when incognito/screensaver/live |contrib: regseb| +[fix] search prompting for input after video playback or refresh +[lang] el_gr strings |contrib: twilight0| +[lang] es_es strings |contrib: roliverosc| +[lang] pt_br strings |contrib: MediaBrasil| +[lang] cs_cz strings |contrib: llzn.cz| +[lang] it_it strings |contrib: SebastianoPistore| +[lang] de_de strings |contrib: tweimer| + +6.5.2 +[fix] playback (No streams found) +[fix] missing metadata +[fix] ended live streams not using mpeg-dash when enabled +[fix] subscriptions not showing latest videos +[upd] simplify youtube_resolver regex |contrib: Twilight0| +[lang] de_de strings |contrib: TehTux| +[lang] pl_pl strings |contrib: drrak| +[lang] nl_nl strings |contrib: Markman-B| + +6.5.1 +[add] get_live to youtube_requests module to retrieve live stream info for a channel +[add] Adaptive (MP4) and Adaptive (WEBM) to MPEG-DASH - Video quality +[fix] live stream playback +[fix] unable to seek when using mpeg-dash +[fix] mpeg-dash video quality selection +[fix] sqlite requests breaking when another add-on/module uses sqlite3.register_converter(..) +[fix] signal endofdirectory in case of a provider navigation exception |contrib: enen92| + +6.5.0 +[add] Video quality selection to Settings - MPEG-DASH +[add] Limit to 30fps to Settings - MPEG-DASH +[add] Uploads playlist to channel playlists +[chg] Use search for channel videos instead of the Uploads playlist +[fix] Signature cipher, some videos unplayable (ie. music videos) +[fix] Playback monitoring using Python 3 +[fix] unescape html entities in title and plot +[fix] handling of invalid grant when refreshing access token +[fix] adding suggested videos when played from some widgets +[fix] http server /client_ip using Python 3 |contrib: t6| +[upd] refactor youtube_resolver.resolve +[lang] el_gr strings |contrib: twilight0| +[lang] es_es strings |contrib: roliverosc| +[lang] ko_kr strings |contrib: parkmino| + +6.4.1 +[upd] Use the activation url provided by the authentication request +[add] add Settings - MPEG-DASH - Default to WEBM adaptation set + - required for 4k stream automatic selection +[add] add Settings - MPEG-DASH - Include VP9.2 + - includes HDR content in the manifest +[add] add support for &hide_folders=true parameter in search query urls + - when added to the url it will hide the Playlists, Channels, and Live folders +[add] &seek= to play urls +[fix] fix playback of Purchases +[fix] fixed saved playlists that don't belong to a channel +[fix] mpeg-dash frame rate representation +[fix] datetime parsing if no datetime string is available +[chg] handle playback monitoring in threads +[lang] nl_nl strings |contrib: MB1968| +[lang] el_gr strings |contrib: twilight0| + +6.4.0 +[add] 4K videos with InputStream Adaptive >= v2.3.14 + - Thanks to @peak3d +[fix] some videos not playing when logged in +[fix] reset function cache at restart/update to resolve issues persisting due to cached results +[fix] service potentially not shutting down http server +[fix] added to playlist/subscriptions notifications +[fix] only generate mpeg-dash file if adaptive formats are available +[fix] map frame rates to more common representation to lessen the chance of double refresh rate changes (only applies to generated mpeg-dash files) +[fix] currently playing file check when playing file is a plugin:// url +[chg] Settings - General - Autoplay suggested videos + - limit playlist size to 1000 videos + - request less relevant videos at one time + - old behavior: add 50 most relevant videos for each video played, repeats allowed + - result: a lot of barely relevant videos in groups of 50 + - new behavior: add single most relevant video, no repeats + - result: next video is always the most relevant video to the last video played +[upd] player javascript retrieval + +6.3.1 +[fix] ensure playback monitoring is monitoring the correct item +[fix] check for abortRequested while processing purchased collections +[upd] Use setArt instead of iconImage, thumbnailImage and setProperty('fanart_image') + +6.3.0 +[add] support for keymapping of some endpoints, wiki: https://kodi.wiki/view/Add-on:YouTube#Keymaps +[add] 'Rate videos in playlists' setting to 'Settings - General - Rate after watching' +[add] Support for purchased collections |contrib: MisterD81| +[fix] Playback of some videos (e.g. music videos) +[fix] Live stream playback +[fix] post play add to watch history +[fix] fix add-ons playback history not saving +[fix] playback monitoring/post play events triggering for the wrong videos in some cases +[fix] call setResolvedUrl(False) if get_video_streams fails +[upd] code cosmetics and resolve inspections +[upd] improve watch history tracking, actively report watch times and state during playback +[upd] sign in/out, switch user, and settings ListItems to isFolder=False and isPlayable=False +[upd] improve watch later playlist id retrieval and feedback +[upd] Use SPDX license identifier +[lang] de_de strings |contrib: tobhor| +[lang] el_gr strings |contrib: twilight0| +[lang] es_es strings |contrib: roliverosc| +[lang] ko_kr strings |contrib: parkmino| +[lang] nl_nl strings |contrib: Markman-B| + +6.2.3 +[add] Next Page to 'More...' -> 'Add to...' context menu +[add] icon and description to playlists in 'More...' -> 'Add to...' context menu on Kodi 17+ +[add] 'Play audio only' context menu item +[fix] generated dash with no supported video streams(audio only) being played when Audio only not enabled +[fix] potential RuntimeError when retrieving total time of playing content if player is stopped immediately +[lang] nl_nl strings |contrib: Markman-B| +[lang] pl_pl strings |contrib: xulek| +[lang] pl_pl strings |contrib: drrak| +[lang] sk_sk strings |contrib: jose1711| +[lang] el_gr strings |contrib: twilight0| +[lang] es_es strings |contrib: roliverosc| + +6.2.2 +[fix] signature function not found on some videos + +6.2.1 +[fix] some streams reporting as Unavailable +[fix] utf-8 file paths +[fix] settings, and switch user causing perpetual busy dialog on Kodi 18 + +6.2.0 +[add] Context menu -> 'Play with subtitles' |contrib: solarus| +[add] Option to download subtitles before playback in Settings -> General -> Configure subtitles +[add] Refresh context menu to all videos/live streams +[add] &strm=true parameter for strm files in Kodi 18 |contrib: vlmaksime| + - use description from library and set watched status +[add] 'Settings -> Advanced -> Use YouTube website urls' for external/alternative players + eg. Player: MPC-BE, URL: https://www.youtube.com/watch?v=C0NyvxTJGcQ + eg. playercorefactory.xml + + + + + C:\Program Files\MPC-BE x64\mpc-be64.exe + "{1}" /fullscreen /close + true + true + none + + + + + + +[fix] Reported background progress dialog percentage +[fix] Playlist items, use video_items instead of playback_items +[fix] search history size +[fix] remove Spanish (Latin America)|es-419 from the setup wizard, causing invalidLanguage and invalidRelevanceLanguage errors +[upd] Improve speed of playback starting and resolver + before: min: 1.5s max: 2.6s median: 1.7s + after: min: 0.9s max: 2.6s median: 1.2s +[chg] refactor logging and system version +[chg] Localize confirmation +[lang] el_gr strings |contrib: twilight0| +[lang] es_es strings |contrib: roliverosc| +[lang] es_mx strings |contrib: Intel11| +[lang] it_it strings |contrib: SebastianoPistore| +[lang] nl_nl strings |contrib: Markman-B| +[lang] ru_ru strings |contrib: vlmaksime| + +6.1.4 +[fix] Signature function not found + +6.1.3 +[fix] timedelta.total_seconds python 2.6 compat. + +6.1.2 +[fix] dash settings check and defaults +[fix] addon-check raised warning for services complex entry point +[fix] codacy raised issue in http server (https://app.codacy.com/app/Kodi/repo-plugins/pullRequest?prid=2080401) +[chg] move seek to onPlayBackStarted, onAVStarted only in K18 +[chg] geolocation provider changed from ipstack to ip-api +[del] frodo listitem art compatibility +[lang] ru_ru strings |contrib: Burgaduk| +[lang] zh_tw strings |contrib: Zankio| + +6.1.1 +[fix] http proxy using incorrect setting id causing 403 errors + +6.1.0 +[add] Multi-user support + - Switch User folder (default: on) Settings -> Folders + - User management (Add, Remove, Rename, Switch) Settings - Users + - Signed in users are green, Current user has an * +[add/upd] add data cache and optimize caching + - add Settings -> Maintenance -> Clear data cache/Delete data cache + - increase allowed cache size + - database accesses per 50 videos: before: 70~100 after: 4~6 + - load time of 50 videos w/ no cached videos: before: ~11.6 secs, after: ~3 secs + - load time of 50 videos w/ all cached videos: before: ~0.8 secs, after: ~0.7 secs + - cached size per 50 videos: before ~1MB, after ~550KB +[add] Refresh after watching (default: off) Settings -> General +[add] Completed Live folder (default: on) Settings -> Folders +[add] Upcoming Live folder (default: on) Settings -> Folders +[add] My Location folder (default: on) Settings -> Advanced -> Enable setup-wizard +[add] Play count minimum percent (default: 85%) Settings -> General -> Play count minimum percent +[add] Playback history (default: off) Settings -> Advanced -> Use playback history +[add] Time since published for videos as item properties Property(PublishedSince), Property(PublishedLocal) |contrib: pannal| +[add] Check My IP, Settings -> HTTP Server +[add] Developer authentication, allowing add-ons to use their own access tokens + - see youtube_authentication.py, youtube_registration.py, youtube_requests.py, and youtube_resolver.py +[upd] YouTube UTC datetimes to local timezone |contrib: pannal| +[upd] Localize API key errors, provide a more descriptive notification +[fix] Add to YouTube watch history +[fix] My Channel videos (Error 403) +[fix] allow fallback to dash, when using Audio only +[fix] Signature function not found error for some users +[fix] Context Menu -> More -> Related Videos w/ Kodi 18 +[fix] Sign In/Sign Out causing crash with Kodi 18 nightlies +[fix] Channel 'mine' caching +[fix] Time changing when playing generated dash +[lang] es_es strings |contrib: roliverosc| +[lang] el_gr strings |contrib: twilight0| +[lang] nl_nl strings |contrib: Markman-B| + +6.0.2 +[fix] incorrectly raised 'Proxy is not running' error + +6.0.1 +[fix] notification encoding + +6.0.0 +[add] Python 3 compat. +[add] Settings -> Maintenance -> Delete temporary files +[add] Settings -> General -> Rate video after watching +[add] Settings -> API -> Enable API configuration page + - when enabled, visit http://:/api to configure API keys from a web browser + - port is configured in Settings - HTTP Server - Port +[chg] Storing personal api keys in api_keys.json +[chg] Storing login tokens in access_manager.json +[add] youtube_registration module, register developer keys and use them by appending an addon_id= parameter to youtube add-on plugin urls +[add] screensaver=true parameter to /play route - no suggested videos, no post play events, don't ask for quality +[add] play route for channel live streams + - plugin://plugin.video.youtube/play/?channel_id=UCLA_DiR1FfKNvjuUpBHmylQ&live=1 +[add] Purchases + - requires Kodi 18 + - requires inputstream.adaptive >= 2.2.12 + - if a purchase fails after 10 seconds + - provide a debug log + - set InputStream Adaptive -> Settings -> Stream selection -> manual + - change video stream during playback to preferred working resolution + - huge thanks to peak3d +[add] relevanceLanguage to search requests +[add] Refresh to My Subscriptions (Filtered) +[fix] mpeg-dash proxy with multi-profiles +[fix] search input, now works with Yatse +[fix] Signature deciphering +[fix] context menu after playback +[fix] alternative player, do not append headers +[fix] My Subscriptions (Filtered) channel matching +[fix] Audio only, failover to video if no audio only streams available +[fix] My Subscriptions missing page 3 +[fix/upd] function cache, update max rows and resolve hang on some requests +[fix/upd] post play events happen post play +[fix/upd] set title from metadata on play +[chg] only automatically remove temp folder at start-up +[upd] Dutch strings [MB1968] +[upd] French strings [bubuleur] +[upd] Greek strings [twilight0] +[upd] Spanish strings [roliverosc] + +5.5.0 +[add] Saved Playlists +[add] allow developers to use their own api key + - xbmcgui.Window(10000).setProperty('plugin.video.youtube-configs', json.dumps({"origin": ADDON_ID, "main": {"system": SYSTEM_NAME, "key": API_KEY[, "id": CLIENT_ID, "secret": CLIENT_SECRET]}})) +[add] Audio only: Settings -> General +[add] Age gate enforcement: Settings -> General +[add] Quick search and Quick search (Incognito) + - Settings -> Folders + - incognito doesn't add to search history or run post play events (add to watch history) +[add] Quick search to channels (no history) +[add] Live folder to channels +[fix] My Channel videos incl. private +[fix] mpeg-dash vods, proxy required + - Settings - MPEG-DASH + - Thanks to Schtek for generating the needed mpd file +[fix/upd] use select dialog for subtitle settings + - [add] Configure subtitles: Settings -> General + - [add] Current language with No auto-generated subtitles option +[upd] language/translation paths * Isengard (15.x)+ required +[upd] youtube_resolver: allow resolve by url +[fix/upd] do not use distutils.version.LooseVersion for version compare [stefansaraev] +[fix/upd] add check to api key stripping +[fix/upd] subtitles default to non asr track when possible +[fix/upd] login client logging and endpoints +[fix/upd] Watch Later + - Clear: Settings - Folders - Custom Watch Later playlist id + - Settings - Folders - Retrieve Watch Later playlist id +[fix/upd] History + - cannot add to history from add-on + - Clear: Settings - Folders - Custom History playlist id +[fix] /api/update route logging +[rem] SPMC mpeg-dash support +[upd] Hebrew strings [Eng2Heb] +[upd] Polish strings [Etharr] +[upd] Italian strings [DjDiabolik] +[upd] Hungarian strings [lacesz-sh] + +5.4.5 +[fix] tighten regex for routing, resolving incorrect routing + +5.4.4 +[fix] overlapping regex causing no playlist videos + +5.4.3 +[add] mpeg-dash support for live content (requires inputstream.adaptive >= 2.0.12) +[add] add route to update api keys + plugin://plugin.video.youtube/api/update/?enable=true&client_id=&client_secret=&api_key= +[fix/upd] refactor subtitles ** subtitles setting will be reset +[fix/upd] add My Subscriptions (Filtered) to dual login requirements +[fix/upd] only show Browse Channels when logged in +[upd] Greek strings [Twilight0] +[upd] Polish strings [Etharr] + +5.4.2 +[fix/upd] My Subscriptions + +5.4.1 +[fix/upd] dash working for vevo/etc +[upd] rework of auto subtitles +[fix] leia nightly login issues +[fix] 403 error on 'My Channel'/uploaded videos + +5.4.0 +[upd] Greek strings [Twilight0] +[upd] Polish strings [Etharr] +[upd] Finnish strings [teemue] +[upd] Spanish strings [roliverosc] +[fix/upd] resolve "Error Contents: 'q'" error [horstepipe] +[fix/upd] resolve Play All/Play from here not starting playback +[fix/upd] resolve playlists starting on second item +[fix/upd] allow dash in quality choices +[fix/upd] set content to files for menus, resolves mouse/scrolling +[fix/upd] fix cipher +[fix/upd] increase search history limit to 200 +[fix/upd] storage db +[add] Safe Search to Settings -> General +[add] Thumbnail size to Settings -> General +[add] Auto-play suggested [mehdilauters] +[add] Automatic subtitles [Uukrull] +[add] My Subscriptions (Filtered) - whitelist/blacklist version of My Subscriptions [chhe] +[add] module extension point: + add-ons can now add plugin.video.youtube dependency and resolve youtube video id's or make v3 api requests using the youtube plugin, + """ + + """ + """ + import youtube_resolver + streams = youtube_resolver.resolve() + import youtube_requests + videos = youtube_requests.get_videos([, , ]) + """ + +5.3.11 +[fix/upd] replace custom simple_requests with script.module.requests to resolve ssl and cross-platform issues +[add] 'Reset access manager' added to Maintenance section, sign out process(available when logged out) to clean up tokens in settings.xml +[upd] set default for SSL certificate verification to 'true' + +5.3.10 +[fix/upd] resolve 'No video streams found' for age-gated content and other minor. +[fix/upd] unescaping HTML entities in subtitles [mdmdmdmdmd] +[upd] Polish strings [Etharr] + +5.3.6-9 +[fix/upd] resolve 'No video streams found' +[fix/upd] SPMC dash support guidosarducci +[upd] Italian strings [iz8mbw] +[upd] Spanish strings [roliverosc] +[upd] Dutch strings [Sjord] +[fix/upd] Frodo backwards compat. setArt [lulol] + +5.3.5 +[add] MPEG-DASH support for Kodi 17 w/ inputstream.adaptive Add-on +[add] optional History and Watch Later custom playlist to Settings -> Folders, or (My)Playlists context menu to set/remove +[add] Maintenance section to Settings +[add] 'Subtitle language(s) to download' selection to Settings -> General +[add] 'Force SSL Certificate verification' to Settings -> Advanced +[upd] API key set switching from Settings -> API (this will log you out) +[upd] Dual login only required if My Subscriptions folder is enabled at sign-in +[upd] setting content type from episodes, now videos +[del] override view options +[upd] Norwegian strings [torstehu] +[upd] Greek strings [twilight0] +[upd] Portuguese strings [Wanilton] +[upd] Dutch strings [flemlion] +[fix/upd] API tweaking and various other updates + +5.2.2 (2016-05-28) +[upd] Insert old API-Keys from Bromix because of Quota-Exceed-Error +[add] Dutch strings (thanks to Guilouz) +[upd] French strings (thanks to royreinders) +[upd] Greek strings (thanks to Twilight0) + +5.2.1 (2016-05-12) +[add] Additional "Recommend for You" section (thanks to anxdpanic) + +5.2.0 (2016-05-11) +[upd] APi-Changer - First login delete old Credentials - New Login Required! Sorry :) + +5.1.20.7 (2016-05-03) +Workaround for the Quota Exceed-Error. +[add] API-Changer for a Pool of 6 API-Keys +[add] Auto-Reauthenticate with Pool-Key on "Quota Exceed" error +[add] "Use own API"-Button +[hint] The Message "Invalid Credentials" after Update could be fixed with deleting the Userdata-Settings.xml +[add] add Recommendations to main listing when logged in [anxdpanic] + +5.1.20.6 (2016-04-03) +[add] Greek Translation from twilight0 +[upd] Fixed italian translation from DjDiabolik + +5.1.20.5 (2016-03-20) +[upd] Ignore if '.apps.googleusercontent.com' entered in API Id string in add-on settings + +5.1.20.4 (2016-03-05) +[add] API Key in add-on settings +[upd] All string.po for new API Key functionality. New entries in language string.po files not translated from English. + +5.1.20.3 (2016-03-04) +[fix] All Key changed with YouTube TV + +5.1.20.2 (2016-03-04) +[fix] Live streams itag 91 patch +[add] Kodi 17 Krypton support. Patch by Uukrul + +5.1.20 (2016-02-25) +[fix] Final fix for APIs + +5.1.16 (2015-12-24) +[fix] reverted search order by date + +5.1.15 (2015-12-22) +[fix] signature calculation + +5.1.14 (2015-12-22) +[upd] default search order by date (newest first) +[fix] VEVO signature calculation + +5.1.13 (2015-12-20) +[fix] frodo...DIE FRODO DIE !!! +[fix] some cleanup for Jarvis + +5.1.12 (2015-11-29) +[fix] sort issues with Jarvis (thx 2 guidosarducci) + +5.1.11 (2015-11-24) +[fix] signature calculation (e.g. VEVO) + +5.1.10 (2015-11-13) +[fix] signature calculation (e.g. VEVO) + +5.1.9 (2015-09-21) +[add] Hebrew (thx 2 smoky-jr) +[upd] don't set default season and episodes (1x1) +[upd] another try to optimize the quota problem. Move all searches to the individual keys instead of one global +[fix] playback issues (skip discontinued video/format by YouTube) + +5.1.8 (2015-08-23) +[add] Bulgarian (thx 2 NEOhidra) +[upd] new quota shaping +[fix] personal playlists (Watch Later, Liked Video, ...) should work again +[fix] playback of VEVO videos - some videos still using discontinued ITAG13 +[fix] show login, when an endpoint is called, which requires permissions. + +5.1.7 (2015-07-15) +ADD: quota optimization via separate key for none-token depended API calls +UPD: new login semantic to sign out if someone upgrades to a newer version of KODI +FIX: 'Next Page (X)' item was added to the current playlist for playback + +5.1.6 (2015-06-14) +ADD: Chinese (Traditional) (thx 2 beddfaf916) +ADD: Czech (thx 2 tomaswcz) +ADD: Romanian (thx 2 Danny3) +UPD: test some new pagination for 'My Subscriptions' +UPD: Polish (thx 2 Etharr) +FIX: show notification again for unsupported rtmpe streams +FIX: unicode/utf-8 trouble in kodion + +5.1.5 (2015-05-29) +UPD: remove deprecation warning for Isengard +FIX: Issue 7163 (Missing pagination for subscriptions - YouTube APIv3 bug) + +5.1.4 (2015-05-26) +ADD: Frodo support (only if you install via zip or bromix repo) +UPD: new API-KEY - thanks to the guy for hijacking the key for trailer searches +UPD: Russian (thx 2 BytEvil) +FIX: cache wasn't working correctly without login + +5.1.3 (2015-05-16) +UPD: code cleaning +FIX: minor fixes + +5.1.2 (2015-05-15) +ADD: ask for video quality (optional) +UPD: code cleaning +UPD: Russian (thx 2 BytEvil) +UPD: kodion +FIX: add 'Play all' for playlist (again) + +5.1.1 (2015-05-10) +ADD: 'More...' in context menu to provide more items +ADD: show deprecation warning of old plugin calls starting with Isengard +ADD: EndPoint: 'plugin://plugin.video.youtube/search/?q=[URL_ENC_TEXT]' +ADD: API Key for each major version of KODI +UPD: Ukrainian (thx 2 Dukobpa3) +UPD: Russian (thx 2 BytEvil) +UPD: new second fanart +UPD: reorganized context menu +UPD: improved logging (debug only) +UPD: Improved error handling +FIX: refresh after rating a video (own playlist only) +FIX: add 'refresh' again for 'My subscriptions' +DEL: removed old v2 API + +5.1.0 (2015-04-22) +ADD: Double login to support 'My subscriptions' via YouTube TV API +ADD: 'More Links from the description' - extracts further links from the description +ADD: Korean (thx 2 piodio) +UPD: removed old implementation of 'My Subscriptions' +UPD: new fanart and icon +UPD: changed credentials +UPD: minimal quota-optimization +UPD: French (thx 2 eauland) +UPD: YouTube relevant description links - improved extraction and resolving of video/playlist urls +UPD: YouTube relevant description links - improved extraction and resolving of user/channel urls +UPD: YouTube relevant description links - improved performance resolving urls with caching +UPD: regex optimizations for season and expisode extraction +FIX: support fanart of channel in new implementation of 'My Subscriptions' +FIX: YouTube relevant description links - script error while some server return garbage for a location +FIX: script error while resolving url fails +FIX: script error while adding video to a playlist +FIX: show seconds (runtime) in Gotham + +5.0.9 (2015-03-14) +ADD: 'duration' optimized for KODI 15.X (Isengard) +ADD: EndPoint for listing the videos of a playlist: "plugin://plugin.video.youtube/playlist//" +UPD: optimized client-/server transfer (use gzip) + +5.0.8 (2015-03-05) +UPD: Polish (thx 2 Etharr) +UPD: Russian (thx 2 BytEvil) +FIX: improved playback + +5.0.7 (2015-02-27) +ADD: 'Refresh' in 'My Subscriptions' and all my playlists +ADD: rename search history item +UPD: French (thx 2 Trilip) +UPD: Ukrainian (thx 2 posledov) +UPD: Spanish (thx 2 PatOso) +FIX: possible crash on not well formed language ids +FIX: optimized logging +FIX: unicode trouble + +5.0.6 (2015-02-17) +ADD: setting for hiding the channel name in the description +ADD: Ukrainian (thx 2 posledov) +UPD: show 'Watch History' (default) +UPD: Russian (thx 2 BytEvil) +UPD: improved support for live streams +UPD: improved stream selection based on container +FIX: 'What to watch' => 'Popular right now' +FIX: don't crash while trying to play rtmpe +FIX: corrected ITAG 18 in 360p instead of 260p + + +5.0.5 (2015-02-01) +ADD: clear search history items +UPD: replace context menu not everywhere +UPD: dropped dependency of 'requests'-module because of performance issues +FIX: Add playing video to the 'Watch History' +FIX: maybe a fix for a problem (again!) on unix systems while using python 2.7.9 + certificate verification +FIX: removed pagination for "Related Videos" - the fix before produced some nasty side-effects +FIX: Vevo signature + +5.0.4 (2015-01-15) +ADD: 'Live' in search +ADD: 'Play with...' for supporting external/alternative player +ADD: live events (needed some tests and feedback) +ADD: support for user names instead of channel ids +UPD: set XBMC/KODI to at least Gotham 13.2 +UPD: Setup-Wizard views based on content type (KODION update) +FIX: Playlist should work again +FIX: Pagination in APIv2 +FIX: settings for hiding 'Live' menu +DEL: support for Frodo + +5.0.3 (2015-01-08) +ADD: 'Disliked Videos' +ADD: 240p, 360p and 480p +UPD: adjustment in KODION classes (maybe causing problems on MAC OS X 10.10.X + Python 2.6) +UPD: Russian (thx 2 BytEvil) +UPD: Spanish (thx 2 PatOso) +UPD: Polish (thx 2 D.K.) +FIX: German translation +FIX: some Frodo updates + +5.0.2 (2015-01-01) +ADD: Support for shared playlists via Yatse +ADD: 'Play from here' for playlists +ADD: 'Queue Video' +FIX: German translation +FIX: Portuguese (Brazil) (thx 2 ASH_Macedo) + +5.0.1 (2014-12-31) +ADD: 'Play all' (default, reverse, shuffle) +ADD: Italian (thx 2 peppe_sr) +ADD: Portuguese (Brazil) (thx 2 ASH_Macedo) +ADD: Hungarian (thx 2 gyeben) +ADD: Portuguese (thx 2 enen92) +ADD: Polish (thx 2 D.K.) +ADD: Russian (thx 2 BytEvil) +ADD: Spanish (thx 2 PatOso) +ADD: French (thx 2 roondar) +UPD: support for '1080XF' and 'Xperience1080' +FIX: some live streams should work +FIX: update meta data for video played via ext. url +FIX: remove video from 'Watch Later' playlist +REV: reverted to requests + +5.0.0 (2014-12-27) +DEL: removed beta +ADD: new rating system - like/dislike/remove +ADD: show confirmation before remove a video or deleting a playlist +ADD: rename your playlists +ADD: setup default view modes (default and videos) +ADD: setup correct language and region for YouTube +ADD: support for old YouTube url calls (plugin://plugin.video.youtube/?action=play_video&videoid=[ID]) +UPD: new icons +UPD: reorganized context menu +UPD: some minor tests +UPD: moved 'Watch Later' up in context menu +FIX: rename playlist +FIX: show newest videos first (uploads of channel) +FIX: show fanarts in 'Watch Later' and 'Liked Videos' + +1.0.0~alpha29 (2014-12-14) +UPD: new login mechanism (removed the old one) +ADD: translation fr-FR (thanks to roondar) +ADD: manage playlists - create, remove and add videos to a selected playlists +FIX: support cyrillic letters + +1.0.0~alpha28 (2014-12-07) +ADD: subscribe to channel (from videos and playlist) +UPD: rework of handling context menu +FIX: remove next page for related videos (because APIv3 is broken) + +1.0.0~alpha27 (2014-12-01) +UPD: performance improved for auto-removing videos from 'Watch Later' list +FIX: error while navigating to the next page + +1.0.0~alpha26 (2014-11-30) +ADD: hide all entries (except search) via settings in the root menu +ADD: missing pagination for 'My Subscriptions' +FIX: next page is working again (Watch Later) +UPD: disabled language (for now) Kodi isn't providing reliable language IDs + +1.0.0~alpha25 (2014-11-29) +UPD: requests with language/region +UPD: new icons +ADD: Auto-Remove from 'Watch Later' list +ADD: 'Related Videos' +UPD: show channel name in the description +FIX: disable verification warnings + +1.0.0~alpha24 (2014-11-27) +ADD: 'Browse Channels' +FIX: support for skins calling '.*/extrafanart/' + +1.0.0~alpha23 (2014-11-26) +ADD: 'What to watch' +FIX: 'My subscriptions' switched to version APIv2.1 (Google) DAMN YOU!!! + +1.0.0~alpha22 (2014-11-25) +ADD: sorting +FIX: crash when calling 'My subscriptions' +FIX: signature calculation + +1.0.0~alpha21 (2014-11-24) +CHG: method for playing a video changed to a more query like uri +FIX: crash under android systems. Regular Expressions work a little different :) + +1.0.0~alpha20 (2014-11-23) +FIX: Git merge with master + +1.0.0~alpha19 (2014-11-23) +UPD: complete rewrite +UPD: switch to kodion + +1.0.0~alpha18 (2014-08-31) +- ADD: Support for ETag - could improve performance +- ADD: remove item of search history +- FIX: #22 calculation of duration +- FIX: #28 display 'general' instead of 'like' in settings + +1.0.0~alpha17 (2014-08-10) +- ADD: 'Go to CHANNEL' of a selected video +- ADD: Support for 'Subscribe' and 'Unsubscribe' of channels +- ADD: Full support for 'Like' +- ADD: Remove own playlist via context menu +- ADD: Show/Hide 'Browse Channels' via settings +- FIX: Using only thumbnails from API v3 - 'My Subscriptions' is using v2 and returning different thumbnails +- FIX: Displaying false channel in video description +- FIX: Don't update search history before showing the search result + +1.0.0~alpha16 (2014-08-08) +- FIX: provide 'Next Page' under 'My Subscriptions' if there are more results +- ADD: Hide and show menu items via settings +- ADD: Search history (set the size via settings from 0-50 items) + +1.0.0~alpha15 (2014-08-04) +- FIX: moved (only) for the subscribtions to V2 to see new uploaded videos + +1.0.0~alpha14 (2014-08-03) +- ADD: 'Remove' via context menu for playlists +- ADD: 'Watch Later' via context menu to add a video to the 'Watch Later' playlist +- ADD: Automatic remove from the 'Watch Later' playlists (optional via settings - default = true) +- ADD: Support for history - after playback the video should be added to the history. Not working correct. +- ADD: Fanart for channels. Only if you select a channel directly. +- optimized some of the addon code + +1.0.0~alpha13 (2014-08-02) +- FIX: improved token and login validation + +1.0.0~alpha12 (2014-08-01) +- ADD: Show 'Published on' and 'Channel' in the description of a video (can be disabled via setting) +- ADD: support for 3D videos (can be disabled via setting) +- Accelerated resolving of video URLs (almost 2x as fast) + +1.0.0~alpha11 (2014-07-30) +- FIX: added a fallback for videos that require a login (works very fast?!?!) +- FIX: if username or password is missing reset the whole token logic + +1.0.0~alpha10 (2014-07-29) +- FIX: improved performance on decoding signatures for some videos +- ADD: support for custom-created playlists +- FIX: sort own subscriptions +- ADD: enable/disable video, channel and/or playlist search + +1.0.0~alpha9 (2014-07-28) +- FIX: removed debug + +1.0.0~alpha8 (2014-07-28) +- ADD: login tests + +1.0.0~alpha7 (2014-07-27) +- FIX: added support from freemake.com to decode signatures of some videos + +1.0.0~alpha6 (2014-07-27) +- added support of playlists of a channel (first page only) +- optimized some major routines for easier support of all youtube's content + +1.0.0~alpha5 (2014-07-27) +- version bump for tests + +1.0.0~alpha4 (2014-07-26) +- added runtime for each video (crazy hack) +- disabled debug + +1.0.0~alpha3 (2014-07-26) +- little fixes regarding youtube channels + +1.0.0~alpha2 (2014-07-26) +- added youtube channels and search +- added playback + +1.0.0~alpha (2014-07-26) +- initial version for tests diff --git a/plugin.video.youtube/fanart.jpg b/plugin.video.youtube/fanart.jpg deleted file mode 100644 index 2d05a9be52..0000000000 Binary files a/plugin.video.youtube/fanart.jpg and /dev/null differ diff --git a/plugin.video.youtube/resources/language/resource.language.af_za/strings.po b/plugin.video.youtube/resources/language/resource.language.af_za/strings.po index 21dc74fc06..934f465db4 100644 --- a/plugin.video.youtube/resources/language/resource.language.af_za/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.af_za/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.am_et/strings.po b/plugin.video.youtube/resources/language/resource.language.am_et/strings.po index 2071e5eedf..bed11ebe0f 100644 --- a/plugin.video.youtube/resources/language/resource.language.am_et/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.am_et/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.ar_sa/strings.po b/plugin.video.youtube/resources/language/resource.language.ar_sa/strings.po index 91e4b709fc..9ef08c9e2c 100644 --- a/plugin.video.youtube/resources/language/resource.language.ar_sa/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.ar_sa/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.ast_es/strings.po b/plugin.video.youtube/resources/language/resource.language.ast_es/strings.po index 242f04837d..4f19e75087 100644 --- a/plugin.video.youtube/resources/language/resource.language.ast_es/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.ast_es/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.az_az/strings.po b/plugin.video.youtube/resources/language/resource.language.az_az/strings.po index 9a1fec6f9a..09ea39261b 100644 --- a/plugin.video.youtube/resources/language/resource.language.az_az/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.az_az/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.be_by/strings.po b/plugin.video.youtube/resources/language/resource.language.be_by/strings.po index e94105c13a..98c0859cae 100644 --- a/plugin.video.youtube/resources/language/resource.language.be_by/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.be_by/strings.po @@ -62,7 +62,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -74,15 +74,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -97,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -989,7 +993,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1049,7 +1053,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1177,7 +1181,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1185,11 +1189,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1197,11 +1201,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1235,3 +1239,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.bg_bg/strings.po b/plugin.video.youtube/resources/language/resource.language.bg_bg/strings.po index 02df27a59b..05391323af 100644 --- a/plugin.video.youtube/resources/language/resource.language.bg_bg/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.bg_bg/strings.po @@ -60,8 +60,8 @@ msgid "Always ask for the video quality" msgstr "Запитване за качеството на видеото преди възпроизвеждане" msgctxt "#30010" -msgid "Video quality" -msgstr "Качество на видеото" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -72,16 +72,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -95,6 +95,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + msgctxt "#30020" msgid "Allow 3D" msgstr "Разреши 3D" @@ -986,7 +990,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1046,7 +1050,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1174,7 +1178,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1182,11 +1186,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1194,11 +1198,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1233,6 +1237,130 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Качество на видеото" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + #~ msgctxt "#30100" #~ msgid "Favorites" #~ msgstr "Любими" diff --git a/plugin.video.youtube/resources/language/resource.language.bs_ba/strings.po b/plugin.video.youtube/resources/language/resource.language.bs_ba/strings.po index 799172d7ed..c4053acaa3 100644 --- a/plugin.video.youtube/resources/language/resource.language.bs_ba/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.bs_ba/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.ca_es/strings.po b/plugin.video.youtube/resources/language/resource.language.ca_es/strings.po index 0e97028a78..f5a5af63e6 100644 --- a/plugin.video.youtube/resources/language/resource.language.ca_es/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.ca_es/strings.po @@ -7,14 +7,15 @@ msgstr "" "Project-Id-Version: XBMC-Addons\n" "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" "POT-Creation-Date: 2015-09-21 11:01+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2023-06-24 16:42+0000\n" +"Last-Translator: Christian Gade \n" +"Language-Team: Catalan (Spain) \n" "Language: ca_es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.18\n" msgctxt "Addon Summary" msgid "Plugin for YouTube" @@ -61,7 +62,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +74,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -185,7 +190,7 @@ msgstr "" msgctxt "#30102" msgid "Search" -msgstr "" +msgstr "Cerca" msgctxt "#30103" msgid "Library" @@ -289,7 +294,7 @@ msgstr "" # empty strings from id 30206 to 30499 msgctxt "#30500" msgid "Channels" -msgstr "" +msgstr "Canals" msgctxt "#30501" msgid "Playlists" @@ -597,7 +602,7 @@ msgstr "" msgctxt "#30577" msgid "Settings" -msgstr "" +msgstr "Paràmetres" msgctxt "#30578" msgid "Force SSL certificate verification" @@ -988,7 +993,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1053,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1181,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1189,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1201,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1239,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.cs_cz/strings.po b/plugin.video.youtube/resources/language/resource.language.cs_cz/strings.po index 26ad7f3abf..ca819c284f 100644 --- a/plugin.video.youtube/resources/language/resource.language.cs_cz/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.cs_cz/strings.po @@ -62,8 +62,8 @@ msgid "Always ask for the video quality" msgstr "Vždy se zeptat na kvalitu" msgctxt "#30010" -msgid "Video quality" -msgstr "Kvalita videa" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -74,16 +74,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -97,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p Živě / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -989,8 +993,8 @@ msgid "Reset resume point" msgstr "Obnovit bod" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Použít historii pořehrávání" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1049,8 +1053,8 @@ msgid "Use for live streams" msgstr "Použít pro stream Živě" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "InputStream Adaptive >= 2.0.12 je vyžadován pro stream Živě" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1177,32 +1181,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "Výchozí nastavení přizpůsobení WEBM (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "Proxy je vyžadován pro MPEG-DASH [CR]> 1080p a HDR vyžaduje InputStream Adaptive >= 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Omezení do 30 sn/sek" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Nahrát" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Adaptivní (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Adaptivní (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1236,6 +1240,158 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Kvalita videa" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Použít historii pořehrávání" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "InputStream Adaptive >= 2.0.12 je vyžadován pro stream Živě" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Omezení do 30 sn/sek" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Adaptivní (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Adaptivní (WEBM/VP9)" + # Kodion Common # empty strings from id 30039 to 30099 #~ msgctxt "#30100" diff --git a/plugin.video.youtube/resources/language/resource.language.cy_gb/strings.po b/plugin.video.youtube/resources/language/resource.language.cy_gb/strings.po index 026cf80311..809c2f92ec 100644 --- a/plugin.video.youtube/resources/language/resource.language.cy_gb/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.cy_gb/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.da_dk/strings.po b/plugin.video.youtube/resources/language/resource.language.da_dk/strings.po index aa7f70676f..2e45c218b5 100644 --- a/plugin.video.youtube/resources/language/resource.language.da_dk/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.da_dk/strings.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: XBMC-Addons\n" "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" "POT-Creation-Date: 2015-09-21 11:01+0000\n" -"PO-Revision-Date: 2022-12-09 20:12+0000\n" +"PO-Revision-Date: 2023-05-06 00:35+0000\n" "Last-Translator: Christian Gade \n" "Language-Team: Danish \n" "Language: da_dk\n" @@ -15,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.14.2\n" +"X-Generator: Weblate 4.15.2\n" msgctxt "Addon Summary" msgid "Plugin for YouTube" @@ -62,8 +62,8 @@ msgid "Always ask for the video quality" msgstr "Spørg altid efter videokvaliteten" msgctxt "#30010" -msgid "Video quality" -msgstr "Videokvalitet" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -74,16 +74,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4K)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8K)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -97,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p direkte / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -989,8 +993,8 @@ msgid "Reset resume point" msgstr "Nulstil genoptagelsesposition" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Brug afspilningshistorik (set, sporing af genoptagelse)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1049,8 +1053,8 @@ msgid "Use for live streams" msgstr "Anvendes til livestreams" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "InputStream Adaptive >= 2.0.12 kræves til livestreams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1177,32 +1181,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "Sæt standard til WEBM-tilpasningssæt (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "Proxy er påkrævet for mpeg-dash vods (se HTTP-server)[CR]> 1080p og HDR kræver InputStream Adaptive >= 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Begræns til 30 fps" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Uploads" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Adaptiv (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Adaptiv (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1236,6 +1240,158 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "Skjul korte videoer (1 minut eller derunder)" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "Brug alternative klientoplysninger" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "Alternativ #1" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "Alternativ #2" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Videokvalitet" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4K)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8K)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Brug afspilningshistorik (set, sporing af genoptagelse)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "InputStream Adaptive >= 2.0.12 kræves til livestreams" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Begræns til 30 fps" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Adaptiv (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Adaptiv (WEBM/VP9)" + #~ msgctxt "#30900" #~ msgid "Subscriptions groups" #~ msgstr "Abonnementsgrupper" diff --git a/plugin.video.youtube/resources/language/resource.language.de_de/strings.po b/plugin.video.youtube/resources/language/resource.language.de_de/strings.po index dddd56f8d5..5bb81f7b2e 100644 --- a/plugin.video.youtube/resources/language/resource.language.de_de/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.de_de/strings.po @@ -62,8 +62,8 @@ msgid "Always ask for the video quality" msgstr "Immer nach der Videoqualität fragen" msgctxt "#30010" -msgid "Video quality" -msgstr "Videoqualität" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -74,16 +74,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -97,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p Live / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -989,8 +993,8 @@ msgid "Reset resume point" msgstr "Wiedergabepunkt zurücksetzen" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Wiedergabeverlauf verwenden (gesehen, ab letzter Position wiedergeben)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1049,8 +1053,8 @@ msgid "Use for live streams" msgstr "Für Live-Streams verwenden" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "Für Live-Streams wird InputStream Adaptive >= 2.0.12 benötigt" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1177,32 +1181,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "Standardmäßig WEBM-Anpassungsset verwenden (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "Für MPEG-DASH-VODs wird ein Proxy benötigt (siehe HTTP-Server)[CR]> 1080p und HDR benötigt InputStream Adaptive >= 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Begrenzen auf 30fps" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Uploads" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Adaptiv (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Adaptiv (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1236,6 +1240,158 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "Kurze Video ausblenden (1 Minute oder kürzer)" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Videoqualität" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Wiedergabeverlauf verwenden (gesehen, ab letzter Position wiedergeben)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "Für Live-Streams wird InputStream Adaptive >= 2.0.12 benötigt" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Begrenzen auf 30fps" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Adaptiv (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Adaptiv (WEBM/VP9)" + #~ msgctxt "#30900" #~ msgid "Subscriptions groups" #~ msgstr "Abo-Gruppen" diff --git a/plugin.video.youtube/resources/language/resource.language.el_gr/strings.po b/plugin.video.youtube/resources/language/resource.language.el_gr/strings.po index 9500e454d7..69687e40fb 100644 --- a/plugin.video.youtube/resources/language/resource.language.el_gr/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.el_gr/strings.po @@ -62,8 +62,8 @@ msgid "Always ask for the video quality" msgstr "Πάντα ερώτηση για την ποιότητα του βίντεο" msgctxt "#30010" -msgid "Video quality" -msgstr "Ποιότητα βίντεο" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -74,16 +74,16 @@ msgid "720p (HD)" msgstr "720p (ΥΕ)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (ΥΕ)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -97,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p Ζωντανά / 720p (ΥΕ)" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -989,8 +993,8 @@ msgid "Reset resume point" msgstr "Επαναφορά σημείου συνέχισης" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Κάνε χρήση ιστορικού (προβληθέντα, συνέχιση παρακολούθησης)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1049,8 +1053,8 @@ msgid "Use for live streams" msgstr "Κάνε χρήση για ζωντανές ροές" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "Απαιτείται InputStream Adaptive >= 2.0.12 για τις ζωντανές ροές" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1177,32 +1181,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "Εξ ορισμού σε σετ προσαρμογής WEBM (4Κ)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "Απαιτείται μεσολαβητής για ροές κατ'απαίτηση mpeg-dash (βλ. Μεσολαβητής HTTP)[CR]Τα > 1080p και HDR απαιτούν το InputStream Adaptive >= 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Περιορισμός στα 30κ/δ" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (ΥΕ)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Απεσταλμένα" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Προσαρμοζόμενη (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Προσαρμοζόμενη (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1236,6 +1240,158 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Ποιότητα βίντεο" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (ΥΕ)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Κάνε χρήση ιστορικού (προβληθέντα, συνέχιση παρακολούθησης)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "Απαιτείται InputStream Adaptive >= 2.0.12 για τις ζωντανές ροές" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Περιορισμός στα 30κ/δ" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (ΥΕ)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Προσαρμοζόμενη (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Προσαρμοζόμενη (WEBM/VP9)" + # Kodion Common # empty strings from id 30037 to 30099 #~ msgctxt "#30100" diff --git a/plugin.video.youtube/resources/language/resource.language.en_au/strings.po b/plugin.video.youtube/resources/language/resource.language.en_au/strings.po index 637ec19148..fe488c862a 100644 --- a/plugin.video.youtube/resources/language/resource.language.en_au/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.en_au/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,7 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" -# empty strings 30019 +msgctxt "#30019" +msgid "144p" +msgstr "" + msgctxt "#30020" msgid "Allow 3D" msgstr "" @@ -988,7 +991,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1051,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1179,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1187,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1199,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1237,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.en_gb/strings.po b/plugin.video.youtube/resources/language/resource.language.en_gb/strings.po index 4214e50687..6856bd1094 100644 --- a/plugin.video.youtube/resources/language/resource.language.en_gb/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.en_gb/strings.po @@ -65,7 +65,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -77,15 +77,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -100,7 +100,9 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" -# empty strings 30019 +msgctxt "#30019" +msgid "144p" +msgstr "" msgctxt "#30020" msgid "Allow 3D" @@ -996,7 +998,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1056,7 +1058,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1184,7 +1186,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1192,11 +1194,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1204,11 +1206,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1242,3 +1244,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.en_nz/strings.po b/plugin.video.youtube/resources/language/resource.language.en_nz/strings.po index 0ab589df6a..a29883cd8c 100644 --- a/plugin.video.youtube/resources/language/resource.language.en_nz/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.en_nz/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,7 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" -# empty strings 30019 +msgctxt "#30019" +msgid "144p" +msgstr "" + msgctxt "#30020" msgid "Allow 3D" msgstr "" @@ -988,7 +991,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1051,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1179,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1187,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1199,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1237,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.en_us/strings.po b/plugin.video.youtube/resources/language/resource.language.en_us/strings.po index 43053c5073..3ad4c774e0 100644 --- a/plugin.video.youtube/resources/language/resource.language.en_us/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.en_us/strings.po @@ -62,7 +62,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -74,15 +74,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -97,7 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" -# empty strings 30019 +msgctxt "#30019" +msgid "144p" +msgstr "" + msgctxt "#30020" msgid "Allow 3D" msgstr "" @@ -989,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1049,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1177,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1185,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1197,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1235,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.eo/strings.po b/plugin.video.youtube/resources/language/resource.language.eo/strings.po index d9660b9012..c31ae9a47a 100644 --- a/plugin.video.youtube/resources/language/resource.language.eo/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.eo/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.es_ar/strings.po b/plugin.video.youtube/resources/language/resource.language.es_ar/strings.po index 2509bbe94b..27d3e23abc 100644 --- a/plugin.video.youtube/resources/language/resource.language.es_ar/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.es_ar/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.es_es/strings.po b/plugin.video.youtube/resources/language/resource.language.es_es/strings.po index 39f952e157..f646160d8e 100644 --- a/plugin.video.youtube/resources/language/resource.language.es_es/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.es_es/strings.po @@ -5,9 +5,9 @@ msgid "" msgstr "" "Project-Id-Version: XBMC-Addons\n" -"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" "POT-Creation-Date: 2015-09-21 11:01+0000\n" -"PO-Revision-Date: 2023-02-17 18:08+0000\n" +"PO-Revision-Date: 2023-06-24 16:42+0000\n" "Last-Translator: José Antonio Alvarado \n" "Language-Team: Spanish (Spain) \n" "Language: es_es\n" @@ -15,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.15.2\n" +"X-Generator: Weblate 4.18\n" msgctxt "Addon Summary" msgid "Plugin for YouTube" @@ -62,8 +62,8 @@ msgid "Always ask for the video quality" msgstr "Preguntar siempre por calidad de vídeo" msgctxt "#30010" -msgid "Video quality" -msgstr "Calidad de vídeo" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -74,16 +74,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -97,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p En Directo / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -598,7 +602,7 @@ msgstr "¡Vaya! Algo ha fallado" msgctxt "#30577" msgid "Settings" -msgstr "Configuración" +msgstr "Ajustes" msgctxt "#30578" msgid "Force SSL certificate verification" @@ -718,7 +722,7 @@ msgstr "Búsqueda Rápida (Incógnito)" msgctxt "#30607" msgid "Audio only" -msgstr "Reproducir solo audio" +msgstr "Sólo audio" msgctxt "#30608" msgid "Allow developer keys" @@ -989,8 +993,8 @@ msgid "Reset resume point" msgstr "Restablecer punto de reanudación" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Usar historial de reproducción (visto, seguimiento de reanudación)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1049,8 +1053,8 @@ msgid "Use for live streams" msgstr "Usar para streams en directo" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "Para emisiones en directo es necesario InputStream Adaptive 2.0.12 o superior" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1122,7 +1126,7 @@ msgstr "Sin título" msgctxt "#30708" msgid "Play audio only" -msgstr "Reproducir solo audio" +msgstr "Reproducir sólo audio" msgctxt "#30709" msgid "Failed to retrieve Watch Later playlist id. To increase the chances of retrieval add 8-10 videos to Watch Later via the web/app and retry." @@ -1177,32 +1181,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "Establecer por defecto WEBM adaptativo (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "Para VODs mpeg-dash (ver Servidor HTTP)[CR]> 1080p y HDR requieren InputStream Adaptive 2.3.14 o superior" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Limitar a 30fps" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Subidas" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Adaptativo (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Adaptativo (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1236,6 +1240,158 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "Ocultar vídeos cortos (1 minuto o menos)" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "Utilizar datos alternativos del cliente" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "Alternativa #1" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "Alternativa #2" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Calidad de vídeo" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Usar historial de reproducción (visto, seguimiento de reanudación)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "Para emisiones en directo es necesario InputStream Adaptive 2.0.12 o superior" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Limitar a 30fps" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Adaptativo (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Adaptativo (WEBM/VP9)" + #~ msgctxt "#30900" #~ msgid "Subscriptions groups" #~ msgstr "Grupos de suscripciones" diff --git a/plugin.video.youtube/resources/language/resource.language.es_mx/strings.po b/plugin.video.youtube/resources/language/resource.language.es_mx/strings.po index ecd0601c33..fdecaa638d 100644 --- a/plugin.video.youtube/resources/language/resource.language.es_mx/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.es_mx/strings.po @@ -62,8 +62,8 @@ msgid "Always ask for the video quality" msgstr "Preguntar siempre la calidad de video" msgctxt "#30010" -msgid "Video quality" -msgstr "Calidad de video" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -74,16 +74,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -97,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p En Vivo / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -989,8 +993,8 @@ msgid "Reset resume point" msgstr "Restablecer punto de reanudación de reproducción" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Usar historial de reproducción (visto, seguimiento de reanudación)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1049,8 +1053,8 @@ msgid "Use for live streams" msgstr "Usar para transmisiones en vivo" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "Para emisiones en vivo es necesario InputStream Adaptive 2.0.12 o superior" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1177,32 +1181,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "Predeterminar al conjunton de adaptación WebM (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "Se requiere un proxy para mpeg-dash VODs (ver HTTP server)[CR]> 1080p y HDR requieren InpuStreamAdaptative >= 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Limitar a 30fps" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Subidas" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Adaptive (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1236,6 +1240,158 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Calidad de video" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Usar historial de reproducción (visto, seguimiento de reanudación)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "Para emisiones en vivo es necesario InputStream Adaptive 2.0.12 o superior" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Limitar a 30fps" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Adaptive (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Adaptive (WEBM/VP9)" + # Kodion Common # empty strings from id 30039 to 30099 #~ msgctxt "#30100" diff --git a/plugin.video.youtube/resources/language/resource.language.et_ee/strings.po b/plugin.video.youtube/resources/language/resource.language.et_ee/strings.po index a255ed88a7..39a439c6b3 100644 --- a/plugin.video.youtube/resources/language/resource.language.et_ee/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.et_ee/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.eu_es/strings.po b/plugin.video.youtube/resources/language/resource.language.eu_es/strings.po index 4f3dfb57e2..4a36884f8b 100644 --- a/plugin.video.youtube/resources/language/resource.language.eu_es/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.eu_es/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.fa_af/strings.po b/plugin.video.youtube/resources/language/resource.language.fa_af/strings.po index e9c51de6ff..0f06ef16f2 100644 --- a/plugin.video.youtube/resources/language/resource.language.fa_af/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.fa_af/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.fa_ir/strings.po b/plugin.video.youtube/resources/language/resource.language.fa_ir/strings.po index e33540cf22..3c2ae297b9 100644 --- a/plugin.video.youtube/resources/language/resource.language.fa_ir/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.fa_ir/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.fi_fi/strings.po b/plugin.video.youtube/resources/language/resource.language.fi_fi/strings.po index 5236bd05b1..88d85f46c3 100644 --- a/plugin.video.youtube/resources/language/resource.language.fi_fi/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.fi_fi/strings.po @@ -60,8 +60,8 @@ msgid "Always ask for the video quality" msgstr "Kysy aina videon laatu" msgctxt "#30010" -msgid "Video quality" -msgstr "Videon laatu" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -72,16 +72,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4K)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8K)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -95,6 +95,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p suora/720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + msgctxt "#30020" msgid "Allow 3D" msgstr "Salli 3D" @@ -984,8 +988,8 @@ msgid "Reset resume point" msgstr "Unohda katselutilanne" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Käytä toistohistoriaa (katsotut, toiston jatko)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1044,8 +1048,8 @@ msgid "Use for live streams" msgstr "Käytä livelähetyksille" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "Livelähetykset edellyttävät vähintään InputStream Adaptive -versiota 2.0.12." +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1172,32 +1176,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "Käytä oletusarvoisesti WEBM-mukautuvuussarjaa (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "MPEG-DASH VOD -videot edellyttävät välityspalvelimen käyttöä (katso HTTP-palvelin).[CR]1080p ja sitä suuremmat tarkkudet sekä HDR tarvitsevat vähintään InputStream Adaptive -versiota 2.3.14." msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Rajoita 30 kuvaan sekunnissa (fps)" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Lähetykset" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Mukautuva (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Mukautuva (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1231,6 +1235,158 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "Piilota lyhyet videot (1 minuuttia tai alle)" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Videon laatu" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4K)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8K)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Käytä toistohistoriaa (katsotut, toiston jatko)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "Livelähetykset edellyttävät vähintään InputStream Adaptive -versiota 2.0.12." + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Rajoita 30 kuvaan sekunnissa (fps)" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Mukautuva (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Mukautuva (WEBM/VP9)" + #~ msgctxt "#30900" #~ msgid "Subscriptions groups" #~ msgstr "Tilausryhmät" diff --git a/plugin.video.youtube/resources/language/resource.language.fo_fo/strings.po b/plugin.video.youtube/resources/language/resource.language.fo_fo/strings.po index f9138bd023..33b5a603d3 100644 --- a/plugin.video.youtube/resources/language/resource.language.fo_fo/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.fo_fo/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.fr_ca/strings.po b/plugin.video.youtube/resources/language/resource.language.fr_ca/strings.po index e196408159..c41cee6faa 100644 --- a/plugin.video.youtube/resources/language/resource.language.fr_ca/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.fr_ca/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.fr_fr/strings.po b/plugin.video.youtube/resources/language/resource.language.fr_fr/strings.po index b402775ffd..982e0138b1 100644 --- a/plugin.video.youtube/resources/language/resource.language.fr_fr/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.fr_fr/strings.po @@ -5,17 +5,17 @@ msgid "" msgstr "" "Project-Id-Version: XBMC-Addons\n" -"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" "POT-Creation-Date: 2015-09-21 11:01+0000\n" -"PO-Revision-Date: 2022-12-27 12:15+0000\n" -"Last-Translator: skypichat \n" +"PO-Revision-Date: 2023-08-24 22:11+0000\n" +"Last-Translator: SlashAndRoses \n" "Language-Team: French (France) \n" "Language: fr_fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.15\n" +"X-Generator: Weblate 4.18.2\n" msgctxt "Addon Summary" msgid "Plugin for YouTube" @@ -60,8 +60,8 @@ msgid "Always ask for the video quality" msgstr "Toujours demander la qualité de la vidéo" msgctxt "#30010" -msgid "Video quality" -msgstr "Qualité vidéo" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -72,16 +72,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4K)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8K)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -95,6 +95,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p Live / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + msgctxt "#30020" msgid "Allow 3D" msgstr "Autoriser la 3D" @@ -984,8 +988,8 @@ msgid "Reset resume point" msgstr "Réinitialiser le point de reprise de lecture" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Utiliser l'historique de lecture (vu, reprise de lecture)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1044,8 +1048,8 @@ msgid "Use for live streams" msgstr "Utiliser pour le live" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "InputStream Adaptive >= 2.0.12 est requis pour le live" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1172,32 +1176,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "Défaut mis à WEBM adaptation (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "Un proxy est requis pour les vods mpeg-dash (voir serveur HTTP)[CR]> 1080p et HDR nécessitent InputStream Adaptive >= 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Limiter à 30fps" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Téléversements" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Adaptatif (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Adaptatif (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1231,6 +1235,158 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "Cacher les vidéos courtes (1 minute ou moins)" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "Utiliser les détails du client alternatif" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "Alternative #1" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "Alternative #2" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Qualité vidéo" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4K)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8K)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Utiliser l'historique de lecture (vu, reprise de lecture)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "InputStream Adaptive >= 2.0.12 est requis pour le live" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Limiter à 30fps" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Adaptatif (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Adaptatif (WEBM/VP9)" + #~ msgctxt "#30100" #~ msgid "Favorites" #~ msgstr "Favoris" diff --git a/plugin.video.youtube/resources/language/resource.language.gl_es/strings.po b/plugin.video.youtube/resources/language/resource.language.gl_es/strings.po index 8ab10094c4..37d113aee0 100644 --- a/plugin.video.youtube/resources/language/resource.language.gl_es/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.gl_es/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.he_il/strings.po b/plugin.video.youtube/resources/language/resource.language.he_il/strings.po index efc596cc38..cf7fb2d857 100644 --- a/plugin.video.youtube/resources/language/resource.language.he_il/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.he_il/strings.po @@ -62,8 +62,8 @@ msgid "Always ask for the video quality" msgstr "תמיד בקש את איכות הווידאו" msgctxt "#30010" -msgid "Video quality" -msgstr "איכות וידאו" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -74,16 +74,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -97,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p חי / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -989,7 +993,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1049,7 +1053,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1177,7 +1181,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1185,11 +1189,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1197,11 +1201,11 @@ msgid "Uploads" msgstr "העלאות" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1235,3 +1239,127 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "איכות וידאו" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" diff --git a/plugin.video.youtube/resources/language/resource.language.hi_in/strings.po b/plugin.video.youtube/resources/language/resource.language.hi_in/strings.po index 123f0a1597..5ac65123fc 100644 --- a/plugin.video.youtube/resources/language/resource.language.hi_in/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.hi_in/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.hr_hr/strings.po b/plugin.video.youtube/resources/language/resource.language.hr_hr/strings.po index c57fe8e39f..7d5d613969 100644 --- a/plugin.video.youtube/resources/language/resource.language.hr_hr/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.hr_hr/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: XBMC-Addons\n" -"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" "POT-Creation-Date: 2015-09-21 11:01+0000\n" "PO-Revision-Date: 2023-01-04 21:15+0000\n" "Last-Translator: gogogogi \n" @@ -62,8 +62,8 @@ msgid "Always ask for the video quality" msgstr "Uvijek upitaj za video kvalitetu" msgctxt "#30010" -msgid "Video quality" -msgstr "Video kvaliteta" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -74,16 +74,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -97,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p Uživo / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -989,8 +993,8 @@ msgid "Reset resume point" msgstr "Poništi vrijeme nastavka gledanja" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Koristi povijest reprodukcije (pogledano, nastavi praćenje)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1049,8 +1053,8 @@ msgid "Use for live streams" msgstr "Koristi za emitiranja uživo" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "InputStream Adaptive >= 2.0.12 je potreban za emitiranje uživo" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1177,32 +1181,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "Zadano za paket WEBM prilagodbe (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "Proxy je potreban za mpeg-dash video na zahtjev (vod) (pogledajte HTTP poslužitelj)[CR]> 1080p i HDR zahtijevaju InputStream Adaptive >= 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Ograniči na 30 sl/sek" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Slanja" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Prilagodljiva (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Prilagodljiva (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1235,3 +1239,155 @@ msgstr "Uređeno" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "Sakrij kratke video snimke (1 minuta ii manje)" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Video kvaliteta" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Koristi povijest reprodukcije (pogledano, nastavi praćenje)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "InputStream Adaptive >= 2.0.12 je potreban za emitiranje uživo" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Ograniči na 30 sl/sek" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Prilagodljiva (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Prilagodljiva (WEBM/VP9)" diff --git a/plugin.video.youtube/resources/language/resource.language.hu_hu/strings.po b/plugin.video.youtube/resources/language/resource.language.hu_hu/strings.po index f566b65e74..3b23d81e39 100644 --- a/plugin.video.youtube/resources/language/resource.language.hu_hu/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.hu_hu/strings.po @@ -61,8 +61,8 @@ msgid "Always ask for the video quality" msgstr "Mindig kérdezze meg a videó minőségét" msgctxt "#30010" -msgid "Video quality" -msgstr "Videó minőség" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -73,16 +73,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p Élő / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + msgctxt "#30020" msgid "Allow 3D" msgstr "3D engedélyezés" @@ -987,8 +991,8 @@ msgid "Reset resume point" msgstr "Folytatási pont visszaállítása" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Használja a lejátszási előzményeket (megnézte, folytatja a követést)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1047,8 +1051,8 @@ msgid "Use for live streams" msgstr "Használja élő közvetítésekhez" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "InputStream Adaptive >= 2.0.12 szükséges az élő közvetítésekhez" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1175,32 +1179,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "Alapértelmezés a WEBM adaptációs készlethez (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "A Proxyra van szükség az mpeg-dash vod esetén (lásd a HTTP szervert) [CR]> 1080p, és a HDR-hez pedig az InputStream Adaptive kiegészítő szükséges >= 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Legfeljebb 30fps" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Feltöltések" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Adaptív (Változó MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Adaptív (Változó WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1234,6 +1238,158 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Videó minőség" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Használja a lejátszási előzményeket (megnézte, folytatja a követést)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "InputStream Adaptive >= 2.0.12 szükséges az élő közvetítésekhez" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Legfeljebb 30fps" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Adaptív (Változó MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Adaptív (Változó WEBM/VP9)" + #~ msgctxt "#30100" #~ msgid "Favorites" #~ msgstr "Kedvencek" diff --git a/plugin.video.youtube/resources/language/resource.language.hy_am/strings.po b/plugin.video.youtube/resources/language/resource.language.hy_am/strings.po index b6cfb3892c..5ce4452c43 100644 --- a/plugin.video.youtube/resources/language/resource.language.hy_am/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.hy_am/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.id_id/strings.po b/plugin.video.youtube/resources/language/resource.language.id_id/strings.po index 162d1287b2..15b13057d8 100644 --- a/plugin.video.youtube/resources/language/resource.language.id_id/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.id_id/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: XBMC-Addons\n" -"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" "POT-Creation-Date: 2015-09-21 11:01+0000\n" "PO-Revision-Date: 2022-12-27 12:15+0000\n" "Last-Translator: Nao3Line Prez \n" @@ -62,8 +62,8 @@ msgid "Always ask for the video quality" msgstr "Selalu tanyakan kualitas video" msgctxt "#30010" -msgid "Video quality" -msgstr "Kualitas video" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -74,16 +74,16 @@ msgid "720p (HD)" msgstr "720p HD" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p FHD (2K)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p UHD (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p UHDTV (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -97,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "Siaran Live 1080p / Video 720p" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -989,8 +993,8 @@ msgid "Reset resume point" msgstr "Setel ulang titik resume" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Gunakan riwayat pemutaran (ditonton, lanjutkan pelacakan)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1049,8 +1053,8 @@ msgid "Use for live streams" msgstr "Gunakan untuk streaming langsung" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "InputStream Adaptive >= 2.0.12 diperlukan untuk streaming langsung" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1177,32 +1181,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "Default ke set adaptasi WEBM (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "Proksi diperlukan untuk mpeg-dash vods (lihat HTTP Server)[CR]> 1080p dan HDR memerlukan InputStream Adaptive >= 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Batasi 30fps" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p FHD+ (2K)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Unggahan" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Adaptif (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Adaptif (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1235,3 +1239,155 @@ msgstr "Disunting" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "Sembunyikan video pendek (1 menit atau kurang)" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Kualitas video" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p FHD (2K)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p UHD (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p UHDTV (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Gunakan riwayat pemutaran (ditonton, lanjutkan pelacakan)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "InputStream Adaptive >= 2.0.12 diperlukan untuk streaming langsung" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Batasi 30fps" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p FHD+ (2K)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Adaptif (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Adaptif (WEBM/VP9)" diff --git a/plugin.video.youtube/resources/language/resource.language.is_is/strings.po b/plugin.video.youtube/resources/language/resource.language.is_is/strings.po index 0d23494e12..34f59a53b3 100644 --- a/plugin.video.youtube/resources/language/resource.language.is_is/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.is_is/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.it_it/strings.po b/plugin.video.youtube/resources/language/resource.language.it_it/strings.po index 46d58671d7..18ee488f33 100644 --- a/plugin.video.youtube/resources/language/resource.language.it_it/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.it_it/strings.po @@ -6,9 +6,9 @@ msgid "" msgstr "" "Project-Id-Version: XBMC-Addons\n" -"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" "POT-Creation-Date: 2015-09-21 11:01+0000\n" -"PO-Revision-Date: 2023-01-20 10:15+0000\n" +"PO-Revision-Date: 2023-05-06 00:47+0000\n" "Last-Translator: Massimo Pissarello \n" "Language-Team: Italian \n" "Language: it_it\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.15.1\n" +"X-Generator: Weblate 4.15.2\n" msgctxt "Addon Summary" msgid "Plugin for YouTube" @@ -64,8 +64,8 @@ msgid "Always ask for the video quality" msgstr "Chiedi sempre la qualità del video" msgctxt "#30010" -msgid "Video quality" -msgstr "Qualità video" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -76,16 +76,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -99,6 +99,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p Live/720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -448,7 +452,7 @@ msgstr "Video non piaciuti" msgctxt "#30539" msgid "Live" -msgstr "Live" +msgstr "Dal vivo" msgctxt "#30540" msgid "Play with..." @@ -512,7 +516,7 @@ msgstr "Elimina database cronologia ricerche" msgctxt "#30555" msgid "Clear function cache" -msgstr "Pulisci cache funzioni" +msgstr "Svuota cache delle funzioni" msgctxt "#30556" msgid "Clear search history" @@ -696,7 +700,7 @@ msgstr "Configura sottotitoli" msgctxt "#30601" msgid "%s with %s fallback" -msgstr "%s con %s fallback" +msgstr "%s con %s di riserva" msgctxt "#30602" msgid "No auto-generated" @@ -888,11 +892,11 @@ msgstr "La chiave API non è corretta. Impostazioni - API - Chiave API" msgctxt "#30649" msgid "Client Id is incorrect. Settings - API - API Id" -msgstr "L'ID cliente non è corretto. Impostazioni - API - ID API" +msgstr "L'ID client non è corretto. Impostazioni - API - ID API" msgctxt "#30650" msgid "Client Secret is incorrect. Settings - API - API Secret" -msgstr "La password cliente non è corretta. Impostazioni - API - Password API" +msgstr "La password client non è corretta. Impostazioni - API - Password API" msgctxt "#30651" msgid "Location" @@ -991,8 +995,8 @@ msgid "Reset resume point" msgstr "Reimposta punto di ripresa" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Usa cronologia di riproduzione (guardato, riprendi)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1051,8 +1055,8 @@ msgid "Use for live streams" msgstr "Usa per i live stream" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "InputStream adattivo >= 2.0.12 è richiesto per i live streaming" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1179,32 +1183,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "Impostazione predefinita per WEBM (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "Il proxy è richiesto per mpeg-dash vods (vedi HTTP Server)[CR]> 1080p e HDR richiede InputStream adattivo>= 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Limita a 30 fps" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Caricamenti" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Adattivo (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Adattivo (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1238,6 +1242,158 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "Nascondi video brevi (1 minuto o meno)" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "Usa dettagli alternativi del cliente" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "Alternativo #1" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "Alternativo #2" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Qualità video" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Usa cronologia di riproduzione (guardato, riprendi)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "InputStream adattivo >= 2.0.12 è richiesto per i live streaming" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Limita a 30 fps" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Adattivo (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Adattivo (WEBM/VP9)" + #~ msgctxt "#30900" #~ msgid "Subscriptions groups" #~ msgstr "Gruppi di abbonamenti" diff --git a/plugin.video.youtube/resources/language/resource.language.ja_jp/strings.po b/plugin.video.youtube/resources/language/resource.language.ja_jp/strings.po index 401f2ceda8..e7da305f4e 100644 --- a/plugin.video.youtube/resources/language/resource.language.ja_jp/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.ja_jp/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.kn_in/strings.po b/plugin.video.youtube/resources/language/resource.language.kn_in/strings.po index 27a7197a74..a2d08d5afb 100644 --- a/plugin.video.youtube/resources/language/resource.language.kn_in/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.kn_in/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.ko_kr/strings.po b/plugin.video.youtube/resources/language/resource.language.ko_kr/strings.po index 7269be37c0..9d6de68b7f 100644 --- a/plugin.video.youtube/resources/language/resource.language.ko_kr/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.ko_kr/strings.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: XBMC-Addons\n" "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" "POT-Creation-Date: 2015-09-21 11:01+0000\n" -"PO-Revision-Date: 2022-11-20 05:15+0000\n" +"PO-Revision-Date: 2023-05-06 00:35+0000\n" "Last-Translator: Minho Park \n" "Language-Team: Korean \n" "Language: ko_kr\n" @@ -15,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.14.2\n" +"X-Generator: Weblate 4.15.2\n" msgctxt "Addon Summary" msgid "Plugin for YouTube" @@ -61,8 +61,8 @@ msgid "Always ask for the video quality" msgstr "동영상 품질 항상 확인" msgctxt "#30010" -msgid "Video quality" -msgstr "동영상 품질" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -73,16 +73,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p 라이브 / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + msgctxt "#30020" msgid "Allow 3D" msgstr "3D 허용" @@ -987,8 +991,8 @@ msgid "Reset resume point" msgstr "이어 볼 지점 다시 설정" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "재생 이력 사용 (재생 함, 이어볼 지점)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1047,8 +1051,8 @@ msgid "Use for live streams" msgstr "실시간에 사용" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "InputStream Adaptive >= 실시간에는 2.0.12 필요함" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1175,32 +1179,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "기본으로 WEBM 적응 설정 (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "mpeg-dash vods (HTTP 서버 참고)[CR]> 1080p에 프록시가 필요하고 HDR에 InputStream Adaptive >= 2.3.14 필요함" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "30fps 제한" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "업로드한 동영상" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "적응형 (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "적용형 (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1234,6 +1238,158 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "짧은 동영상 숨기기(1분 이하)" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "대체 클라이언트 세부 정보 사용" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "대체 #1" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "대체 #2" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "동영상 품질" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "재생 이력 사용 (재생 함, 이어볼 지점)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "InputStream Adaptive >= 실시간에는 2.0.12 필요함" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "30fps 제한" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "적응형 (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "적용형 (WEBM/VP9)" + #~ msgctxt "#30100" #~ msgid "Favorites" #~ msgstr "즐겨찾기" diff --git a/plugin.video.youtube/resources/language/resource.language.lt_lt/strings.po b/plugin.video.youtube/resources/language/resource.language.lt_lt/strings.po index 2b553ac300..133d8c827e 100644 --- a/plugin.video.youtube/resources/language/resource.language.lt_lt/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.lt_lt/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.lv_lv/strings.po b/plugin.video.youtube/resources/language/resource.language.lv_lv/strings.po index 4ce739b6b0..2a7a36e998 100644 --- a/plugin.video.youtube/resources/language/resource.language.lv_lv/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.lv_lv/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.mi/strings.po b/plugin.video.youtube/resources/language/resource.language.mi/strings.po index 6a3ea02ed5..f105c9f3aa 100644 --- a/plugin.video.youtube/resources/language/resource.language.mi/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.mi/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.mk_mk/strings.po b/plugin.video.youtube/resources/language/resource.language.mk_mk/strings.po index 43c050a670..8190a19107 100644 --- a/plugin.video.youtube/resources/language/resource.language.mk_mk/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.mk_mk/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.ml_in/strings.po b/plugin.video.youtube/resources/language/resource.language.ml_in/strings.po index 0b3758c9b9..7509c941d1 100644 --- a/plugin.video.youtube/resources/language/resource.language.ml_in/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.ml_in/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.mn_mn/strings.po b/plugin.video.youtube/resources/language/resource.language.mn_mn/strings.po index 29c82fb87d..08aeca96b7 100644 --- a/plugin.video.youtube/resources/language/resource.language.mn_mn/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.mn_mn/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.ms_my/strings.po b/plugin.video.youtube/resources/language/resource.language.ms_my/strings.po index be8bfd0c3e..2bbd02b470 100644 --- a/plugin.video.youtube/resources/language/resource.language.ms_my/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.ms_my/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.mt_mt/strings.po b/plugin.video.youtube/resources/language/resource.language.mt_mt/strings.po index d29ab6df7f..0780ad1a38 100644 --- a/plugin.video.youtube/resources/language/resource.language.mt_mt/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.mt_mt/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.my_mm/strings.po b/plugin.video.youtube/resources/language/resource.language.my_mm/strings.po index 224bdb6067..e1465d5257 100644 --- a/plugin.video.youtube/resources/language/resource.language.my_mm/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.my_mm/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.nb_no/strings.po b/plugin.video.youtube/resources/language/resource.language.nb_no/strings.po index 9748ba9072..c405f11146 100644 --- a/plugin.video.youtube/resources/language/resource.language.nb_no/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.nb_no/strings.po @@ -62,8 +62,8 @@ msgid "Always ask for the video quality" msgstr "Alltid spør om videokvalitet" msgctxt "#30010" -msgid "Video quality" -msgstr "Videokvalitet" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -74,16 +74,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -97,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -989,7 +993,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1049,7 +1053,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1177,7 +1181,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1185,11 +1189,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1197,11 +1201,11 @@ msgid "Uploads" msgstr "Opplastninger" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1236,6 +1240,130 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Videokvalitet" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + # Kodion Common # empty strings from id 30038 to 30099 #~ msgctxt "#30100" diff --git a/plugin.video.youtube/resources/language/resource.language.nl_nl/strings.po b/plugin.video.youtube/resources/language/resource.language.nl_nl/strings.po index 6357c96061..9fdb6ec25e 100644 --- a/plugin.video.youtube/resources/language/resource.language.nl_nl/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.nl_nl/strings.po @@ -63,8 +63,8 @@ msgid "Always ask for the video quality" msgstr "Vraag altijd naar video kwaliteit" msgctxt "#30010" -msgid "Video quality" -msgstr "Video Kwaliteit" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -75,16 +75,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -98,6 +98,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p Live / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -990,8 +994,8 @@ msgid "Reset resume point" msgstr "Afspeelpunt resetten" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Gebruik afspeelgeschiedenis (Bekeken, Hervatten)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1050,8 +1054,8 @@ msgid "Use for live streams" msgstr "Gebruik voor livestreams" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "InputStream Adaptive >=2.0.12 vereist voor livestreams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1178,32 +1182,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "Standaard naar WEBM (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "Proxy vereist voor mpeg-dasg vods (zie HTTP server)[CR]> 1080p en HDR vereisen InputStream Adaptive vanaf versie 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Limiteer tot 30fps" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Uploads" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Adaptief (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Adaptief (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1237,6 +1241,158 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Video Kwaliteit" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Gebruik afspeelgeschiedenis (Bekeken, Hervatten)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "InputStream Adaptive >=2.0.12 vereist voor livestreams" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Limiteer tot 30fps" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Adaptief (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Adaptief (WEBM/VP9)" + # Kodion Common # empty strings from id 30037 to 30099 #~ msgctxt "#30100" diff --git a/plugin.video.youtube/resources/language/resource.language.os_os/strings.po b/plugin.video.youtube/resources/language/resource.language.os_os/strings.po index c408e1ff6e..dad2246911 100644 --- a/plugin.video.youtube/resources/language/resource.language.os_os/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.os_os/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.pl_pl/strings.po b/plugin.video.youtube/resources/language/resource.language.pl_pl/strings.po index db3917799f..575a097b09 100644 --- a/plugin.video.youtube/resources/language/resource.language.pl_pl/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.pl_pl/strings.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: XBMC-Addons\n" "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" "POT-Creation-Date: 2015-09-21 11:01+0000\n" -"PO-Revision-Date: 2022-12-09 20:12+0000\n" +"PO-Revision-Date: 2023-05-04 09:10+0000\n" "Last-Translator: Marek Adamski \n" "Language-Team: Polish \n" "Language: pl_pl\n" @@ -15,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.14.2\n" +"X-Generator: Weblate 4.15.2\n" msgctxt "Addon Summary" msgid "Plugin for YouTube" @@ -61,8 +61,8 @@ msgid "Always ask for the video quality" msgstr "Pytaj o jakość strumienia wideo" msgctxt "#30010" -msgid "Video quality" -msgstr "Jakość wideo" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -73,16 +73,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p na żywo / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + msgctxt "#30020" msgid "Allow 3D" msgstr "Dopuszczaj materiały 3D" @@ -987,8 +991,8 @@ msgid "Reset resume point" msgstr "Resetuj punkt wznowienia" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Używaj historii odtwarzania (obejrzane, wznawianie odtwarzania)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1044,11 +1048,11 @@ msgstr "Używaj dla wideo" msgctxt "#30689" msgid "Use for live streams" -msgstr "Uzywaj dla transmisji na żywo" +msgstr "Używaj dla transmisji na żywo" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "InputStream Adaptive >= 2.0.12 jest wymagany dla transmisji na żywo" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1175,32 +1179,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "Domyślnie do zestawu adaptacyjnego WEBM (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "Serwer proxy jest wymagany do vod-ów mpeg-dash (patrz serwer HTTP)[CR]> 1080p, a HDR wymaga InputStream Adaptive >= 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Ograniczaj do 30 fps" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Przesłane" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Adaptacyjna (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Adaptacyjna (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1234,6 +1238,158 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "Ukryj krótkie filmy (1 minuta lub mniej)" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "Użyj danych klienta alternatywnego" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "Alternatywa nr 1" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "Alternatywa nr 2" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Jakość wideo" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Używaj historii odtwarzania (obejrzane, wznawianie odtwarzania)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "InputStream Adaptive >= 2.0.12 jest wymagany dla transmisji na żywo" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Ograniczaj do 30 fps" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Adaptacyjna (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Adaptacyjna (WEBM/VP9)" + #~ msgctxt "#30900" #~ msgid "Subscriptions groups" #~ msgstr "Grupy subskrypcji" diff --git a/plugin.video.youtube/resources/language/resource.language.pt_br/strings.po b/plugin.video.youtube/resources/language/resource.language.pt_br/strings.po index 8851f948d9..a6b843374a 100644 --- a/plugin.video.youtube/resources/language/resource.language.pt_br/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.pt_br/strings.po @@ -60,8 +60,8 @@ msgid "Always ask for the video quality" msgstr "Sempre perguntar pela qualidade do vídeo" msgctxt "#30010" -msgid "Video quality" -msgstr "Qualidade do Vídeo" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -72,16 +72,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -95,6 +95,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p ao Vivo / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + msgctxt "#30020" msgid "Allow 3D" msgstr "Permitir 3D" @@ -984,8 +988,8 @@ msgid "Reset resume point" msgstr "Resetar ponto de resumo" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Use histórico de reprodução (assistido, retomar rastreamento)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1044,8 +1048,8 @@ msgid "Use for live streams" msgstr "Use para transmissões ao vivo" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "InputStream Adaptive >= 2.0.12 é requerido para transmissões ao vivo" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1172,32 +1176,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "Padrão para o conjunto de adaptação WEBM (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "Proxy é requerido para vods mpeg-dash (ver Servidor HTTP)[CR] 1080p e HDR requerem InputStream Adaptive >= 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Limite para 30fps" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Uploads" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Adaptivo (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Adaptivo (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1231,6 +1235,158 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Qualidade do Vídeo" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Use histórico de reprodução (assistido, retomar rastreamento)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "InputStream Adaptive >= 2.0.12 é requerido para transmissões ao vivo" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Limite para 30fps" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Adaptivo (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Adaptivo (WEBM/VP9)" + #~ msgctxt "#30100" #~ msgid "Favorites" #~ msgstr "Favoritos" diff --git a/plugin.video.youtube/resources/language/resource.language.pt_pt/strings.po b/plugin.video.youtube/resources/language/resource.language.pt_pt/strings.po index 197f74be85..0819967525 100644 --- a/plugin.video.youtube/resources/language/resource.language.pt_pt/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.pt_pt/strings.po @@ -61,8 +61,8 @@ msgid "Always ask for the video quality" msgstr "Perguntar sempre pela qualidade do vídeo" msgctxt "#30010" -msgid "Video quality" -msgstr "Qualidade do Vídeo" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -73,16 +73,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p Em direto / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + msgctxt "#30020" msgid "Allow 3D" msgstr "Permitir 3D" @@ -987,8 +991,8 @@ msgid "Reset resume point" msgstr "Redefinir ponto de resumo" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Usar histórico de reprodução (visualizado, retomar o rastreamento)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1047,8 +1051,8 @@ msgid "Use for live streams" msgstr "Usar para as streams em directo" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "InputStream Adaptive >= 2.0.12 é necessário para streams em directo" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1175,32 +1179,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Limitar a 30fps" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Carregamentos" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Adaptativo (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Adaptativo (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1234,6 +1238,158 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Qualidade do Vídeo" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Usar histórico de reprodução (visualizado, retomar o rastreamento)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "InputStream Adaptive >= 2.0.12 é necessário para streams em directo" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Limitar a 30fps" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Adaptativo (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Adaptativo (WEBM/VP9)" + #~ msgctxt "#30100" #~ msgid "Favorites" #~ msgstr "Favoritos" diff --git a/plugin.video.youtube/resources/language/resource.language.ro_ro/strings.po b/plugin.video.youtube/resources/language/resource.language.ro_ro/strings.po index 4de97e02e1..b0963afb29 100644 --- a/plugin.video.youtube/resources/language/resource.language.ro_ro/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.ro_ro/strings.po @@ -61,8 +61,8 @@ msgid "Always ask for the video quality" msgstr "Întreabă întotdeauna pentru calitatea video" msgctxt "#30010" -msgid "Video quality" -msgstr "Calitate video" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -73,16 +73,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + msgctxt "#30020" msgid "Allow 3D" msgstr "Permite 3D" @@ -987,7 +991,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1047,7 +1051,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1175,19 +1179,19 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1195,12 +1199,12 @@ msgid "Uploads" msgstr "Încărcări" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Adaptiv (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Adaptiv (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1234,6 +1238,142 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Calitate video" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Adaptiv (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Adaptiv (WEBM/VP9)" + #~ msgctxt "#30100" #~ msgid "Favorites" #~ msgstr "Favorite" diff --git a/plugin.video.youtube/resources/language/resource.language.ru_ru/strings.po b/plugin.video.youtube/resources/language/resource.language.ru_ru/strings.po index 3ad57a882b..08378e08be 100644 --- a/plugin.video.youtube/resources/language/resource.language.ru_ru/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.ru_ru/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: XBMC-Addons\n" -"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" "POT-Creation-Date: 2015-09-21 11:01+0000\n" "PO-Revision-Date: 2022-12-27 12:15+0000\n" "Last-Translator: Andrei Stepanov \n" @@ -62,8 +62,8 @@ msgid "Always ask for the video quality" msgstr "Всегда задавать вопрос о качестве видео" msgctxt "#30010" -msgid "Video quality" -msgstr "Качество видео" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -74,16 +74,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -97,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p Прямой эфир / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -989,8 +993,8 @@ msgid "Reset resume point" msgstr "Сброс точки возобновления" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Использовать историю просмотра (просмотренное, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1049,8 +1053,8 @@ msgid "Use for live streams" msgstr "Использовать для прямого эфира" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "Для прямого эфира требуется InputStream Adaptive >= 2.0.12" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1177,32 +1181,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "По умолчанию установлено значение адаптации WEBM (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "Прокси требуется для mpeg-dash видео (см. HTTP сервер)[CR]>Для 1080p и HDR требуется InputStream Adaptive >= 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Лимит в 30fps" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Загрузки" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Адаптивное (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Адаптивное (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1235,3 +1239,155 @@ msgstr "Изменен" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Качество видео" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Использовать историю просмотра (просмотренное, resume tracking)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "Для прямого эфира требуется InputStream Adaptive >= 2.0.12" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Лимит в 30fps" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Адаптивное (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Адаптивное (WEBM/VP9)" diff --git a/plugin.video.youtube/resources/language/resource.language.si_lk/strings.po b/plugin.video.youtube/resources/language/resource.language.si_lk/strings.po index bd43c6ca79..5f998e16d9 100644 --- a/plugin.video.youtube/resources/language/resource.language.si_lk/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.si_lk/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.sk_sk/strings.po b/plugin.video.youtube/resources/language/resource.language.sk_sk/strings.po index 1352c1f0b0..bb3873fdba 100644 --- a/plugin.video.youtube/resources/language/resource.language.sk_sk/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.sk_sk/strings.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: XBMC-Addons\n" "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" "POT-Creation-Date: 2015-09-21 11:01+0000\n" -"PO-Revision-Date: 2022-11-04 05:15+0000\n" -"Last-Translator: Christian Gade \n" +"PO-Revision-Date: 2023-07-24 21:11+0000\n" +"Last-Translator: Jose Riha \n" "Language-Team: Slovak \n" "Language: sk_sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 4.14.1\n" +"X-Generator: Weblate 4.18.2\n" msgctxt "Addon Summary" msgid "Plugin for YouTube" @@ -61,8 +61,8 @@ msgid "Always ask for the video quality" msgstr "Vždy sa spýtať na kvalitu videa" msgctxt "#30010" -msgid "Video quality" -msgstr "Kvalita videa" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -73,16 +73,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p Živé / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + msgctxt "#30020" msgid "Allow 3D" msgstr "Povoliť 3D" @@ -296,7 +300,7 @@ msgstr "Zoznamy" msgctxt "#30502" msgid "Go to %s" -msgstr "Prejdite na %s" +msgstr "Prejsť na %s" msgctxt "#30503" msgid "Show channel fanart" @@ -360,7 +364,7 @@ msgstr "Odoberať od %s" msgctxt "#30518" msgid "Go to '%s'" -msgstr "Prejdite na '%s'" +msgstr "Prejsť na '%s'" msgctxt "#30519" msgid "and enter the following code:" @@ -987,8 +991,8 @@ msgid "Reset resume point" msgstr "Resetovať pozíciu pokračovania" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Použiť históriu prehrávania (videné, pokračovanie prehrávania)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1047,8 +1051,8 @@ msgid "Use for live streams" msgstr "Použiť pre živé prenosy" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "Živé prenosy vyžadujú InputStream Adaptive aspoň vo verzii 2.0.12" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1172,39 +1176,39 @@ msgstr "Zrušenie odberu" msgctxt "#30721" msgid "Default to WEBM adaptation set (4K)" -msgstr "" +msgstr "Predvolené nastavenie prispôsobenia WEBM (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "Videá MPEG-DASH vyžadujú proxy (viď server HTTP)[CR]> 1080p a HDR videá vyžadujú InputStream Adaptive aspoň vo verzii 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "Obmedziť na 30 snímkov/s" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Nahraté" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Adaptívne (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Adaptívne (MP4/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" -msgstr "" +msgstr "Vyhľadávanie prispôsobené pre diaľkové ovládače" msgctxt "#30730" msgid "Play (Ask for quality)" @@ -1232,8 +1236,160 @@ msgstr "Upravené" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" +msgstr "Skryť krátke videá (1 minúta alebo menej)" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "Použitie alternatívnych údajov o klientovi" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "Alternatíva č. 1" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "Alternatíva č. 2" + +msgctxt "#30740" +msgid "HLS" msgstr "" +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Kvalita videa" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Použiť históriu prehrávania (videné, pokračovanie prehrávania)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "Živé prenosy vyžadujú InputStream Adaptive aspoň vo verzii 2.0.12" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "Obmedziť na 30 snímkov/s" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Adaptívne (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Adaptívne (MP4/VP9)" + #~ msgctxt "#30100" #~ msgid "Favorites" #~ msgstr "Obľúbené" diff --git a/plugin.video.youtube/resources/language/resource.language.sl_si/strings.po b/plugin.video.youtube/resources/language/resource.language.sl_si/strings.po index b5022d7cea..d304b4d0d0 100644 --- a/plugin.video.youtube/resources/language/resource.language.sl_si/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.sl_si/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.sq_al/strings.po b/plugin.video.youtube/resources/language/resource.language.sq_al/strings.po index 093640dd05..d6b56299fe 100644 --- a/plugin.video.youtube/resources/language/resource.language.sq_al/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.sq_al/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.sr_rs/strings.po b/plugin.video.youtube/resources/language/resource.language.sr_rs/strings.po index ab7ab58ac0..cb7d9e823b 100644 --- a/plugin.video.youtube/resources/language/resource.language.sr_rs/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.sr_rs/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.sr_rs@latin/strings.po b/plugin.video.youtube/resources/language/resource.language.sr_rs@latin/strings.po index 10f86679ef..ef03432989 100644 --- a/plugin.video.youtube/resources/language/resource.language.sr_rs@latin/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.sr_rs@latin/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.sv_se/strings.po b/plugin.video.youtube/resources/language/resource.language.sv_se/strings.po index 2f05e2afa5..cd677cb2d5 100644 --- a/plugin.video.youtube/resources/language/resource.language.sv_se/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.sv_se/strings.po @@ -62,7 +62,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -74,15 +74,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -97,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -989,7 +993,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1049,7 +1053,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1177,7 +1181,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1185,11 +1189,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1197,11 +1201,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1235,3 +1239,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.szl/strings.po b/plugin.video.youtube/resources/language/resource.language.szl/strings.po index 989eade945..2403e80155 100644 --- a/plugin.video.youtube/resources/language/resource.language.szl/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.szl/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.ta_in/strings.po b/plugin.video.youtube/resources/language/resource.language.ta_in/strings.po index a0fbe3480b..ae00238d45 100644 --- a/plugin.video.youtube/resources/language/resource.language.ta_in/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.ta_in/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.te_in/strings.po b/plugin.video.youtube/resources/language/resource.language.te_in/strings.po index 5c89013765..ce035052d9 100644 --- a/plugin.video.youtube/resources/language/resource.language.te_in/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.te_in/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.tg_tj/strings.po b/plugin.video.youtube/resources/language/resource.language.tg_tj/strings.po index 1e601ceb1e..8d2f916399 100644 --- a/plugin.video.youtube/resources/language/resource.language.tg_tj/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.tg_tj/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.th_th/strings.po b/plugin.video.youtube/resources/language/resource.language.th_th/strings.po index 61e4983eac..78fb1f9c8b 100644 --- a/plugin.video.youtube/resources/language/resource.language.th_th/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.th_th/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.tr_tr/strings.po b/plugin.video.youtube/resources/language/resource.language.tr_tr/strings.po index 85153a2e0c..b22ed50a5d 100644 --- a/plugin.video.youtube/resources/language/resource.language.tr_tr/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.tr_tr/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: XBMC-Addons\n" -"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" "POT-Creation-Date: 2015-09-21 11:01+0000\n" "PO-Revision-Date: 2023-01-15 09:59+0000\n" "Last-Translator: Tmp341 \n" @@ -62,8 +62,8 @@ msgid "Always ask for the video quality" msgstr "Her zaman video kalitesi için sor" msgctxt "#30010" -msgid "Video quality" -msgstr "Video kalitesi" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -74,16 +74,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -97,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p Canlı / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -989,8 +993,8 @@ msgid "Reset resume point" msgstr "Kaldığım yeri sıfırla" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "Oynatma geçmişini kullan (izlendi, kaldığım yerin takip edilmesi)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1049,8 +1053,8 @@ msgid "Use for live streams" msgstr "Canlı yayınlar için kullan" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "Canlı yayınlar için InputStream Adaptive >= 2.0.12 gereklidir" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1177,32 +1181,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "Varsayılan olarak WEBM uyarlama seti (4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "mpeg-dash vod'lar için proxy gereklidir (bkz. HTTP Sunucusu)[CR]> 1080p ve HDR için InputStream Adaptive >= 2.3.14 gerekir" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "30fps ayarına sabitle" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "Yüklenenler" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "Uyarlamalı (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "Uyarlamalı (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1235,3 +1239,155 @@ msgstr "Düzenlendi" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "Kısa Videoları Gizle (1 dk ya da daha az)" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Video kalitesi" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "Oynatma geçmişini kullan (izlendi, kaldığım yerin takip edilmesi)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "Canlı yayınlar için InputStream Adaptive >= 2.0.12 gereklidir" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "30fps ayarına sabitle" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "Uyarlamalı (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "Uyarlamalı (WEBM/VP9)" diff --git a/plugin.video.youtube/resources/language/resource.language.uk_ua/strings.po b/plugin.video.youtube/resources/language/resource.language.uk_ua/strings.po index 609be93045..ec62f2d9a6 100644 --- a/plugin.video.youtube/resources/language/resource.language.uk_ua/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.uk_ua/strings.po @@ -60,8 +60,8 @@ msgid "Always ask for the video quality" msgstr "Завжди запитувати про якість відео" msgctxt "#30010" -msgid "Video quality" -msgstr "Якість відео" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -72,16 +72,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -95,6 +95,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + msgctxt "#30020" msgid "Allow 3D" msgstr "Дозволити 3D" @@ -986,7 +990,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1046,7 +1050,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1174,7 +1178,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1182,11 +1186,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1194,11 +1198,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1233,6 +1237,130 @@ msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Якість відео" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + #~ msgctxt "#30100" #~ msgid "Favorites" #~ msgstr "Обране" diff --git a/plugin.video.youtube/resources/language/resource.language.uz_uz/strings.po b/plugin.video.youtube/resources/language/resource.language.uz_uz/strings.po index 07255af2b4..a2e59dfd2a 100644 --- a/plugin.video.youtube/resources/language/resource.language.uz_uz/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.uz_uz/strings.po @@ -61,7 +61,7 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" +msgid "Maximum video quality" msgstr "" msgctxt "#30011" @@ -73,15 +73,15 @@ msgid "720p (HD)" msgstr "" msgctxt "#30013" -msgid "1080p (HD)" +msgid "1080p (FHD)" msgstr "" msgctxt "#30014" -msgid "2160p (4k)" +msgid "2160p (4K)" msgstr "" msgctxt "#30015" -msgid "4320p (8k)" +msgid "4320p (8K)" msgstr "" msgctxt "#30016" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -988,7 +992,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1048,7 +1052,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1176,7 +1180,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1184,11 +1188,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1196,11 +1200,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1234,3 +1238,111 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" diff --git a/plugin.video.youtube/resources/language/resource.language.vi_vn/strings.po b/plugin.video.youtube/resources/language/resource.language.vi_vn/strings.po index d17b9daae1..5ed2b1304c 100644 --- a/plugin.video.youtube/resources/language/resource.language.vi_vn/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.vi_vn/strings.po @@ -62,8 +62,8 @@ msgid "Always ask for the video quality" msgstr "" msgctxt "#30010" -msgid "Video quality" -msgstr "Chất lượng video" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -74,16 +74,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -97,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p Trực tiếp / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -989,7 +993,7 @@ msgid "Reset resume point" msgstr "" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" +msgid "Use local playback history (watched, resume tracking)" msgstr "" msgctxt "#30676" @@ -1049,7 +1053,7 @@ msgid "Use for live streams" msgstr "" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" msgstr "" msgctxt "#30691" @@ -1177,7 +1181,7 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "" msgctxt "#30722" -msgid "HDR" +msgid "Enable HDR video" msgstr "" msgctxt "#30723" @@ -1185,11 +1189,11 @@ msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR msgstr "" msgctxt "#30724" -msgid "Limit to 30fps" +msgid "Enable high framerate video" msgstr "" msgctxt "#30725" -msgid "1440p (HD)" +msgid "1440p (QHD)" msgstr "" msgctxt "#30726" @@ -1197,11 +1201,11 @@ msgid "Uploads" msgstr "" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" +msgid "Enable H.264 video" msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" +msgid "Enable VP9 video" msgstr "" msgctxt "#30729" @@ -1235,3 +1239,127 @@ msgstr "" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "Chất lượng video" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" diff --git a/plugin.video.youtube/resources/language/resource.language.zh_cn/strings.po b/plugin.video.youtube/resources/language/resource.language.zh_cn/strings.po index 9b0093ac9b..6c9f658a52 100644 --- a/plugin.video.youtube/resources/language/resource.language.zh_cn/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.zh_cn/strings.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: XBMC-Addons\n" "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" "POT-Creation-Date: 2015-09-21 11:01+0000\n" -"PO-Revision-Date: 2021-11-05 19:30+0000\n" -"Last-Translator: wwj \n" +"PO-Revision-Date: 2023-04-28 16:20+0000\n" +"Last-Translator: NicoYazawa <1161118059@qq.com>\n" "Language-Team: Chinese (China) \n" "Language: zh_cn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.8.1\n" +"X-Generator: Weblate 4.15.2\n" msgctxt "Addon Summary" msgid "Plugin for YouTube" @@ -61,8 +61,8 @@ msgid "Always ask for the video quality" msgstr "总是询问视频分辨率" msgctxt "#30010" -msgid "Video quality" -msgstr "视频分辨率" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -73,16 +73,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -96,6 +96,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p 直播 / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + msgctxt "#30020" msgid "Allow 3D" msgstr "允许 3D 播放" @@ -987,8 +991,8 @@ msgid "Reset resume point" msgstr "重置恢复点" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "使用播放历史(已观看,继续跟踪)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1047,8 +1051,8 @@ msgid "Use for live streams" msgstr "用于直播流" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "实时流需要 InputStream Adaptive >= 2.0.12" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1175,32 +1179,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "默认为 WEBM 适配集(4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "MPEG-DASH 视频点播(VODS)需要代理(请参阅 HTTP 服务器)[CR]> 1080p 和 HDR 需要 InputStream Adaptive >= 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "限制为 30fps" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440P (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "上传" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "自适应 (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "自适应(WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1232,8 +1236,160 @@ msgstr "已编辑" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" +msgstr "隐藏短视频(1分钟以内)" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" msgstr "" +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "视频分辨率" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "使用播放历史(已观看,继续跟踪)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "实时流需要 InputStream Adaptive >= 2.0.12" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "限制为 30fps" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440P (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "自适应 (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "自适应(WEBM/VP9)" + #~ msgctxt "#30100" #~ msgid "Favorites" #~ msgstr "我的收藏" diff --git a/plugin.video.youtube/resources/language/resource.language.zh_tw/strings.po b/plugin.video.youtube/resources/language/resource.language.zh_tw/strings.po index 807f77d2a3..3cde9c7841 100644 --- a/plugin.video.youtube/resources/language/resource.language.zh_tw/strings.po +++ b/plugin.video.youtube/resources/language/resource.language.zh_tw/strings.po @@ -62,8 +62,8 @@ msgid "Always ask for the video quality" msgstr "每次詢問影片解像度" msgctxt "#30010" -msgid "Video quality" -msgstr "影片解像度" +msgid "Maximum video quality" +msgstr "" msgctxt "#30011" msgid "480p" @@ -74,16 +74,16 @@ msgid "720p (HD)" msgstr "720p (HD)" msgctxt "#30013" -msgid "1080p (HD)" -msgstr "1080p (HD)" +msgid "1080p (FHD)" +msgstr "" msgctxt "#30014" -msgid "2160p (4k)" -msgstr "2160p (4k)" +msgid "2160p (4K)" +msgstr "" msgctxt "#30015" -msgid "4320p (8k)" -msgstr "4320p (8k)" +msgid "4320p (8K)" +msgstr "" msgctxt "#30016" msgid "240p" @@ -97,6 +97,10 @@ msgctxt "#30018" msgid "1080p Live / 720p (HD)" msgstr "1080p 直播 / 720p (HD)" +msgctxt "#30019" +msgid "144p" +msgstr "" + # empty strings 30019 msgctxt "#30020" msgid "Allow 3D" @@ -989,8 +993,8 @@ msgid "Reset resume point" msgstr "重設繼續播放點" msgctxt "#30675" -msgid "Use playback history (watched, resume tracking)" -msgstr "啟用播放歷史 (已觀看, 繼續播放)" +msgid "Use local playback history (watched, resume tracking)" +msgstr "" msgctxt "#30676" msgid "Just now" @@ -1049,8 +1053,8 @@ msgid "Use for live streams" msgstr "使用在直播串流" msgctxt "#30690" -msgid "InputStream Adaptive >= 2.0.12 is required for live streams" -msgstr "直播串流需要 InputStream Adaptive 2.0.12 以上版本" +msgid "InputStream Adaptive >= 2.0.12 is required for adaptive live streams" +msgstr "" msgctxt "#30691" msgid "Airing now" @@ -1177,32 +1181,32 @@ msgid "Default to WEBM adaptation set (4K)" msgstr "初始為WEBM adaptation(4K)" msgctxt "#30722" -msgid "HDR" -msgstr "HDR" +msgid "Enable HDR video" +msgstr "" msgctxt "#30723" msgid "Proxy is required for mpeg-dash vods (see HTTP Server)[CR]> 1080p and HDR requires InputStream Adaptive >= 2.3.14" msgstr "mpeg-dash 隨選視訊需要設定代理 (請看 HTTP 伺服器)[CR]> 1080p 且 HDR 需要 InputStream Adaptive >= 2.3.14" msgctxt "#30724" -msgid "Limit to 30fps" -msgstr "限制在30fps" +msgid "Enable high framerate video" +msgstr "" msgctxt "#30725" -msgid "1440p (HD)" -msgstr "1440p (HD)" +msgid "1440p (QHD)" +msgstr "" msgctxt "#30726" msgid "Uploads" msgstr "上傳的影片" msgctxt "#30727" -msgid "Adaptive (MP4/H264)" -msgstr "動態 (MP4/H264)" +msgid "Enable H.264 video" +msgstr "" msgctxt "#30728" -msgid "Adaptive (WEBM/VP9)" -msgstr "動態 (WEBM/VP9)" +msgid "Enable VP9 video" +msgstr "" msgctxt "#30729" msgid "Remote friendly search" @@ -1235,3 +1239,155 @@ msgstr "已編輯" msgctxt "#30736" msgid "Hide short videos (1 minute or less)" msgstr "" + +msgctxt "#30737" +msgid "Use alternate client details" +msgstr "" + +msgctxt "#30738" +msgid "Alternate #1" +msgstr "" + +msgctxt "#30739" +msgid "Alternate #2" +msgstr "" + +msgctxt "#30740" +msgid "HLS" +msgstr "" + +msgctxt "#30741" +msgid "Multi-stream HLS" +msgstr "" + +msgctxt "#30742" +msgid "Adaptive HLS" +msgstr "" + +msgctxt "#30743" +msgid "MPEG-DASH" +msgstr "" + +msgctxt "#30744" +msgid "Original" +msgstr "" + +msgctxt "#30745" +msgid "Dubbed" +msgstr "" + +msgctxt "#30746" +msgid "Descriptive" +msgstr "" + +msgctxt "#30747" +msgid "Alternate" +msgstr "" + +msgctxt "#30748" +msgid "Stream features" +msgstr "" + +msgctxt "#30749" +msgid "Enable AV1 video" +msgstr "" + +msgctxt "#30750" +msgid "Enable Vorbis audio" +msgstr "" + +msgctxt "#30751" +msgid "Enable Opus audio" +msgstr "" + +msgctxt "#30752" +msgid "Enable AAC audio" +msgstr "" + +msgctxt "#30753" +msgid "Enable surround sound audio" +msgstr "" + +msgctxt "#30754" +msgid "Enable AC-3 audio" +msgstr "" + +msgctxt "#30755" +msgid "Enable EAC-3 audio" +msgstr "" + +msgctxt "#30756" +msgid "Enable DTS audio" +msgstr "" + +msgctxt "#30757" +msgid "Remove similar/duplicate streams" +msgstr "" + +msgctxt "#30758" +msgid "Stream selection" +msgstr "" + +msgctxt "#30759" +msgid "Quality selection" +msgstr "" + +msgctxt "#30760" +msgid "Automatic + Quality selection" +msgstr "" + +msgctxt "#30761" +msgid "Update playback history on Youtube" +msgstr "" + +msgctxt "#30762" +msgid "Multi-language" +msgstr "" + +msgctxt "#30763" +msgid "Multi-audio" +msgstr "" + +#~ msgctxt "#30010" +#~ msgid "Video quality" +#~ msgstr "影片解像度" + +#~ msgctxt "#30013" +#~ msgid "1080p (HD)" +#~ msgstr "1080p (HD)" + +#~ msgctxt "#30014" +#~ msgid "2160p (4k)" +#~ msgstr "2160p (4k)" + +#~ msgctxt "#30015" +#~ msgid "4320p (8k)" +#~ msgstr "4320p (8k)" + +#~ msgctxt "#30675" +#~ msgid "Use playback history (watched, resume tracking)" +#~ msgstr "啟用播放歷史 (已觀看, 繼續播放)" + +#~ msgctxt "#30690" +#~ msgid "InputStream Adaptive >= 2.0.12 is required for live streams" +#~ msgstr "直播串流需要 InputStream Adaptive 2.0.12 以上版本" + +#~ msgctxt "#30722" +#~ msgid "HDR" +#~ msgstr "HDR" + +#~ msgctxt "#30724" +#~ msgid "Limit to 30fps" +#~ msgstr "限制在30fps" + +#~ msgctxt "#30725" +#~ msgid "1440p (HD)" +#~ msgstr "1440p (HD)" + +#~ msgctxt "#30727" +#~ msgid "Adaptive (MP4/H264)" +#~ msgstr "動態 (MP4/H264)" + +#~ msgctxt "#30728" +#~ msgid "Adaptive (WEBM/VP9)" +#~ msgstr "動態 (WEBM/VP9)" diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/external/__init__.py b/plugin.video.youtube/resources/lib/youtube_plugin/external/__init__.py deleted file mode 100644 index 644de4f825..0000000000 --- a/plugin.video.youtube/resources/lib/youtube_plugin/external/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -""" - - Copyright (C) 2023 plugin.video.youtube - - SPDX-License-Identifier: GPL-2.0-only - See LICENSES/GPL-2.0-only for more information. -""" - -__all__ = ['listitem'] diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/external/listitem.py b/plugin.video.youtube/resources/lib/youtube_plugin/external/listitem.py deleted file mode 100644 index f2ea96a3d3..0000000000 --- a/plugin.video.youtube/resources/lib/youtube_plugin/external/listitem.py +++ /dev/null @@ -1,218 +0,0 @@ -# -*- coding: utf-8 -*- -# Module: default -# Author: jurialmunkey -# License: GPL v.3 https://www.gnu.org/copyleft/gpl.html -from xbmc import Actor, VideoStreamDetail, AudioStreamDetail, SubtitleStreamDetail, LOGINFO -from xbmc import log as kodi_log - - -class ListItemInfoTag(): - INFO_TAG_ATTR = { - 'video': { - 'tag_getter': 'getVideoInfoTag', - 'tag_attr': { - 'genre': {'attr': 'setGenres', 'convert': lambda x: [x], 'classinfo': (list, tuple)}, - 'country': {'attr': 'setCountries', 'convert': lambda x: [x], 'classinfo': (list, tuple)}, - 'year': {'attr': 'setYear', 'convert': int, 'classinfo': int}, - 'episode': {'attr': 'setEpisode', 'convert': int, 'classinfo': int}, - 'season': {'attr': 'setSeason', 'convert': int, 'classinfo': int}, - 'sortepisode': {'attr': 'setSortEpisode', 'convert': int, 'classinfo': int}, - 'sortseason': {'attr': 'setSortSeason', 'convert': int, 'classinfo': int}, - 'episodeguide': {'attr': 'setEpisodeGuide', 'convert': str, 'classinfo': str}, - 'showlink': {'attr': 'setShowLinks', 'convert': lambda x: [x], 'classinfo': (list, tuple)}, - 'top250': {'attr': 'setTop250', 'convert': int, 'classinfo': int}, - 'setid': {'attr': 'setSetId', 'convert': int, 'classinfo': int}, - 'tracknumber': {'attr': 'setTrackNumber', 'convert': int, 'classinfo': int}, - 'rating': {'attr': 'setRating', 'convert': float, 'classinfo': float}, - 'userrating': {'attr': 'setUserRating', 'convert': int, 'classinfo': int}, - 'watched': {'skip': True}, # Evaluated internally in Nexus based on playcount so skip - 'playcount': {'attr': 'setPlaycount', 'convert': int, 'classinfo': int}, - 'overlay': {'skip': True}, # Evaluated internally in Nexus based on playcount so skip - 'cast': {'route': 'set_info_cast'}, - 'castandrole': {'route': 'set_info_cast'}, - 'director': {'attr': 'setDirectors', 'convert': lambda x: [x], 'classinfo': (list, tuple)}, - 'mpaa': {'attr': 'setMpaa', 'convert': str, 'classinfo': str}, - 'plot': {'attr': 'setPlot', 'convert': str, 'classinfo': str}, - 'plotoutline': {'attr': 'setPlotOutline', 'convert': str, 'classinfo': str}, - 'title': {'attr': 'setTitle', 'convert': str, 'classinfo': str}, - 'originaltitle': {'attr': 'setOriginalTitle', 'convert': str, 'classinfo': str}, - 'sorttitle': {'attr': 'setSortTitle', 'convert': str, 'classinfo': str}, - 'duration': {'attr': 'setDuration', 'convert': int, 'classinfo': int}, - 'studio': {'attr': 'setStudios', 'convert': lambda x: [x], 'classinfo': (list, tuple)}, - 'tagline': {'attr': 'setTagLine', 'convert': str, 'classinfo': str}, - 'writer': {'attr': 'setWriters', 'convert': lambda x: [x], 'classinfo': (list, tuple)}, - 'tvshowtitle': {'attr': 'setTvShowTitle', 'convert': str, 'classinfo': str}, - 'premiered': {'attr': 'setPremiered', 'convert': str, 'classinfo': str}, - 'status': {'attr': 'setTvShowStatus', 'convert': str, 'classinfo': str}, - 'set': {'attr': 'setSet', 'convert': str, 'classinfo': str}, - 'setoverview': {'attr': 'setSetOverview', 'convert': str, 'classinfo': str}, - 'tag': {'attr': 'setTags', 'convert': lambda x: [x], 'classinfo': (list, tuple)}, - 'imdbnumber': {'attr': 'setIMDBNumber', 'convert': str, 'classinfo': str}, - 'code': {'attr': 'setProductionCode', 'convert': str, 'classinfo': str}, - 'aired': {'attr': 'setFirstAired', 'convert': str, 'classinfo': str}, - 'credits': {'attr': 'setWriters', 'convert': lambda x: [x], 'classinfo': (list, tuple)}, - 'lastplayed': {'attr': 'setLastPlayed', 'convert': str, 'classinfo': str}, - 'album': {'attr': 'setAlbum', 'convert': str, 'classinfo': str}, - 'artist': {'attr': 'setArtists', 'convert': lambda x: [x], 'classinfo': (list, tuple)}, - 'votes': {'attr': 'setVotes', 'convert': int, 'classinfo': int}, - 'path': {'attr': 'setPath', 'convert': str, 'classinfo': str}, - 'trailer': {'attr': 'setTrailer', 'convert': str, 'classinfo': str}, - 'dateadded': {'attr': 'setDateAdded', 'convert': str, 'classinfo': str}, - 'date': {'attr': 'setDateAdded', 'convert': str, 'classinfo': str}, - 'mediatype': {'attr': 'setMediaType', 'convert': str, 'classinfo': str}, - 'dbid': {'attr': 'setDbId', 'convert': int, 'classinfo': int}, - } - }, - 'music': { - 'tag_getter': 'getMusicInfoTag', - 'tag_attr': { - 'tracknumber': {'attr': 'setTrack', 'convert': int, 'classinfo': int}, - 'discnumber': {'attr': 'setDisc', 'convert': int, 'classinfo': int}, - 'duration': {'attr': 'setDuration', 'convert': int, 'classinfo': int}, - 'year': {'attr': 'setYear', 'convert': int, 'classinfo': int}, - 'genre': {'attr': 'setGenres', 'convert': lambda x: [x], 'classinfo': (list, tuple)}, - 'album': {'attr': 'setAlbum', 'convert': str, 'classinfo': str}, - 'artist': {'attr': 'setArtist', 'convert': str, 'classinfo': str}, - 'title': {'attr': 'setTitle', 'convert': str, 'classinfo': str}, - 'rating': {'attr': 'setRating', 'convert': float, 'classinfo': float}, - 'userrating': {'attr': 'setUserRating', 'convert': int, 'classinfo': int}, - 'lyrics': {'attr': 'setLyrics', 'convert': str, 'classinfo': str}, - 'playcount': {'attr': 'setPlayCount', 'convert': int, 'classinfo': int}, - 'lastplayed': {'attr': 'setLastPlayed', 'convert': str, 'classinfo': str}, - 'mediatype': {'attr': 'setMediaType', 'convert': str, 'classinfo': str}, - 'dbid': {'route': 'set_info_music_dbid'}, - 'listeners': {'attr': 'setListeners', 'convert': int, 'classinfo': int}, - 'musicbrainztrackid': {'attr': 'setMusicBrainzTrackID', 'convert': str, 'classinfo': str}, - 'musicbrainzartistid': {'attr': 'setMusicBrainzArtistID', 'convert': lambda x: [x], 'classinfo': (list, tuple)}, - 'musicbrainzalbumid': {'attr': 'setMusicBrainzAlbumID', 'convert': str, 'classinfo': str}, - 'musicbrainzalbumartistid': {'attr': 'setMusicBrainzAlbumArtistID', 'convert': lambda x: [x], 'classinfo': (list, tuple)}, - 'comment': {'attr': 'setComment', 'convert': str, 'classinfo': str}, - 'albumartist': {'attr': 'setAlbumArtist', 'convert': str, 'classinfo': str}, # Not listed in setInfo docs but included for forward compatibility - } - }, - 'game': { - 'tag_getter': 'getGameInfoTag', - 'tag_attr': { - 'title': {'attr': 'setTitle', 'convert': str, 'classinfo': str}, - 'platform': {'attr': 'setPlatform', 'convert': str, 'classinfo': str}, - 'genres': {'attr': 'setGenres', 'convert': lambda x: [x], 'classinfo': (list, tuple)}, - 'publisher': {'attr': 'setPublisher', 'convert': str, 'classinfo': str}, - 'developer': {'attr': 'setDeveloper', 'convert': str, 'classinfo': str}, - 'overview': {'attr': 'setOverview', 'convert': str, 'classinfo': str}, - 'year': {'attr': 'setYear', 'convert': int, 'classinfo': int}, - 'gameclient': {'attr': 'setGameClient', 'convert': str, 'classinfo': str}, - } - } - } - - def __init__(self, listitem, tag_type: str = 'video', type_check=False): - """ - Pass xbmcgui.ListItem() to listitem with tag_type to the library type normally in li.setInfo(type=) - Optional set type_check= - - False: (default) - - Slightly increases performance by avoiding additional internal type checks - - Relys on Kodi Python API raising a TypeError to determine when to force type conversion - - Kodi creates EXCEPTION log spam when infolabels require type conversion - - True: - - Slightly descreases performance by requiring additional internal type checks - - Uses internal isinstance type check to determine when to force type conversion - - Prevents Kodi EXCEPTION log spam when infolabels require type conversion - """ - self._listitem = listitem - self._tag_type = tag_type - self._tag_attr = self.INFO_TAG_ATTR[tag_type]['tag_attr'] - self._info_tag = getattr(self._listitem, self.INFO_TAG_ATTR[tag_type]['tag_getter'])() - self._type_chk = type_check - - def set_info(self, infolabels: dict): - """ Wrapper for compatibility with Matrix ListItem.setInfo() method """ - for k, v in infolabels.items(): - if v is None: - continue - try: - _tag_attr = self._tag_attr[k] - func = getattr(self._info_tag, _tag_attr['attr']) - if self._type_chk and not isinstance(v, _tag_attr['classinfo']): - raise TypeError - func(v) - - except KeyError: - if k not in self._tag_attr: - log_msg = f'[script.module.infotagger] set_info:\nKeyError: {k}' - kodi_log(log_msg, level=LOGINFO) - continue - - if _tag_attr.get('skip'): - continue - - if 'route' in _tag_attr: - getattr(self, _tag_attr['route'])(v, infolabels) - continue - - log_msg = _tag_attr.get('log_msg') or '' - log_msg = f'[script.module.infotagger] set_info:\nKeyError: {log_msg}' - kodi_log(log_msg, level=LOGINFO) - continue - - except TypeError: - func(_tag_attr['convert'](v)) # Attempt to force conversion to correct type - - def set_info_music_dbid(self, dbid: int, infolabels: dict, *args, **kwargs): - """ Wrapper for InfoTagMusic.setDbId to retrieve mediatype """ - try: - mediatype = infolabels['mediatype'] - self._info_tag.setDbId(int(dbid), mediatype) - except (KeyError, TypeError): - return - - def set_info_cast(self, cast: list, *args, **kwargs): - """ Wrapper to convert cast and castandrole from ListItem.setInfo() to InfoTagVideo.setCast() """ - def _set_cast_member(x, i): - if not isinstance(i, tuple): - i = (i, '',) - return {'name': f'{i[0]}', 'role': f'{i[1]}', 'order': x, 'thumbnail': ''} - - self._info_tag.setCast([Actor(**_set_cast_member(x, i)) for x, i in enumerate(cast, start=1)]) - - def set_cast(self, cast: list): - """ Wrapper for compatibility with Matrix ListItem.setCast() method """ - self._info_tag.setCast([Actor(**i) for i in cast]) - - def set_unique_ids(self, unique_ids: dict, default_id: str = None): - """ Wrapper for compatibility with Matrix ListItem.setUniqueIDs() method """ - self._info_tag.setUniqueIDs({k: f'{v}' for k, v in unique_ids.items()}, default_id) - - def set_stream_details(self, stream_details: dict): - """ Wrapper for compatibility with multiple ListItem.addStreamInfo() methods in one call """ - if not stream_details: - return - - try: - for i in stream_details['video']: - try: - self._info_tag.addVideoStream(VideoStreamDetail(**i)) - except TypeError: - # TEMP BANDAID workaround for inconsistent key names prior to Nexus Beta changes - i['hdrType'] = i.pop('hdrtype', '') - i['stereoMode'] = i.pop('stereomode', '') - self._info_tag.addVideoStream(VideoStreamDetail(**i)) - except (KeyError, TypeError): - pass - - try: - for i in stream_details['audio']: - self._info_tag.addAudioStream(AudioStreamDetail(**i)) - except (KeyError, TypeError): - pass - - try: - for i in stream_details['subtitle']: - self._info_tag.addSubtitleStream(SubtitleStreamDetail(**i)) - except (KeyError, TypeError): - pass - - def add_stream_info(self, stream_type, stream_values): - """ Wrapper for compatibility with Matrix ListItem.addStreamInfo() method """ - stream_details = {'video': [], 'audio': [], 'subtitle': []} - stream_details[stream_type] = [stream_values] - self.set_stream_details(stream_details) diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/abstract_provider.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/abstract_provider.py index 7069da601c..ff8ffd444f 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/abstract_provider.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/abstract_provider.py @@ -10,9 +10,8 @@ import json import re - -from six.moves.urllib_parse import quote -from six.moves.urllib_parse import unquote +from urllib.parse import quote +from urllib.parse import unquote from .exceptions import KodionException from . import items diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/constants/const_settings.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/constants/const_settings.py index dfeeace94f..6f64ca4607 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/constants/const_settings.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/constants/const_settings.py @@ -14,11 +14,6 @@ ITEMS_PER_PAGE = 'kodion.content.max_per_page' # (int) SEARCH_SIZE = 'kodion.search.size' # (int) CACHE_SIZE = 'kodion.cache.size' # (int) -VIDEO_QUALITY = 'kodion.video.quality' # (int) -VIDEO_QUALITY_ASK = 'kodion.video.quality.ask' # (bool) -USE_DASH = 'kodion.video.quality.mpd' # (bool) -MPD_QUALITY_SELECTION = 'kodion.mpd.quality.selection' # (int) -MPD_30FPS_LIMIT = 'kodion.mpd.limit.30' # (bool) AUDIO_ONLY = 'kodion.audio_only' # (bool) AGE_GATE = 'kodion.age.gate' # (bool) SUBTITLE_LANGUAGE = 'kodion.subtitle.languages.num' # (int) @@ -28,7 +23,8 @@ LOCATION = 'youtube.location' # (str) LOCATION_RADIUS = 'youtube.location.radius' # (int) PLAY_COUNT_MIN_PERCENT = 'kodion.play_count.percent' # (int) -USE_PLAYBACK_HISTORY = 'kodion.playback.history' # (bool) +USE_LOCAL_HISTORY = 'kodion.history.local' # (bool) +USE_REMOTE_HISTORY = 'kodion.history.remote' # (bool) REMOTE_FRIENDLY_SEARCH = 'youtube.search.remote.friendly' # (bool) HIDE_SHORT_VIDEOS = 'youtube.hide_shorts' # (bool) @@ -37,12 +33,19 @@ ALLOW_DEV_KEYS = 'youtube.allow.dev.keys' # (bool) -DASH_VIDEOS = 'kodion.mpd.videos' # (bool) -DASH_INCL_HDR = 'kodion.mpd.hdr' # (bool) -DASH_LIVE_STREAMS = 'kodion.mpd.live_streams' # (bool) +VIDEO_QUALITY = 'kodion.video.quality' # (int) +VIDEO_QUALITY_ASK = 'kodion.video.quality.ask' # (bool) +USE_MPD = 'kodion.video.quality.mpd' # (bool) +LIVE_STREAMS = 'kodion.mpd.live_stream.selection' # (int) +MPD_VIDEOS = 'kodion.mpd.videos' # (bool) +MPD_QUALITY_SELECTION = 'kodion.mpd.quality.selection' # (int) +MPD_STREAM_FEATURES = 'kodion.mpd.stream.features' # (list[string]) +MPD_STREAM_SELECT = 'kodion.mpd.stream.select' # (int) HTTPD_PORT = 'kodion.mpd.proxy.port' # (number) HTTPD_LISTEN = 'kodion.http.listen' # (string) HTTPD_WHITELIST = 'kodion.http.ip.whitelist' # (string) API_CONFIG_PAGE = 'youtube.api.config.page' # (bool) + +CLIENT_SELECTION = 'youtube.client.selection' # (int) diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/abstract_context.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/abstract_context.py index 93f5005aa2..99d1cb7022 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/abstract_context.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/abstract_context.py @@ -8,9 +8,8 @@ See LICENSES/GPL-2.0-only for more information. """ -from six.moves import urllib - import os +from urllib.parse import urlencode from .. import constants from .. import logger @@ -55,6 +54,9 @@ def format_time(self, time_obj): def get_language(self): raise NotImplementedError() + def get_language_name(self): + raise NotImplementedError() + def get_region(self): raise NotImplementedError() @@ -156,7 +158,7 @@ def create_uri(self, path=u'/', params=None): params[param] = str(params[param]) uri_params[param] = to_utf8(params[param]) - uri = '?'.join([uri, urllib.parse.urlencode(uri_params)]) + uri = '?'.join([uri, urlencode(uri_params)]) return uri @@ -186,10 +188,10 @@ def get_native_path(self): raise NotImplementedError() def get_icon(self): - return os.path.join(self.get_native_path(), 'icon.png') + return self.create_resource_path('media/icon.png') def get_fanart(self): - return os.path.join(self.get_native_path(), 'fanart.jpg') + return self.create_resource_path('media/fanart.jpg') def create_resource_path(self, *args): path_comps = [] diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/abstract_settings.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/abstract_settings.py index b79c3b0c7b..47ec7ed2e7 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/abstract_settings.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/abstract_settings.py @@ -10,7 +10,7 @@ import sys -from .. import constants +from ..constants import setting as SETTINGS from ..logger import log_debug @@ -63,7 +63,7 @@ def get_bool(self, setting_id, default_value): return value == 'true' def get_items_per_page(self): - return self.get_int(constants.setting.ITEMS_PER_PAGE, 50) + return self.get_int(SETTINGS.ITEMS_PER_PAGE, 50) def get_video_quality(self, quality_map_override=None): vq_dict = {0: 240, @@ -75,106 +75,122 @@ def get_video_quality(self, quality_map_override=None): if quality_map_override is not None: vq_dict = quality_map_override - vq = self.get_int(constants.setting.VIDEO_QUALITY, 1) + vq = self.get_int(SETTINGS.VIDEO_QUALITY, 1) return vq_dict[vq] def ask_for_video_quality(self): - return self.get_bool(constants.setting.VIDEO_QUALITY_ASK, False) + return self.get_bool(SETTINGS.VIDEO_QUALITY_ASK, False) def show_fanart(self): - return self.get_bool(constants.setting.SHOW_FANART, True) + return self.get_bool(SETTINGS.SHOW_FANART, True) def get_search_history_size(self): - return self.get_int(constants.setting.SEARCH_SIZE, 50) + return self.get_int(SETTINGS.SEARCH_SIZE, 50) def is_setup_wizard_enabled(self): - return self.get_bool(constants.setting.SETUP_WIZARD, False) + return self.get_bool(SETTINGS.SETUP_WIZARD, False) def is_support_alternative_player_enabled(self): - return self.get_bool(constants.setting.SUPPORT_ALTERNATIVE_PLAYER, False) + return self.get_bool(SETTINGS.SUPPORT_ALTERNATIVE_PLAYER, False) def alternative_player_web_urls(self): - return self.get_bool(constants.setting.ALTERNATIVE_PLAYER_WEB_URLS, False) + return self.get_bool(SETTINGS.ALTERNATIVE_PLAYER_WEB_URLS, False) - def use_dash(self): - return self.get_bool(constants.setting.USE_DASH, False) + def use_mpd(self): + return self.get_bool(SETTINGS.USE_MPD, False) def subtitle_languages(self): - return self.get_int(constants.setting.SUBTITLE_LANGUAGE, 0) + return self.get_int(SETTINGS.SUBTITLE_LANGUAGE, 0) def subtitle_download(self): - return self.get_bool(constants.setting.SUBTITLE_DOWNLOAD, False) + return self.get_bool(SETTINGS.SUBTITLE_DOWNLOAD, False) def audio_only(self): - return self.get_bool(constants.setting.AUDIO_ONLY, False) + return self.get_bool(SETTINGS.AUDIO_ONLY, False) def set_subtitle_languages(self, value): - return self.set_int(constants.setting.SUBTITLE_LANGUAGE, value) + return self.set_int(SETTINGS.SUBTITLE_LANGUAGE, value) def set_subtitle_download(self, value): - return self.set_bool(constants.setting.SUBTITLE_DOWNLOAD, value) + return self.set_bool(SETTINGS.SUBTITLE_DOWNLOAD, value) def use_thumbnail_size(self): - size = self.get_int(constants.setting.THUMB_SIZE, 0) + size = self.get_int(SETTINGS.THUMB_SIZE, 0) sizes = {0: 'medium', 1: 'high'} return sizes[size] def safe_search(self): - index = self.get_int(constants.setting.SAFE_SEARCH, 0) + index = self.get_int(SETTINGS.SAFE_SEARCH, 0) values = {0: 'moderate', 1: 'none', 2: 'strict'} return values[index] def age_gate(self): - return self.get_bool(constants.setting.AGE_GATE, True) + return self.get_bool(SETTINGS.AGE_GATE, True) def verify_ssl(self): - verify = self.get_bool(constants.setting.VERIFY_SSL, False) + verify = self.get_bool(SETTINGS.VERIFY_SSL, False) if sys.version_info <= (2, 7, 9): verify = False return verify def allow_dev_keys(self): - return self.get_bool(constants.setting.ALLOW_DEV_KEYS, False) - - def use_dash_videos(self): - if not self.use_dash(): - return False - return self.get_bool(constants.setting.DASH_VIDEOS, False) + return self.get_bool(SETTINGS.ALLOW_DEV_KEYS, False) + + def use_mpd_videos(self): + if self.use_mpd(): + return self.get_bool(SETTINGS.MPD_VIDEOS, False) + return False + + _LIVE_STREAM_TYPES = { + 0: 'mpegts', + 1: 'hls', + 2: 'ia_hls', + 3: 'ia_mpd', + } + + def get_live_stream_type(self): + if self.use_mpd(): + stream_type = self.get_int(SETTINGS.LIVE_STREAMS + '.1', 0) + else: + stream_type = self.get_int(SETTINGS.LIVE_STREAMS + '.2', 0) + return self._LIVE_STREAM_TYPES.get(stream_type) or self._LIVE_STREAM_TYPES[0] - def include_hdr(self): - if self.get_mpd_quality() == 'mp4': - return False - return self.get_bool(constants.setting.DASH_INCL_HDR, False) + def use_adaptive_live_streams(self): + if self.use_mpd(): + return self.get_int(SETTINGS.LIVE_STREAMS + '.1', 0) > 1 + return self.get_int(SETTINGS.LIVE_STREAMS + '.2', 0) > 1 - def use_dash_live_streams(self): - if not self.use_dash(): - return False - return self.get_bool(constants.setting.DASH_LIVE_STREAMS, False) + def use_mpd_live_streams(self): + if self.use_mpd(): + return self.get_int(SETTINGS.LIVE_STREAMS + '.1', 0) == 3 + return False def httpd_port(self): - return self.get_int(constants.setting.HTTPD_PORT, 50152) + return self.get_int(SETTINGS.HTTPD_PORT, 50152) - def httpd_listen(self): - ip_address = self.get_string(constants.setting.HTTPD_LISTEN, '0.0.0.0') + def httpd_listen(self, default='0.0.0.0', for_request=False): + ip_address = self.get_string(SETTINGS.HTTPD_LISTEN, default) try: ip_address = ip_address.strip() except AttributeError: pass if not ip_address: - ip_address = '0.0.0.0' + ip_address = default + if for_request and ip_address == default: + ip_address = '127.0.0.1' return ip_address def set_httpd_listen(self, value): - return self.set_string(constants.setting.HTTPD_LISTEN, value) + return self.set_string(SETTINGS.HTTPD_LISTEN, value) def httpd_whitelist(self): - return self.get_string(constants.setting.HTTPD_WHITELIST, '') + return self.get_string(SETTINGS.HTTPD_WHITELIST, '') def api_config_page(self): - return self.get_bool(constants.setting.API_CONFIG_PAGE, False) + return self.get_bool(SETTINGS.API_CONFIG_PAGE, False) def get_location(self): - location = self.get_string(constants.setting.LOCATION, '').replace(' ', '').strip() + location = self.get_string(SETTINGS.LOCATION, '').replace(' ', '').strip() coords = location.split(',') latitude = longitude = None if len(coords) == 2: @@ -193,59 +209,60 @@ def get_location(self): return '' def set_location(self, value): - self.set_string(constants.setting.LOCATION, value) + self.set_string(SETTINGS.LOCATION, value) def get_location_radius(self): - return ''.join([str(self.get_int(constants.setting.LOCATION_RADIUS, 500)), 'km']) + return ''.join([str(self.get_int(SETTINGS.LOCATION_RADIUS, 500)), 'km']) def get_play_count_min_percent(self): - return self.get_int(constants.setting.PLAY_COUNT_MIN_PERCENT, 0) - - def use_playback_history(self): - return self.get_bool(constants.setting.USE_PLAYBACK_HISTORY, False) - - @staticmethod - def __get_mpd_quality_map(): - return { - 0: 240, - 1: 360, - 2: 480, - 3: 720, - 4: 1080, - 5: 1440, - 6: 2160, - 7: 4320, - 8: 'mp4', - 9: 'webm' - } - - def get_mpd_quality(self): - quality_map = self.__get_mpd_quality_map() - quality_enum = self.get_int(constants.setting.MPD_QUALITY_SELECTION, 8) - return quality_map.get(quality_enum, 'mp4') - - def mpd_video_qualities(self): - if not self.use_dash_videos(): + return self.get_int(SETTINGS.PLAY_COUNT_MIN_PERCENT, 0) + + def use_local_history(self): + return self.get_bool(SETTINGS.USE_LOCAL_HISTORY, False) + + def use_remote_history(self): + return self.get_bool(SETTINGS.USE_REMOTE_HISTORY, False) + + # Selections based on max width and min height at common (utra-)wide aspect ratios + _QUALITY_SELECTIONS = { # Setting | Resolution + 7: {'width': 7680, 'height': 3148, 'label': '4320p{0} (8K){1}'}, # 7 | 4320p 8K + 6: {'width': 3840, 'height': 1080, 'label': '2160p{0} (4K){1}'}, # 6 | 2160p 4K + 5: {'width': 2560, 'height': 984, 'label': '1440p{0} (QHD){1}'}, # 5 | 1440p 2.5K / QHD + 4.1: {'width': 2048, 'height': 858, 'label': '1152p{0} (2K){1}'}, # N/A | 1152p 2K / QWXGA + 4: {'width': 1920, 'height': 787, 'label': '1080p{0} (FHD){1}'}, # 4 | 1080p FHD + 3: {'width': 1280, 'height': 525, 'label': '720p{0} (HD){1}'}, # 3 | 720p HD + 2: {'width': 854, 'height': 350, 'label': '480p{0}{1}'}, # 2 | 480p + 1: {'width': 640, 'height': 263, 'label': '360p{0}{1}'}, # 1 | 360p + 0: {'width': 426, 'height': 175, 'label': '240p{0}{1}'}, # 0 | 240p + -1: {'width': 256, 'height': 105, 'label': '144p{0}{1}'}, # N/A | 144p + -2: {'width': 0, 'height': 0, 'label': '{2}p{0}{1}'}, # N/A | Custom + } + + def get_mpd_video_qualities(self): + if not self.use_mpd_videos(): return [] + selected = self.get_int(SETTINGS.MPD_QUALITY_SELECTION, 4) + return [quality for key, quality in self._QUALITY_SELECTIONS.items() + if selected >= key] - quality = self.get_mpd_quality() - - if not isinstance(quality, int): - return quality + def stream_features(self): + return self.get_string(SETTINGS.MPD_STREAM_FEATURES, '').split(',') - quality_map = self.__get_mpd_quality_map() - qualities = sorted([x for x in list(quality_map.values()) - if isinstance(x, int) and x <= quality], reverse=True) + _STREAM_SELECT = { + 1: 'auto', + 2: 'list', + 3: 'auto+list', + } - return qualities - - def mpd_30fps_limit(self): - if self.include_hdr() or isinstance(self.get_mpd_quality(), str): - return False - return self.get_bool(constants.setting.MPD_30FPS_LIMIT, False) + def stream_select(self): + select_type = self.get_int(SETTINGS.MPD_STREAM_SELECT, 1) + return self._STREAM_SELECT.get(select_type) or self._STREAM_SELECT[1] def remote_friendly_search(self): - return self.get_bool(constants.setting.REMOTE_FRIENDLY_SEARCH, False) + return self.get_bool(SETTINGS.REMOTE_FRIENDLY_SEARCH, False) def hide_short_videos(self): - return self.get_bool(constants.setting.HIDE_SHORT_VIDEOS, False) + return self.get_bool(SETTINGS.HIDE_SHORT_VIDEOS, False) + + def client_selection(self): + return self.get_int(SETTINGS.CLIENT_SELECTION, 0) diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_context.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_context.py index dd000aa982..03b9cee76a 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_context.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_context.py @@ -8,13 +8,15 @@ See LICENSES/GPL-2.0-only for more information. """ -from six.moves import urllib - import datetime import json import os import sys import weakref +from urllib.parse import quote +from urllib.parse import unquote +from urllib.parse import urlparse +from urllib.parse import parse_qsl import xbmc import xbmcaddon @@ -51,8 +53,8 @@ def __init__(self, path='/', params=None, plugin_name='', plugin_id='', override # first the path of the uri if override: self._uri = sys.argv[0] - comps = urllib.parse.urlparse(self._uri) - self._path = urllib.parse.unquote(comps.path) + comps = urlparse(self._uri) + self._path = unquote(comps.path) # after that try to get the params if len(sys.argv) > 2: @@ -61,7 +63,7 @@ def __init__(self, path='/', params=None, plugin_name='', plugin_id='', override self._uri = '?'.join([self._uri, params]) self._params = {} - params = dict(urllib.parse.parse_qsl(params)) + params = dict(parse_qsl(params)) for _param in params: item = params[_param] self._params[_param] = item @@ -135,6 +137,11 @@ def get_language(self): return 'en-US' + def get_language_name(self, lang_id=None): + if lang_id is None: + lang_id = self.get_language() + return xbmc.convertLanguage(lang_id, xbmc.ENGLISH_NAME).split(';')[0] + def get_video_playlist(self): if not self._video_playlist: self._video_playlist = XbmcPlaylist('video', weakref.proxy(self)) @@ -276,56 +283,63 @@ def set_addon_enabled(self, addon_id, enabled=True): def send_notification(self, method, data): data = json.dumps(data) self.log_debug('send_notification: |%s| -> |%s|' % (method, data)) - data = '\\"[\\"%s\\"]\\"' % urllib.parse.quote(data) + data = '\\"[\\"%s\\"]\\"' % quote(data) self.execute('NotifyAll(plugin.video.youtube,%s,%s)' % (method, data)) def use_inputstream_adaptive(self): - addon_enabled = self.addon_enabled('inputstream.adaptive') - if self._settings.use_dash() and not addon_enabled: - if self.get_ui().on_yes_no_input(self.get_name(), self.localize(30579)): - use_dash = self.set_addon_enabled('inputstream.adaptive') + if self._settings.use_mpd_videos() or self._settings.use_adaptive_live_streams(): + if self.addon_enabled('inputstream.adaptive'): + success = True + elif self.get_ui().on_yes_no_input(self.get_name(), self.localize(30579)): + success = self.set_addon_enabled('inputstream.adaptive') else: - use_dash = False - elif self._settings.use_dash() and addon_enabled: - use_dash = True + success = False else: - use_dash = False - return use_dash + success = False + return success + + # Values of capability map can be any of the following: + # - required version number as string for comparison with actual installed InputStream.Adaptive version + # - any Falsey value to exclude capability regardless of version + # - True to include capability regardless of version + _IA_CAPABILITIES = { + 'live': '2.0.12', + 'drm': '2.2.12', + # audio codecs + 'vorbis': '2.3.14', + 'opus': '19.0.7', + 'mp4a': True, + 'ac-3': '2.1.15', + 'ec-3': '2.1.15', + 'dts': '2.1.15', + # video codecs + 'avc1': True, + 'av01': '20.3.0', + 'vp8': False, + 'vp9': '2.3.14', + } def inputstream_adaptive_capabilities(self, capability=None): # return a list inputstream.adaptive capabilities, if capability set return version required - capabilities = [] - - use_dash = self.use_inputstream_adaptive() try: inputstream_version = xbmcaddon.Addon('inputstream.adaptive').getAddonInfo('version') except RuntimeError: inputstream_version = '' - if not use_dash or not inputstream_version: - return None if capability is not None else capabilities - - capability_map = { - 'live': '2.0.12', - 'drm': '2.2.12', - 'vp9': '2.3.14', - 'vp9.2': '2.3.14', - 'vorbis': None, - 'opus': '19.0.7', - 'av1': '20.3.0', - } + if not self.use_inputstream_adaptive() or not inputstream_version: + return frozenset() if capability is None else None + ia_loose_version = utils.loose_version(inputstream_version) if capability is None: - ia_loose_version = utils.loose_version(inputstream_version) - - for key in list(capability_map.keys()): - if capability_map[key] and (ia_loose_version >= utils.loose_version(capability_map[key])): - capabilities.append(key) - + capabilities = frozenset( + capability for capability, version in self._IA_CAPABILITIES.items() + if version is True + or version and ia_loose_version >= utils.loose_version(version) + ) return capabilities - else: - return capability_map[capability] if capability_map.get(capability) else None + version = self._IA_CAPABILITIES.get(capability) + return version is True or version and ia_loose_version >= utils.loose_version(version) def inputstream_adaptive_auto_stream_selection(self): try: diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_context_ui.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_context_ui.py index 49c9507486..147d4e5ebc 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_context_ui.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_context_ui.py @@ -8,8 +8,6 @@ See LICENSES/GPL-2.0-only for more information. """ -from six import PY3 - import xbmc import xbmcgui @@ -85,11 +83,8 @@ def on_delete_content(self, content_name): def on_select(self, title, items=None): if items is None: items = [] - major_version = self._context.get_system_version().get_version()[0] - if isinstance(items[0], tuple) and len(items[0]) == 4 and major_version <= 16: - items = [(item[0], item[2]) for item in items] - use_details = (isinstance(items[0], tuple) and len(items[0]) == 4 and major_version > 16) + use_details = (isinstance(items[0], tuple) and len(items[0]) == 4) _dict = {} _items = [] @@ -128,7 +123,7 @@ def show_notification(self, message, header='', image_uri='', time_milliseconds= if not _image: _image = self._context.get_icon() - if PY3 and isinstance(message, str): + if isinstance(message, str): message = utils.to_unicode(message) try: diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_items.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_items.py index 0112878578..1ab8430260 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_items.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_items.py @@ -10,6 +10,22 @@ import xbmcgui +try: + from infotagger.listitem import ListItemInfoTag +except ImportError: + class ListItemInfoTag: + __slots__ = (__li__, ) + + def __init__(self, list_item): + self.__li__ = list_item + + def add_stream_info(self, *args, **kwargs): + return self.__li__.addStreamInfo(*args, **kwargs) + + def set_info(self, *args, **kwargs): + return self.__li__.setInfo(*args, **kwargs) + + from ...items import VideoItem, AudioItem, UriItem from ... import utils from . import info_labels @@ -18,9 +34,8 @@ def to_play_item(context, play_item): context.log_debug('Converting PlayItem |%s|' % play_item.get_uri()) - major_version = context.get_system_version().get_version()[0] - is_strm = str(context.get_param('strm', False)).lower() == 'true' and major_version >= 18 + is_strm = str(context.get_param('strm', False)).lower() == 'true' thumb = play_item.get_image() if play_item.get_image() else u'DefaultVideo.png' title = play_item.get_title() if play_item.get_title() else play_item.get_name() @@ -28,43 +43,58 @@ def to_play_item(context, play_item): settings = context.get_settings() if is_strm: list_item = xbmcgui.ListItem(offscreen=True) - elif major_version > 17: - list_item = xbmcgui.ListItem(label=utils.to_unicode(title), offscreen=True) else: - list_item = xbmcgui.ListItem(label=utils.to_unicode(title)) - if major_version >= 20: - from ....external.listitem import ListItemInfoTag - info_tag = ListItemInfoTag(list_item, tag_type='video') + list_item = xbmcgui.ListItem(label=utils.to_unicode(title), offscreen=True) + + info_tag = ListItemInfoTag(list_item, tag_type='video') if not is_strm: list_item.setProperty('IsPlayable', 'true') if play_item.get_fanart() and settings.show_fanart(): fanart = play_item.get_fanart() - if major_version <= 15: - list_item.setArt({'thumb': thumb, 'fanart': fanart}) - list_item.setIconImage(thumb) - else: - list_item.setArt({'icon': thumb, 'thumb': thumb, 'fanart': fanart}) - if not play_item.use_dash() and not settings.is_support_alternative_player_enabled() and \ - play_item.get_headers() and play_item.get_uri().startswith('http') and major_version < 20: - play_item.set_uri('|'.join([play_item.get_uri(), play_item.get_headers()])) + list_item.setArt({'icon': thumb, 'thumb': thumb, 'fanart': fanart}) if settings.is_support_alternative_player_enabled() and \ settings.alternative_player_web_urls() and \ not play_item.get_license_key(): play_item.set_uri('https://www.youtube.com/watch?v={video_id}'.format(video_id=play_item.video_id)) - if play_item.use_dash() and context.addon_enabled('inputstream.adaptive'): - inputstream_property = 'inputstream' - if major_version < 19: - inputstream_property += 'addon' - + ia_enabled = context.addon_enabled('inputstream.adaptive') + + if ia_enabled and play_item.use_mpd_video() and not play_item.live: list_item.setContentLookup(False) list_item.setMimeType('application/xml+dash') - list_item.setProperty(inputstream_property, 'inputstream.adaptive') + list_item.setProperty('inputstream', 'inputstream.adaptive') list_item.setProperty('inputstream.adaptive.manifest_type', 'mpd') + if 'auto' in settings.stream_select(): + list_item.setProperty('inputstream.adaptive.stream_selection_type', 'adaptive') + + if play_item.get_headers(): + list_item.setProperty('inputstream.adaptive.manifest_headers', play_item.get_headers()) + list_item.setProperty('inputstream.adaptive.stream_headers', play_item.get_headers()) + + if play_item.get_license_key(): + list_item.setProperty('inputstream.adaptive.license_type', 'com.widevine.alpha') + list_item.setProperty('inputstream.adaptive.license_key', play_item.get_license_key()) + + elif ia_enabled and play_item.live and settings.use_adaptive_live_streams(): + if settings.use_mpd_live_streams(): + manifest_type = 'mpd' + mime_type = 'application/xml+dash' + # MPD manifest update is currently broken + # Following line will force a full update but restart live stream from start + # list_item.setProperty('inputstream.adaptive.manifest_update_parameter', 'full') + else: + manifest_type = 'hls' + mime_type = 'application/x-mpegURL' + + list_item.setContentLookup(False) + list_item.setMimeType(mime_type) + list_item.setProperty('inputstream', 'inputstream.adaptive') + list_item.setProperty('inputstream.adaptive.manifest_type', manifest_type) + if play_item.get_headers(): list_item.setProperty('inputstream.adaptive.manifest_headers', play_item.get_headers()) list_item.setProperty('inputstream.adaptive.stream_headers', play_item.get_headers()) @@ -72,6 +102,7 @@ def to_play_item(context, play_item): if play_item.get_license_key(): list_item.setProperty('inputstream.adaptive.license_type', 'com.widevine.alpha') list_item.setProperty('inputstream.adaptive.license_key', play_item.get_license_key()) + else: uri = play_item.get_uri() if 'mime=' in uri: @@ -98,38 +129,27 @@ def to_play_item(context, play_item): # This should work for all versions of XBMC/KODI. if 'duration' in _info_labels: duration = _info_labels['duration'] - del _info_labels['duration'] - func = info_tag.add_stream_info if major_version >= 20 else list_item.addStreamInfo - func('video', {'duration': duration}) + info_tag.add_stream_info('video', {'duration': duration}) + + info_tag.set_info(_info_labels) - if major_version >= 20: - info_tag.set_info(_info_labels) - else: - list_item.setInfo(type='video', infoLabels=_info_labels) return list_item def to_video_item(context, video_item): context.log_debug('Converting VideoItem |%s|' % video_item.get_uri()) - major_version = context.get_system_version().get_version()[0] thumb = video_item.get_image() if video_item.get_image() else u'DefaultVideo.png' title = video_item.get_title() if video_item.get_title() else video_item.get_name() fanart = '' settings = context.get_settings() - if major_version > 17: - item = xbmcgui.ListItem(label=utils.to_unicode(title), offscreen=True) - else: - item = xbmcgui.ListItem(label=utils.to_unicode(title)) - if major_version >= 20: - from ....external.listitem import ListItemInfoTag - info_tag = ListItemInfoTag(item, tag_type='video') + + item = xbmcgui.ListItem(label=utils.to_unicode(title), offscreen=True) + info_tag = ListItemInfoTag(item, tag_type='video') + if video_item.get_fanart() and settings.show_fanart(): fanart = video_item.get_fanart() - if major_version <= 15: - item.setArt({'thumb': thumb, 'fanart': fanart}) - item.setIconImage(thumb) - else: - item.setArt({'icon': thumb, 'thumb': thumb, 'fanart': fanart}) + + item.setArt({'icon': thumb, 'thumb': thumb, 'fanart': fanart}) if video_item.get_context_menu() is not None: item.addContextMenuItems(video_item.get_context_menu(), replaceItems=video_item.replace_context_menu()) @@ -160,14 +180,9 @@ def to_video_item(context, video_item): # This should work for all versions of XBMC/KODI. if 'duration' in _info_labels: duration = _info_labels['duration'] - del _info_labels['duration'] - func = info_tag.add_stream_info if major_version >= 20 else item.addStreamInfo - func('video', {'duration': duration}) + info_tag.add_stream_info('video', {'duration': duration}) - if major_version >= 20: - info_tag.set_info(_info_labels) - else: - item.setInfo(type='video', infoLabels=_info_labels) + info_tag.set_info(_info_labels) if video_item.get_channel_id(): # make channel_id property available for keymapping item.setProperty('channel_id', video_item.get_channel_id()) @@ -186,45 +201,30 @@ def to_video_item(context, video_item): def to_audio_item(context, audio_item): context.log_debug('Converting AudioItem |%s|' % audio_item.get_uri()) - major_version = context.get_system_version().get_version()[0] thumb = audio_item.get_image() if audio_item.get_image() else u'DefaultAudio.png' title = audio_item.get_name() fanart = '' settings = context.get_settings() - if major_version > 17: - item = xbmcgui.ListItem(label=utils.to_unicode(title), offscreen=True) - else: - item = xbmcgui.ListItem(label=utils.to_unicode(title)) - if major_version >= 20: - from ....external.listitem import ListItemInfoTag - info_tag = ListItemInfoTag(item, tag_type='music') + item = xbmcgui.ListItem(label=utils.to_unicode(title), offscreen=True) + + info_tag = ListItemInfoTag(item, tag_type='music') if audio_item.get_fanart() and settings.show_fanart(): fanart = audio_item.get_fanart() - if major_version <= 15: - item.setArt({'thumb': thumb, 'fanart': fanart}) - item.setIconImage(thumb) - else: - item.setArt({'icon': thumb, 'thumb': thumb, 'fanart': fanart}) + + item.setArt({'icon': thumb, 'thumb': thumb, 'fanart': fanart}) if audio_item.get_context_menu() is not None: item.addContextMenuItems(audio_item.get_context_menu(), replaceItems=audio_item.replace_context_menu()) item.setProperty('IsPlayable', 'true') - if major_version >= 20: - info_tag.set_info(info_labels.create_from_item(audio_item)) - else: - item.setInfo(type='music', infoLabels=info_labels.create_from_item(audio_item)) + info_tag.set_info(info_labels.create_from_item(audio_item)) return item def to_uri_item(context, base_item): context.log_debug('Converting UriItem') - major_version = context.get_system_version().get_version()[0] - if major_version > 17: - item = xbmcgui.ListItem(path=base_item.get_uri(), offscreen=True) - else: - item = xbmcgui.ListItem(path=base_item.get_uri()) + item = xbmcgui.ListItem(path=base_item.get_uri(), offscreen=True) item.setProperty('IsPlayable', 'true') return item diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_progress_dialog.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_progress_dialog.py index 879f2916cb..5aa6535d47 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_progress_dialog.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_progress_dialog.py @@ -8,8 +8,6 @@ See LICENSES/GPL-2.0-only for more information. """ -from six import string_types - import xbmcgui from ..abstract_progress_dialog import AbstractProgressDialog @@ -33,7 +31,7 @@ def update(self, steps=1, text=None): self._position += steps position = int(float((100.0 // self._total)) * self._position) - if isinstance(text, string_types): + if isinstance(text, str): self._dialog.update(position, text) else: self._dialog.update(position) diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_progress_dialog_bg.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_progress_dialog_bg.py index 2fe5e68daf..be9b4d0aee 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_progress_dialog_bg.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_progress_dialog_bg.py @@ -8,8 +8,6 @@ See LICENSES/GPL-2.0-only for more information. """ -from six import string_types - import xbmcgui from ..abstract_progress_dialog import AbstractProgressDialog @@ -33,7 +31,7 @@ def update(self, steps=1, text=None): self._position += steps position = int((100.0 / float(self._total)) * float(self._position)) - if isinstance(text, string_types): + if isinstance(text, str): self._dialog.update(percent=position, message=text) else: self._dialog.update(percent=position) diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_runner.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_runner.py index 9f69f4c16b..46fda8a722 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_runner.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_runner.py @@ -88,36 +88,25 @@ def _set_resolved_url(self, context, base_item, succeeded=True): """ def _add_directory(self, context, directory_item, item_count=0): - major_version = context.get_system_version().get_version()[0] - art = {'icon': 'DefaultFolder.png', 'thumb': directory_item.get_image()} - if major_version > 17: - item = xbmcgui.ListItem(label=directory_item.get_name(), offscreen=True) - else: - item = xbmcgui.ListItem(label=directory_item.get_name()) - if major_version >= 20: - from ....external.listitem import ListItemInfoTag - info_tag = ListItemInfoTag(item, tag_type='video') + item = xbmcgui.ListItem(label=directory_item.get_name(), offscreen=True) + + info_tag = xbmc_items.ListItemInfoTag(item, tag_type='video') # only set fanart is enabled if directory_item.get_fanart() and self.settings.show_fanart(): art['fanart'] = directory_item.get_fanart() - if major_version <= 15: - item.setArt(art) - item.setIconImage(art['icon']) - else: - item.setArt(art) + + item.setArt(art) if directory_item.get_context_menu() is not None: item.addContextMenuItems(directory_item.get_context_menu(), replaceItems=directory_item.replace_context_menu()) - if major_version >= 20: - info_tag.set_info(info_labels.create_from_item(directory_item)) - else: - item.setInfo(type='video', infoLabels=info_labels.create_from_item(directory_item)) + + info_tag.set_info(info_labels.create_from_item(directory_item)) item.setPath(directory_item.get_uri()) is_folder = True @@ -146,24 +135,15 @@ def _add_video(self, context, video_item, item_count=0): totalItems=item_count) def _add_image(self, context, image_item, item_count): - major_version = context.get_system_version().get_version()[0] - art = {'icon': 'DefaultPicture.png', 'thumb': image_item.get_image()} - if major_version > 17: - item = xbmcgui.ListItem(label=image_item.get_name(), offscreen=True) - else: - item = xbmcgui.ListItem(label=image_item.get_name()) + item = xbmcgui.ListItem(label=image_item.get_name(), offscreen=True) if image_item.get_fanart() and self.settings.show_fanart(): art['fanart'] = image_item.get_fanart() - if major_version <= 15: - item.setArt(art) - item.setIconImage(art['icon']) - else: - item.setArt(art) + item.setArt(art) if image_item.get_context_menu() is not None: item.addContextMenuItems(image_item.get_context_menu(), replaceItems=image_item.replace_context_menu()) diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/items/audio_item.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/items/audio_item.py index ecd678f526..33e5c530d7 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/items/audio_item.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/items/audio_item.py @@ -10,14 +10,7 @@ from .base_item import BaseItem -try: - from six.moves import html_parser - - unescape = html_parser.HTMLParser().unescape -except AttributeError: - import html - - unescape = html.unescape +from html import unescape class AudioItem(BaseItem): diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/items/base_item.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/items/base_item.py index 265796ad04..0385052ab8 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/items/base_item.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/items/base_item.py @@ -8,23 +8,13 @@ See LICENSES/GPL-2.0-only for more information. """ -from six import python_2_unicode_compatible -from six import string_types import hashlib import datetime -try: - from six.moves import html_parser +from html import unescape - unescape = html_parser.HTMLParser().unescape -except AttributeError: - import html - unescape = html.unescape - - -@python_2_unicode_compatible class BaseItem(object): VERSION = 3 INFO_DATE = 'date' # (string) iso 8601 @@ -74,7 +64,7 @@ def get_name(self): return self._name def set_uri(self, uri): - if isinstance(uri, string_types): + if isinstance(uri, str): self._uri = uri else: self._uri = '' diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/items/utils.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/items/utils.py index e7bbbbf73e..db7f235a43 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/items/utils.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/items/utils.py @@ -8,8 +8,6 @@ See LICENSES/GPL-2.0-only for more information. """ -from six import string_types - import json from .video_item import VideoItem @@ -48,7 +46,7 @@ def _from_json(_json_data): return item - if isinstance(json_data, string_types): + if isinstance(json_data, str): json_data = json.loads(json_data) return _from_json(json_data) diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/items/video_item.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/items/video_item.py index f779bef112..7d19fd4d95 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/items/video_item.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/items/video_item.py @@ -13,14 +13,7 @@ from .base_item import BaseItem -try: - from six.moves import html_parser - - unescape = html_parser.HTMLParser().unescape -except AttributeError: - import html - - unescape = html.unescape +from html import unescape __RE_IMDB__ = re.compile(r'(http(s)?://)?www.imdb.(com|de)/title/(?P[t0-9]+)(/)?') @@ -47,7 +40,7 @@ def __init__(self, name, uri, image=u'', fanart=u''): self._studio = None self._artist = None self._play_count = None - self._uses_dash = None + self._uses_mpd = None self._mediatype = None self._last_played = None self._start_percent = None @@ -234,11 +227,11 @@ def set_date_from_datetime(self, date_time): def get_date(self): return self._date - def set_use_dash(self, value=True): - self._uses_dash = value + def set_use_mpd_video(self, value=True): + self._uses_mpd = value - def use_dash(self): - return self._uses_dash is True and ('manifest/dash' in self.get_uri() or self.get_uri().endswith('.mpd')) + def use_mpd_video(self): + return self._uses_mpd is True and ('manifest/dash' in self.get_uri() or self.get_uri().endswith('.mpd')) def set_mediatype(self, mediatype): self._mediatype = mediatype diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/__init__.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/__init__.py index 20e9597e5c..717fb4dc29 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/__init__.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/__init__.py @@ -9,7 +9,6 @@ """ from . import datetime_parser -from .methods import loose_version from .methods import * from .search_history import SearchHistory from .favorite_list import FavoriteList diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/data_cache.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/data_cache.py index b3fd9ef2c1..62ced2269e 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/data_cache.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/data_cache.py @@ -8,11 +8,8 @@ See LICENSES/GPL-2.0-only for more information. """ -from six import PY2 -# noinspection PyPep8Naming -from six.moves import cPickle as pickle - import json +import pickle import sqlite3 from datetime import datetime, timedelta @@ -37,8 +34,6 @@ def is_empty(self): def get_items(self, seconds, content_ids): def _decode(obj): - if PY2: - obj = str(obj) return pickle.loads(obj) current_time = datetime.now() diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/datetime_parser.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/datetime_parser.py index 3b3de8164c..41b7bf4c1d 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/datetime_parser.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/datetime_parser.py @@ -13,9 +13,6 @@ from datetime import date, datetime, timedelta from datetime import time as dt_time -from six import PY2 -from six import text_type - from ..exceptions import KodionException __RE_MATCH_TIME_ONLY__ = re.compile(r'^(?P[0-9]{2})([:]?(?P[0-9]{2})([:]?(?P[0-9]{2}))?)?$') @@ -28,11 +25,7 @@ def py2_utf8(text): - result = text - if PY2 and isinstance(result, text_type): - return result.encode('utf-8', 'ignore') - - return result + return text def parse(datetime_string, localize=True): diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/http_server.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/http_server.py index 1066636bb5..522e5a8300 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/http_server.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/http_server.py @@ -7,15 +7,14 @@ See LICENSES/GPL-2.0-only for more information. """ -from six.moves import BaseHTTPServer -from six.moves.urllib.parse import parse_qs, urlparse -from six.moves import range - import json import os import re import requests import socket +from http import server as BaseHTTPServer +from urllib.parse import parse_qs +from urllib.parse import urlparse import xbmc import xbmcaddon @@ -64,7 +63,7 @@ def connection_allowed(self): # noinspection PyPep8Naming def do_GET(self): addon = xbmcaddon.Addon('plugin.video.youtube') - dash_proxy_enabled = addon.getSetting('kodion.mpd.videos') == 'true' and addon.getSetting('kodion.video.quality.mpd') == 'true' + mpd_proxy_enabled = addon.getSetting('kodion.mpd.videos') == 'true' and addon.getSetting('kodion.video.quality.mpd') == 'true' api_config_enabled = addon.getSetting('youtube.api.config.page') == 'true' # Strip trailing slash if present @@ -79,12 +78,12 @@ def do_GET(self): self.wfile.write(client_json.encode('utf-8')) if stripped_path != '/ping': - logger.log_debug('HTTPServer: Request uri path |{proxy_path}|'.format(proxy_path=self.path)) + logger.log_debug('HTTPServer: GET Request uri path |{proxy_path}|'.format(proxy_path=self.path)) if not self.connection_allowed(): self.send_error(403) else: - if dash_proxy_enabled and self.path.endswith('.mpd'): + if mpd_proxy_enabled and self.path.endswith('.mpd'): file_path = os.path.join(self.base_path, self.path.strip('/').strip('\\')) file_chunk = True logger.log_debug('HTTPServer: Request file path |{file_path}|'.format(file_path=file_path.encode('utf-8'))) @@ -166,14 +165,14 @@ def do_GET(self): # noinspection PyPep8Naming def do_HEAD(self): - logger.log_debug('HTTPServer: Request uri path |{proxy_path}|'.format(proxy_path=self.path)) + logger.log_debug('HTTPServer: HEAD Request uri path |{proxy_path}|'.format(proxy_path=self.path)) if not self.connection_allowed(): self.send_error(403) else: addon = xbmcaddon.Addon('plugin.video.youtube') - dash_proxy_enabled = addon.getSetting('kodion.mpd.videos') == 'true' and addon.getSetting('kodion.video.quality.mpd') == 'true' - if dash_proxy_enabled and self.path.endswith('.mpd'): + mpd_proxy_enabled = addon.getSetting('kodion.mpd.videos') == 'true' and addon.getSetting('kodion.video.quality.mpd') == 'true' + if mpd_proxy_enabled and self.path.endswith('.mpd'): file_path = os.path.join(self.base_path, self.path.strip('/').strip('\\')) if not os.path.isfile(file_path): response = 'File Not Found: |{proxy_path}| -> |{file_path}|'.format(proxy_path=self.path, file_path=file_path.encode('utf-8')) @@ -471,7 +470,7 @@ def get_http_server(address=None, port=None): except socket.error as e: logger.log_debug('HTTPServer: Failed to start |{address}:{port}| |{response}|'.format(address=address, port=port, response=str(e))) xbmcgui.Dialog().notification(addon.getAddonInfo('name'), str(e), - "{}/icon.png".format(addon.getAddonInfo('path')), + addon.getAddonInfo('icon'), 5000, False) return None diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/methods.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/methods.py index f9f1a41bb7..5a0738c639 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/methods.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/methods.py @@ -8,15 +8,10 @@ See LICENSES/GPL-2.0-only for more information. """ -from six.moves import urllib -from six import PY2 -from six import next -from six import string_types -from six import text_type - import os import copy import re +from urllib.parse import quote from ..constants import localize @@ -43,15 +38,12 @@ def loose_version(v): def to_str(text): if isinstance(text, bytes): return text.decode('utf-8', 'ignore') - if PY2 and isinstance(text, text_type): - return text.encode('utf-8', 'ignore') - return text def to_utf8(text): result = text - if isinstance(text, string_types): + if isinstance(text, str): try: result = text.encode('utf-8', 'ignore') except UnicodeDecodeError: @@ -62,7 +54,7 @@ def to_utf8(text): def to_unicode(text): result = text - if isinstance(text, string_types) or isinstance(text, bytes): + if isinstance(text, str) or isinstance(text, bytes): try: result = text.decode('utf-8', 'ignore') except (AttributeError, UnicodeEncodeError): @@ -100,19 +92,20 @@ def find_best_fit(data, compare_method=None): def select_stream(context, stream_data_list, quality_map_override=None, ask_for_quality=None, audio_only=None): # sort - best stream first def _sort_stream_data(_stream_data): - return _stream_data.get('sort', 0) + return _stream_data.get('sort', (0, 0)) settings = context.get_settings() - use_dash = settings.use_dash() + use_adaptive = context.use_inputstream_adaptive() ask_for_quality = context.get_settings().ask_for_video_quality() if ask_for_quality is None else ask_for_quality video_quality = settings.get_video_quality(quality_map_override=quality_map_override) audio_only = audio_only if audio_only is not None else settings.audio_only() + adaptive_live = settings.use_adaptive_live_streams() and context.inputstream_adaptive_capabilities('live') if not ask_for_quality: stream_data_list = [item for item in stream_data_list - if ((item['container'] != 'mpd') or - ((item['container'] == 'mpd') and - (item.get('dash/video', False))))] + if (item['container'] not in {'mpd', 'hls'} or + item.get('hls/video') or + item.get('dash/video'))] if not ask_for_quality and audio_only: # check for live stream, audio only not supported context.log_debug('Select stream: Audio only') @@ -124,43 +117,31 @@ def _sort_stream_data(_stream_data): if not ask_for_quality and audio_only: audio_stream_data_list = [item for item in stream_data_list - if (item.get('dash/audio', False) and - not item.get('dash/video', False))] + if (item.get('dash/audio') and + not item.get('dash/video') and + not item.get('hls/video'))] if audio_stream_data_list: - use_dash = False + use_adaptive = False stream_data_list = audio_stream_data_list else: context.log_debug('Select stream: Audio only, no audio only streams found') - dash_live = settings.use_dash_live_streams() and 'live' in context.inputstream_adaptive_capabilities() - dash_videos = settings.use_dash_videos() - - if use_dash and any([item['container'] == 'mpd' for item in stream_data_list]): - use_dash = context.use_inputstream_adaptive() - - if not use_dash: - stream_data_list = [item for item in stream_data_list if (item['container'] != 'mpd')] - else: - if not dash_live: - stream_data_list = [item for item in stream_data_list - if ((item['container'] != 'mpd') or - ((item['container'] == 'mpd') and - (item.get('Live') is not True)))] - - if not dash_videos: - stream_data_list = [item for item in stream_data_list - if ((item['container'] != 'mpd') or - ((item['container'] == 'mpd') and - (item.get('Live') is True)))] + if not adaptive_live: + stream_data_list = [item for item in stream_data_list + if (item['container'] != 'mpd' or + not item.get('Live'))] + elif not use_adaptive: + stream_data_list = [item for item in stream_data_list + if item['container'] != 'mpd'] def _find_best_fit_video(_stream_data): if audio_only: - return video_quality - _stream_data.get('sort', [0, 0])[0] + return video_quality - _stream_data.get('sort', (0, 0))[0] else: return video_quality - _stream_data.get('video', {}).get('height', 0) - sorted_stream_data_list = sorted(stream_data_list, key=_sort_stream_data, reverse=True) + sorted_stream_data_list = sorted(stream_data_list, key=_sort_stream_data) context.log_debug('selectable streams: %d' % len(sorted_stream_data_list)) log_streams = list() @@ -221,7 +202,7 @@ def create_uri_path(*args): uri_path = '/'.join(comps) if uri_path: - return urllib.parse.quote('/%s/' % uri_path) + return quote('/%s/' % uri_path) return '/' diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/monitor.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/monitor.py index 6d793b1a1b..9ca023e79b 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/monitor.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/monitor.py @@ -7,12 +7,11 @@ See LICENSES/GPL-2.0-only for more information. """ -from six.moves.urllib.parse import unquote - import json import os import shutil import threading +from urllib.parse import unquote import xbmc import xbmcaddon diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/playback_history.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/playback_history.py index 38e66fb27c..723f3b1607 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/playback_history.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/playback_history.py @@ -8,12 +8,9 @@ """ import datetime +import pickle import sqlite3 -from six import PY2 -# noinspection PyPep8Naming -from six.moves import cPickle as pickle - from .storage import Storage @@ -26,8 +23,6 @@ def is_empty(self): def get_items(self, keys): def _decode(obj): - if PY2: - obj = str(obj) return pickle.loads(obj) self._open() diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/player.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/player.py index 82933bf688..c8ce052263 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/player.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/player.py @@ -52,8 +52,8 @@ def abort_now(self): def run(self): playing_file = self.playback_json.get('playing_file') play_count = self.playback_json.get('play_count', 0) - use_history = self.playback_json.get('use_history', False) - playback_history = self.playback_json.get('playback_history', False) + use_remote_history = self.playback_json.get('use_remote_history', False) + use_local_history = self.playback_json.get('use_local_history', False) playback_stats = self.playback_json.get('playback_stats') refresh_only = self.playback_json.get('refresh_only', False) try: @@ -101,7 +101,7 @@ def run(self): client = self.provider.get_client(self.context) is_logged_in = self.provider.is_logged_in() - if is_logged_in and report_url and use_history: + if is_logged_in and report_url and use_remote_history: client.update_watch_history(self.video_id, report_url) self.context.log_debug('Playback start reported: |%s|' % self.video_id) @@ -194,7 +194,7 @@ def run(self): self.update_times(last_total_time, last_current_time, last_segment_start, last_percent_complete) break - if is_logged_in and report_url and use_history: + if is_logged_in and report_url and use_remote_history: if first_report or (p_waited >= report_interval): if first_report: first_report = False @@ -239,7 +239,7 @@ def run(self): p_waited += p_wait_time - if is_logged_in and report_url and use_history: + if is_logged_in and report_url and use_remote_history: client.update_watch_history(self.video_id, report_url .format(st=format(self.segment_start, '.3f'), et=format(self.current_time, '.3f'), @@ -268,7 +268,7 @@ def run(self): if self.percent_complete >= settings.get_play_count_min_percent(): play_count = '1' self.current_time = 0.0 - if is_logged_in and report_url and use_history: + if is_logged_in and report_url and use_remote_history: client.update_watch_history(self.video_id, report_url .format(st=format(self.total_time, '.3f'), et=format(self.total_time, '.3f'), @@ -276,7 +276,7 @@ def run(self): self.context.log_debug('Playback reported [%s] @ 100%% state=%s' % (self.video_id, state)) else: - if is_logged_in and report_url and use_history: + if is_logged_in and report_url and use_remote_history: client.update_watch_history(self.video_id, report_url .format(st=format(self.current_time, '.3f'), et=format(self.current_time, '.3f'), @@ -288,7 +288,7 @@ def run(self): refresh_only = True - if playback_history: + if use_local_history: self.context.get_playback_history().update(self.video_id, play_count, self.total_time, self.current_time, self.percent_complete) diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/storage.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/storage.py index 59ca541012..17ba64062e 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/storage.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/storage.py @@ -8,13 +8,9 @@ See LICENSES/GPL-2.0-only for more information. """ -from six import PY2 -from six.moves import range -# noinspection PyPep8Naming -from six.moves import cPickle as pickle - import datetime import os +import pickle import sqlite3 import time import traceback @@ -195,10 +191,7 @@ def _get_ids(self, oldest_first=True): def _get(self, item_id): def _decode(obj): - if PY2: - return pickle.loads(str(obj)) - else: - return pickle.loads(obj, encoding='utf-8') + return pickle.loads(obj, encoding='utf-8') self._open() query = 'SELECT time, value FROM %s WHERE key=?' % self._table_name diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/system_version.py b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/system_version.py index 956f95dcf3..50e24b86a1 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/system_version.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/kodion/utils/system_version.py @@ -8,16 +8,11 @@ See LICENSES/GPL-2.0-only for more information. """ -from six.moves import map -from six import string_types -from six import python_2_unicode_compatible - import json import xbmc -@python_2_unicode_compatible class SystemVersion(object): def __init__(self, version, releasename, appname): if not isinstance(version, tuple): @@ -25,12 +20,12 @@ def __init__(self, version, releasename, appname): else: self._version = version - if not releasename or not isinstance(releasename, string_types): + if not releasename or not isinstance(releasename, str): self._releasename = 'UNKNOWN' else: self._releasename = releasename - if not appname or not isinstance(appname, string_types): + if not appname or not isinstance(appname, str): self._appname = 'UNKNOWN' else: self._appname = appname diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/client/__config__.py b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/client/__config__.py index ca3959ec75..7df58a97bd 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/client/__config__.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/client/__config__.py @@ -209,8 +209,8 @@ def _strip_api_keys(self, api_key, client_id, client_secret): return return_key, return_id, return_secret -notification_data = {'use_httpd': (__settings.use_dash_videos() and - __settings.use_dash()) or +notification_data = {'use_httpd': (__settings.use_mpd_videos() or + __settings.use_mpd_live_streams()) or (__settings.api_config_page()), 'httpd_port': __settings.httpd_port(), 'whitelist': __settings.httpd_whitelist(), diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/client/login_client.py b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/client/login_client.py index 3a65212313..2948c4992f 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/client/login_client.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/client/login_client.py @@ -8,10 +8,11 @@ See LICENSES/GPL-2.0-only for more information. """ -from six.moves import urllib - import time +from urllib.parse import parse_qsl + import requests + from ...youtube.youtube_exceptions import InvalidGrant, LoginException from ...kodion import Context from .__config__ import api, youtube_tv, developer_keys, keys_changed @@ -304,7 +305,7 @@ def authenticate(self, username, password): raise LoginException('Login Failed') lines = result.text.replace('\n', '&') - params = dict(urllib.parse.parse_qsl(lines)) + params = dict(parse_qsl(lines)) token = params.get('Auth', '') expires = int(params.get('Expiry', -1)) if not token or expires == -1: diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/client/youtube.py b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/client/youtube.py index f79e35493f..3657cef021 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/client/youtube.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/client/youtube.py @@ -16,9 +16,9 @@ import xml.etree.ElementTree as ET import requests -from six import PY3 from .login_client import LoginClient +from ..youtube_exceptions import YouTubeException from ..helper.video_info import VideoInfo from ...kodion import Context from ...kodion.utils import datetime_parser @@ -97,7 +97,7 @@ def update_watch_history(self, video_id, url): def get_video_streams(self, context, video_id): video_info = VideoInfo(context, access_token=self._access_token_tv, - api_key=self._config_tv['key'], language=self._language) + language=self._language) video_streams = video_info.load_stream_infos(video_id) @@ -127,9 +127,9 @@ def get_video_streams(self, context, video_id): video_stream['audio']['bitrate']) elif 'audio' in video_stream or 'video' in video_stream: - encoding = video_stream.get('audio', dict()).get('encoding') + encoding = video_stream.get('audio', {}).get('encoding') if not encoding: - encoding = video_stream.get('video', dict()).get('encoding') + encoding = video_stream.get('video', {}).get('encoding') if encoding: title = '%s (%s; %s)' % (context.get_ui().bold(video_stream['title']), video_stream['container'], @@ -628,7 +628,7 @@ def get_related_videos(self, video_id, page_token='', max_results=0): params['pageToken'] = page_token return self.perform_v3_request(method='GET', path='search', params=params) - + def get_parent_comments(self, video_id, page_token='', max_results=0): max_results = self._max_results if max_results <= 0 else max_results @@ -640,9 +640,9 @@ def get_parent_comments(self, video_id, page_token='', max_results=0): 'maxResults': str(max_results)} if page_token: params['pageToken'] = page_token - + return self.perform_v3_request(method='GET', path='commentThreads', params=params, no_login=True) - + def get_child_comments(self, parent_id, page_token='', max_results=0): max_results = self._max_results if max_results <= 0 else max_results @@ -653,7 +653,7 @@ def get_child_comments(self, parent_id, page_token='', max_results=0): 'maxResults': str(max_results)} if page_token: params['pageToken'] = page_token - + return self.perform_v3_request(method='GET', path='comments', params=params, no_login=True) def get_channel_videos(self, channel_id, page_token=''): @@ -822,15 +822,21 @@ def _perform(_page_token, _offset, _result): 'Accept-Language': 'en-US,en;q=0.7,de;q=0.3' } + session = requests.Session() + session.headers = headers + session.verify = self._verify + adapter = requests.adapters.HTTPAdapter(pool_maxsize=5, pool_block=True) + session.mount("https://", adapter) responses = [] def fetch_xml(_url, _responses): try: - _response = requests.get(_url, {}, headers=headers, verify=self._verify, allow_redirects=True) - except: - _response = None + _response = session.get(_url, timeout=(3.05, 27)) + _response.raise_for_status() + except requests.exceptions.RequestException as error: + _context.log_debug('Response: {0}'.format(error.response and error.response.text)) _context.log_error('Failed |%s|' % traceback.print_exc()) - + return _responses.append(_response) threads = [] @@ -844,15 +850,13 @@ def fetch_xml(_url, _responses): thread.start() for thread in threads: - thread.join() + thread.join(30) + session.close() for response in responses: if response: response.encoding = 'utf-8' - if PY3: - xml_data = to_unicode(response.content).replace('\n', '') - else: - xml_data = response.content.replace('\n', '') + xml_data = to_unicode(response.content).replace('\n', '') root = ET.fromstring(xml_data) @@ -861,14 +865,14 @@ def fetch_xml(_url, _responses): media_ns = '{http://search.yahoo.com/mrss/}' for entry in root.findall(ns + "entry"): - # empty news dictionary + # empty news dictionary entry_data = { 'id': entry.find(yt_ns + 'videoId').text, 'title': entry.find(media_ns + "group").find(media_ns + 'title').text, 'channel': entry.find(ns + "author").find(ns + "name").text, 'published': entry.find(ns + 'published').text, } - # append items list + # append items list _result['items'].append(entry_data) # sorting by publish date @@ -1041,64 +1045,68 @@ def _perform(_playlist_idx, _page_token, _offset, _result): return result - def perform_v3_request(self, method='GET', headers=None, path=None, post_data=None, params=None, - allow_redirects=True, no_login=False): - - yt_config = self._config + def _request(self, url, method='GET', + cookies=None, data=None, headers=None, json=None, params=None, + error_msg=None, raise_error=False, timeout=(3.05, 27), **_): + try: + result = requests.request(method, url, + verify=self._verify, + allow_redirects=True, + timeout=timeout, + cookies=cookies, + data=data, + headers=headers, + json=json, + params=params) + result.raise_for_status() + except requests.exceptions.RequestException as error: + response = error.response and error.response.text + _context.log_debug('Response: {0}'.format(response)) + _context.log_error('{0}\n{1}'.format( + error_msg or 'Request failed', traceback.format_exc() + )) + if raise_error: + raise YouTubeException(error_msg) from error + return None + return result - if not yt_config.get('key'): - return { - 'error': - { - 'errors': [{'reason': 'accessNotConfigured'}], - 'message': 'No API keys provided' - } - } + def perform_v3_request(self, method='GET', headers=None, path=None, + post_data=None, params=None, no_login=False): # params - if not params: - params = {} - _params = {'key': yt_config['key']} - _params.update(params) + _params = {} # headers - if not headers: - headers = {} _headers = {'Host': 'www.googleapis.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.36 Safari/537.36', 'Accept-Encoding': 'gzip, deflate'} + # a config can decide if a token is allowed - if self._access_token and yt_config.get('token-allowed', True) and not no_login: + if self._access_token and self._config.get('token-allowed', True) and not no_login: _headers['Authorization'] = 'Bearer %s' % self._access_token - _headers.update(headers) + else: + _params['key'] = self._config_tv['key'] # url _url = 'https://www.googleapis.com/youtube/v3/%s' % path.strip('/') - result = None - log_params = copy.deepcopy(params) - if 'location' in log_params: - log_params['location'] = 'xx.xxxx,xx.xxxx' + if headers: + _headers.update(headers) + if params: + _params.update(params) + log_params = copy.deepcopy(params) + if 'location' in log_params: + log_params['location'] = 'xx.xxxx,xx.xxxx' + else: + log_params = None _context.log_debug('[data] v3 request: |{0}| path: |{1}| params: |{2}| post_data: |{3}|'.format(method, path, log_params, post_data)) - if method == 'GET': - result = requests.get(_url, params=_params, headers=_headers, verify=self._verify, allow_redirects=allow_redirects) - elif method == 'POST': - _headers['content-type'] = 'application/json' - result = requests.post(_url, json=post_data, params=_params, headers=_headers, verify=self._verify, - allow_redirects=allow_redirects) - elif method == 'PUT': - _headers['content-type'] = 'application/json' - result = requests.put(_url, json=post_data, params=_params, headers=_headers, verify=self._verify, - allow_redirects=allow_redirects) - elif method == 'DELETE': - result = requests.delete(_url, params=_params, headers=_headers, verify=self._verify, - allow_redirects=allow_redirects) - - _context.log_debug('[data] v3 response: |{0}| headers: |{1}|'.format(result.status_code, result.headers)) + result = self._request(_url, method=method, headers=_headers, json=post_data, params=_params) if result is None: return {} + _context.log_debug('[data] v3 response: |{0}| headers: |{1}|'.format(result.status_code, result.headers)) + if result.headers.get('content-type', '').startswith('application/json'): try: return result.json() @@ -1107,20 +1115,15 @@ def perform_v3_request(self, method='GET', headers=None, path=None, post_data=No 'status_code': result.status_code, 'payload': result.text } - return {} - def perform_v1_tv_request(self, method='GET', headers=None, path=None, post_data=None, params=None, - allow_redirects=True): + def perform_v1_tv_request(self, method='GET', headers=None, path=None, + post_data=None, params=None, no_login=False): + # params - if not params: - params = {} - _params = {'key': self._config_tv['key']} - _params.update(params) + _params = {} # headers - if not headers: - headers = {} _headers = { 'User-Agent': ('Mozilla/5.0 (Linux; Android 7.0; SM-G892A Build/NRD90M;' ' wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0' @@ -1131,32 +1134,37 @@ def perform_v1_tv_request(self, method='GET', headers=None, path=None, post_data 'Accept-Language': 'en-US,en;q=0.5', } - if self._access_token_tv: - _headers['Authorization'] = 'Bearer %s' % self._access_token_tv - _headers.update(headers) + if self._access_token and self._config.get('token-allowed', True) and not no_login: + _headers['Authorization'] = 'Bearer %s' % self._access_token + else: + _params = {'key': self._config_tv['key']} # url _url = 'https://www.googleapis.com/youtubei/v1/%s' % path.strip('/') - result = None - - _context.log_debug('[i] v1 request: |{0}| path: |{1}| params: |{2}| post_data: |{3}|'.format(method, path, params, post_data)) - if method == 'GET': - result = requests.get(_url, params=_params, headers=_headers, verify=self._verify, allow_redirects=allow_redirects) - elif method == 'POST': - _headers['content-type'] = 'application/json' - result = requests.post(_url, json=post_data, params=_params, headers=_headers, verify=self._verify, - allow_redirects=allow_redirects) - elif method == 'PUT': - _headers['content-type'] = 'application/json' - result = requests.put(_url, json=post_data, params=_params, headers=_headers, verify=self._verify, - allow_redirects=allow_redirects) - elif method == 'DELETE': - result = requests.delete(_url, params=_params, headers=_headers, verify=self._verify, - allow_redirects=allow_redirects) + if headers: + _headers.update(headers) + if params: + _params.update(params) + log_params = copy.deepcopy(params) + if 'location' in log_params: + log_params['location'] = 'xx.xxxx,xx.xxxx' + else: + log_params = None + _context.log_debug('[data] v1 request: |{0}| path: |{1}| params: |{2}| post_data: |{3}|'.format(method, path, log_params, post_data)) + result = self._request(_url, method=method, headers=_headers, json=post_data, params=_params) if result is None: return {} + _context.log_debug('[data] v1 response: |{0}| headers: |{1}|'.format(result.status_code, result.headers)) + if result.headers.get('content-type', '').startswith('application/json'): - return result.json() + try: + return result.json() + except ValueError: + return { + 'status_code': result.status_code, + 'payload': result.text + } + return {} diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/resource_manager.py b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/resource_manager.py index 3c94bfa20a..81afc78abd 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/resource_manager.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/resource_manager.py @@ -129,7 +129,7 @@ def _update_videos(self, video_ids, live_details=False, suppress_errors=False): self._context.log_debug('Cached data for videos |%s|' % ', '.join(list(video_data.keys()))) played_items = dict() - if self._context.get_settings().use_playback_history(): + if self._context.get_settings().use_local_history(): playback_history = self._context.get_playback_history() played_items = playback_history.get_items(video_ids) diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/signature/cipher.py b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/signature/cipher.py index 35a4026009..8db38e1ddb 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/signature/cipher.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/signature/cipher.py @@ -8,8 +8,6 @@ See LICENSES/GPL-2.0-only for more information. """ -from six.moves import range - import re from ....kodion.utils import FunctionCache @@ -69,11 +67,7 @@ def _load_javascript(self, javascript): parameter = cipher_match.group('parameter').split(',') for i in range(len(parameter)): param = parameter[i].strip() - if i == 0: - param = '%SIG%' - else: - param = int(param) - + param = '%SIG%' if i == 0 else int(param) parameter[i] = param # get function from object @@ -110,30 +104,30 @@ def _load_javascript(self, javascript): @staticmethod def _find_signature_function_name(javascript): - # match_patterns source is youtube-dl - # https://github.com/ytdl-org/youtube-dl/blob/master/youtube_dl/extractor/youtube.py#L1344 + # match_patterns source is from youtube-dl + # https://github.com/ytdl-org/youtube-dl/blob/master/youtube_dl/extractor/youtube.py#L1553 # LICENSE: The Unlicense - match_patterns = [ - r'\b[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*encodeURIComponent\s*\(\s*(?P[a-zA-Z0-9$]+)\(', - r'\b[a-zA-Z0-9]+\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*encodeURIComponent\s*\(\s*(?P[a-zA-Z0-9$]+)\(', - r'(?:\b|[^a-zA-Z0-9$])(?P[a-zA-Z0-9$]{2})\s*=\s*function\(\s*a\s*\)\s*{\s*a\s*=\s*a\.split\(\s*""\s*\)', - r'(?P[a-zA-Z0-9$]+)\s*=\s*function\(\s*a\s*\)\s*{\s*a\s*=\s*a\.split\(\s*""\s*\)', - r'(["\'])signature\1\s*,\s*(?P[a-zA-Z0-9$]+)\(', - r'\.sig\|\|(?P[a-zA-Z0-9$]+)\(', - r'yt\.akamaized\.net/\)\s*\|\|\s*.*?\s*[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*(?:encodeURIComponent\s*\()?\s*' - r'(?P[a-zA-Z0-9$]+)\(', - r'\b[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*(?P[a-zA-Z0-9$]+)\(', - r'\b[a-zA-Z0-9]+\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*(?P[a-zA-Z0-9$]+)\(', - r'\bc\s*&&\s*a\.set\([^,]+\s*,\s*\([^)]*\)\s*\(\s*(?P[a-zA-Z0-9$]+)\(', - r'\bc\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*\([^)]*\)\s*\(\s*(?P[a-zA-Z0-9$]+)\(', - r'\bc\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*\([^)]*\)\s*\(\s*(?P[a-zA-Z0-9$]+)\(' - ] + match_patterns = ( + r'\b[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*encodeURIComponent\s*\(\s*(?P[a-zA-Z0-9$]+)\(', + r'\b[a-zA-Z0-9]+\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*encodeURIComponent\s*\(\s*(?P[a-zA-Z0-9$]+)\(', + r'\bm=(?P[a-zA-Z0-9$]{2,})\(decodeURIComponent\(h\.s\)\)', + r'\bc&&\(c=(?P[a-zA-Z0-9$]{2,})\(decodeURIComponent\(c\)\)', + r'(?:\b|[^a-zA-Z0-9$])(?P[a-zA-Z0-9$]{2,})\s*=\s*function\(\s*a\s*\)\s*{\s*a\s*=\s*a\.split\(\s*""\s*\)(?:;[a-zA-Z0-9$]{2}\.[a-zA-Z0-9$]{2}\(a,\d+\))?', + r'(?P[a-zA-Z0-9$]+)\s*=\s*function\(\s*a\s*\)\s*{\s*a\s*=\s*a\.split\(\s*""\s*\)', + # Obsolete patterns + r'("|\')signature\1\s*,\s*(?P[a-zA-Z0-9$]+)\(', + r'\.sig\|\|(?P[a-zA-Z0-9$]+)\(', + r'yt\.akamaized\.net/\)\s*\|\|\s*.*?\s*[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*(?:encodeURIComponent\s*\()?\s*(?P[a-zA-Z0-9$]+)\(', + r'\b[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*(?P[a-zA-Z0-9$]+)\(', + r'\b[a-zA-Z0-9]+\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*(?P[a-zA-Z0-9$]+)\(', + r'\bc\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*\([^)]*\)\s*\(\s*(?P[a-zA-Z0-9$]+)\(' + ) for pattern in match_patterns: match = re.search(pattern, javascript) if match: - return re.escape(match.group('name')) + return re.escape(match.group('sig')) return '' @@ -159,9 +153,8 @@ def _find_object_body(object_name, javascript): def _get_object_function(self, object_name, function_name, javascript): if object_name not in self._object_cache: self._object_cache[object_name] = {} - else: - if function_name in self._object_cache[object_name]: - return self._object_cache[object_name][function_name] + elif function_name in self._object_cache[object_name]: + return self._object_cache[object_name][function_name] _object_body = self._find_object_body(object_name, javascript) _object_body = _object_body.split('},') diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/signature/json_script_engine.py b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/signature/json_script_engine.py index 17e38d188a..eac6dc8f7b 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/signature/json_script_engine.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/signature/json_script_engine.py @@ -8,8 +8,6 @@ See LICENSES/GPL-2.0-only for more information. """ -from six.moves import range - class JsonScriptEngine(object): def __init__(self, json_script): diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/subtitles.py b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/subtitles.py index 0c3d63aec9..b6e0779856 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/subtitles.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/subtitles.py @@ -6,26 +6,13 @@ See LICENSES/GPL-2.0-only for more information. """ +from html import unescape +from urllib.parse import (parse_qs, urlsplit, urlunsplit, urlencode, urljoin) + import xbmcvfs import requests from ...kodion.utils import make_dirs -from six.moves.urllib_parse import parse_qs -from six.moves.urllib_parse import urlencode -from six.moves.urllib_parse import urlsplit -from six.moves.urllib_parse import urlunsplit - -from six import PY2 - -try: - from six.moves import html_parser - - unescape = html_parser.HTMLParser().unescape -except AttributeError: - import html - - unescape = html.unescape - class Subtitles(object): LANG_NONE = 0 @@ -37,40 +24,71 @@ class Subtitles(object): BASE_PATH = 'special://temp/plugin.video.youtube/' SRT_FILE = ''.join([BASE_PATH, '%s.%s.srt']) - def __init__(self, context, headers, video_id, captions): + def __init__(self, context, video_id, captions, headers=None): self.context = context self._verify = context.get_settings().verify_ssl() self.video_id = video_id - self.language = context.get_settings().get_string('youtube.language', 'en_US').replace('_', '-') - self.headers = headers.copy() + self.language = (context.get_settings() + .get_string('youtube.language', 'en_US') + .replace('_', '-')) + + if not headers and 'headers' in captions: + headers = captions['headers'] + headers.pop('Authorization', None) + headers.pop('Content-Length', None) + headers.pop('Content-Type', None) + self.headers = headers + + ui = self.context.get_ui() + self.prompt_override = ( + ui.get_home_window_property('prompt_for_subtitles') == video_id + ) + ui.clear_home_window_property('prompt_for_subtitles') - self.caption_track = {} self.renderer = captions.get('playerCaptionsTracklistRenderer', {}) self.caption_tracks = self.renderer.get('captionTracks', []) self.translation_langs = self.renderer.get('translationLanguages', []) - default_audio = self.renderer.get('defaultAudioTrackIndex') - if default_audio is not None: - audio_tracks = self.renderer.get('audioTracks', []) + try: + default_audio = self.renderer.get('defaultAudioTrackIndex') + default_audio = self.renderer.get('audioTracks')[default_audio] + except (IndexError, TypeError): + default_audio = None + + self.defaults = { + 'caption': {}, + 'lang_code': 'und', + 'is_asr': False, + } + if default_audio is None: + return + + default_caption = self.renderer.get( + 'defaultTranslationSourceTrackIndices', [None] + )[0] + + if default_caption is None: + default_caption = ( + default_audio.get('hasDefaultTrack') + and default_audio.get('defaultCaptionTrackIndex') + ) + + if default_caption is None: try: - audio_track = audio_tracks[default_audio] - except: - audio_track = None - if audio_track: - default_caption = audio_track.get('defaultCaptionTrackIndex') - if default_caption is None: - default_caption = audio_track.get('captionTrackIndices') - if (default_caption is not None) and (isinstance(default_caption, list)): - default_caption = default_caption[0] - if default_caption is not None: - try: - self.caption_track = self.caption_tracks[default_caption] - except: - pass + default_caption = default_audio.get('captionTrackIndices')[0] + except (IndexError, TypeError): + default_caption = 0 - ui = self.context.get_ui() - self.prompt_override = ui.get_home_window_property('prompt_for_subtitles') == video_id - ui.clear_home_window_property('prompt_for_subtitles') + try: + default_caption = self.caption_tracks[default_caption] or {} + except IndexError: + return + + self.defaults = { + 'caption': default_caption, + 'lang_code': default_caption.get('languageCode') or 'und', + 'is_asr': default_caption.get('kind') == 'asr', + } def srt_filename(self, sub_language): return self.SRT_FILE % (self.video_id, sub_language) @@ -100,6 +118,12 @@ def _unescape(self, text): self.context.log_debug('Subtitle unescape: failed to unescape text') return text + def get_default_lang(self): + return { + 'code': self.defaults['lang_code'], + 'is_asr': self.defaults['is_asr'], + } + def get_subtitles(self): if self.prompt_override: languages = self.LANG_PROMPT @@ -108,19 +132,19 @@ def get_subtitles(self): self.context.log_debug('Subtitle get_subtitles: for setting |%s|' % str(languages)) if languages == self.LANG_NONE: return [] - elif languages == self.LANG_CURR: + if languages == self.LANG_CURR: list_of_subs = [] list_of_subs.extend(self._get(self.language)) list_of_subs.extend(self._get(language=self.language.split('-')[0])) return list(set(list_of_subs)) - elif languages == self.LANG_CURR_NO_ASR: + if languages == self.LANG_CURR_NO_ASR: list_of_subs = [] list_of_subs.extend(self._get(self.language, no_asr=True)) list_of_subs.extend(self._get(language=self.language.split('-')[0], no_asr=True)) return list(set(list_of_subs)) - elif languages == self.LANG_PROMPT: + if languages == self.LANG_PROMPT: return self._prompt() - elif languages == self.LANG_CURR_FALLBACK: + if languages == self.LANG_CURR_FALLBACK: list_of_subs = [] list_of_subs.extend(self._get(language=self.language)) list_of_subs.extend(self._get(language=self.language.split('-')[0])) @@ -128,8 +152,8 @@ def get_subtitles(self): list_of_subs.extend(self._get('en-US')) list_of_subs.extend(self._get('en-GB')) return list(set(list_of_subs)) - else: - self.context.log_debug('Unknown language_enum: %s for subtitles' % str(languages)) + self.context.log_debug('Unknown language_enum: %s for subtitles' % str(languages)) + return [] def _get_all(self): list_of_subs = [] @@ -145,78 +169,79 @@ def _prompt(self): choice = self.context.get_ui().on_select(self.context.localize(30560), [language_name for language, language_name in languages]) if choice != -1: return self._get(language=languages[choice][0], language_name=languages[choice][1]) - else: - self.context.log_debug('Subtitle selection cancelled') - return [] - else: - self.context.log_debug('No subtitles found for prompt') + self.context.log_debug('Subtitle selection cancelled') return [] + self.context.log_debug('No subtitles found for prompt') + return [] - def _get(self, language='en', language_name=None, no_asr=False): - fname = self.srt_filename(language) + def _get(self, lang_code='en', language=None, no_asr=False): + fname = self.srt_filename(lang_code) if xbmcvfs.exists(fname): - self.context.log_debug('Subtitle exists for: %s, filename: %s' % (language, fname)) + self.context.log_debug('Subtitle exists for: %s, filename: %s' % (lang_code, fname)) return [fname] caption_track = None asr_track = None has_translation = False for track in self.caption_tracks: - if language == track.get('languageCode'): - if language_name is not None: - if language_name == self._get_language_name(track): + if lang_code == track.get('languageCode'): + if language is not None: + if language == self._get_language_name(track): caption_track = track break + elif no_asr and (track.get('kind') == 'asr'): + continue + elif track.get('kind') == 'asr': + asr_track = track else: - if no_asr and (track.get('kind') == 'asr'): - continue - elif track.get('kind') == 'asr': - asr_track = track - else: - caption_track = track + caption_track = track if (caption_track is None) and (asr_track is not None): caption_track = asr_track for lang in self.translation_langs: - if language == lang.get('languageCode'): + if lang_code == lang.get('languageCode'): has_translation = True break - if (self.caption_track.get('languageCode') != language) and (not has_translation) and (caption_track is None): - self.context.log_debug('No subtitles found for: %s' % language) + if (lang_code != self.defaults['lang_code'] and not has_translation + and caption_track is None): + self.context.log_debug('No subtitles found for: %s' % lang_code) return [] subtitle_url = None - if (caption_track is None) and has_translation: - base_url = self.caption_track.get('baseUrl') - if base_url: - subtitle_url = self.set_query_param(base_url, 'type', 'track') - subtitle_url = self.set_query_param(subtitle_url, 'tlang', language) - elif caption_track is not None: - base_url = caption_track.get('baseUrl') - if base_url: - subtitle_url = self.set_query_param(base_url, 'type', 'track') + if caption_track is not None: + base_url = self._normalize_url(caption_track.get('baseUrl')) + has_translation = False + elif has_translation: + base_url = self._normalize_url( + self.defaults['caption'].get('baseUrl') + ) + else: + base_url = None + + if base_url: + subtitle_url = self._set_query_param(base_url, + ('type', 'track'), + ('fmt', 'vtt'), + ('tlang', lang_code) if has_translation else (None, None), + ) if subtitle_url: - subtitle_url = self.set_query_param(subtitle_url, 'fmt', 'vtt') self.context.log_debug('Subtitle url: %s' % subtitle_url) if not self.context.get_settings().subtitle_download(): return [subtitle_url] - else: - result_auto = requests.get(subtitle_url, headers=self.headers, - verify=self._verify, allow_redirects=True) - - if result_auto.text: - self.context.log_debug('Subtitle found for: %s' % language) - self._write_file(fname, bytearray(self._unescape(result_auto.text), encoding='utf8', errors='ignore')) - return [fname] - else: - self.context.log_debug('Failed to retrieve subtitles for: %s' % language) - return [] - else: - self.context.log_debug('No subtitles found for: %s' % language) + result_auto = requests.get(subtitle_url, headers=self.headers, + verify=self._verify, allow_redirects=True) + + if result_auto.text: + self.context.log_debug('Subtitle found for: %s' % lang_code) + self._write_file(fname, bytearray(self._unescape(result_auto.text), encoding='utf8', errors='ignore')) + return [fname] + self.context.log_debug('Failed to retrieve subtitles for: %s' % lang_code) return [] + self.context.log_debug('No subtitles found for: %s' % lang_code) + return [] def _get_language_name(self, track): key = 'languageName' if 'languageName' in track else 'name' @@ -233,19 +258,43 @@ def _get_language_name(self, track): @staticmethod def _recode_language_name(language_name): - if PY2: - language_name = language_name.encode('utf-8') - return language_name @staticmethod - def set_query_param(url, name, value): + def _set_query_param(url, *pairs): + if not url or not pairs: + return url + + num_params = len(pairs) + if not num_params: + return url + if not isinstance(pairs[0], (list, tuple)): + if num_params >= 2: + pairs = zip(*[iter(pairs)] * 2) + else: + return url + scheme, netloc, path, query_string, fragment = urlsplit(url) query_params = parse_qs(query_string) - query_params[name] = [value] + for name, value in pairs: + if name: + query_params[name] = [value] + new_query_string = urlencode(query_params, doseq=True) if isinstance(scheme, bytes): new_query_string = new_query_string.encode('utf-8') return urlunsplit((scheme, netloc, path, new_query_string, fragment)) + + @staticmethod + def _normalize_url(url): + if not url: + url = '' + elif url.startswith(('http://', 'https://')): + pass + elif url.startswith('//'): + url = urljoin('https:', url) + elif url.startswith('/'): + url = urljoin('https://www.youtube.com', url) + return url diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/tv.py b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/tv.py index 02538ea977..c9818f924d 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/tv.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/tv.py @@ -8,8 +8,6 @@ See LICENSES/GPL-2.0-only for more information. """ -from six import PY2 - from ... import kodion from ...youtube.helper import utils from ...kodion.items.video_item import VideoItem @@ -34,8 +32,6 @@ def my_subscriptions_to_items(provider, context, json_data, do_filter=False): for item in items: channel = item['channel'].lower() channel = channel.replace(',', '') - if PY2: - channel = channel.encode('utf-8', 'ignore') if not do_filter or (do_filter and (not black_list) and (channel in filter_list)) or \ (do_filter and black_list and (channel not in filter_list)): video_id = item['id'] @@ -50,7 +46,7 @@ def my_subscriptions_to_items(provider, context, json_data, do_filter=False): video_id_dict[video_id] = video_item - use_play_data = not incognito and context.get_settings().use_playback_history() + use_play_data = not incognito and context.get_settings().use_local_history() channel_item_dict = {} utils.update_video_infos(provider, context, video_id_dict, channel_items_dict=channel_item_dict, use_play_data=use_play_data) @@ -96,7 +92,7 @@ def tv_videos_to_items(provider, context, json_data): video_id_dict[video_id] = video_item - use_play_data = not incognito and context.get_settings().use_playback_history() + use_play_data = not incognito and context.get_settings().use_local_history() channel_item_dict = {} utils.update_video_infos(provider, context, video_id_dict, channel_items_dict=channel_item_dict, use_play_data=use_play_data) diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/url_resolver.py b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/url_resolver.py index 7a1b1df798..2d09a41392 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/url_resolver.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/url_resolver.py @@ -8,9 +8,12 @@ See LICENSES/GPL-2.0-only for more information. """ -from six.moves import urllib - import re +from urllib.parse import parse_qsl +from urllib.parse import urlparse +from urllib.parse import parse_qs +from urllib.parse import urlunsplit +from urllib.parse import urlencode from ...kodion.utils import FunctionCache from ...kodion import Context as _Context @@ -73,7 +76,7 @@ def _load_page(_url): return _url if url_components.path.lower() == '/redirect': - params = dict(urllib.parse.parse_qsl(url_components.query)) + params = dict(parse_qsl(url_components.query)) return params['q'] if url_components.path.lower().startswith('/user'): @@ -114,7 +117,7 @@ def _loop(_url, tries=5): location = headers.get('location', '') # validate the location - some server returned garbage - _url_components = urllib.parse.urlparse(location) + _url_components = urlparse(location) if not _url_components.scheme and not _url_components.hostname: return url @@ -132,17 +135,17 @@ def _loop(_url, tries=5): return _loop(location, tries=tries - 1) if response.status_code == 200: - _url_components = urllib.parse.urlparse(_url) + _url_components = urlparse(_url) if _url_components.path == '/supported_browsers': # "sometimes", we get a redirect through an URL of the form https://.../supported_browsers?next_url=&further=paramaters&stuck=here # put together query string from both what's encoded inside next_url and the remaining paramaters of this URL... - _query = urllib.parse.parse_qs(_url_components.query) # top-level query string - _nc = urllib.parse.urlparse(_query['next_url'][0]) # components of next_url - _next_query = urllib.parse.parse_qs(_nc.query) # query string encoded inside next_url + _query = parse_qs(_url_components.query) # top-level query string + _nc = urlparse(_query['next_url'][0]) # components of next_url + _next_query = parse_qs(_nc.query) # query string encoded inside next_url del _query['next_url'] # remove next_url from top level query string _next_query.update(_query) # add/overwrite all other params from top level query string _next_query = dict(map(lambda kv : (kv[0], kv[1][0]), _next_query.items())) # flatten to only use first argument of each param - _next_url = urllib.parse.urlunsplit((_nc.scheme, _nc.netloc, _nc.path, urllib.parse.urlencode(_next_query), _nc.fragment)) # build new URL from these components + _next_url = urlunsplit((_nc.scheme, _nc.netloc, _nc.path, urlencode(_next_query), _nc.fragment)) # build new URL from these components return _next_url except: @@ -171,7 +174,7 @@ def clear(self): def _resolve(self, url): # try one of the resolver - url_components = urllib.parse.urlparse(url) + url_components = urlparse(url) for resolver in self._resolver: if resolver.supports_url(url, url_components): resolved_url = resolver.resolve(url, url_components) @@ -179,7 +182,7 @@ def _resolve(self, url): # one last check...sometimes the resolved url is YouTube-specific and can be resolved again or # simplified. - url_components = urllib.parse.urlparse(resolved_url) + url_components = urlparse(resolved_url) if resolver is not self._youtube_resolver and self._youtube_resolver.supports_url(resolved_url, url_components): return self._youtube_resolver.resolve(resolved_url, url_components) diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/url_to_item_converter.py b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/url_to_item_converter.py index 31bc6e7d65..b8859d7cb4 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/url_to_item_converter.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/url_to_item_converter.py @@ -8,9 +8,10 @@ See LICENSES/GPL-2.0-only for more information. """ -from six.moves import urllib - import re +from urllib.parse import urlparse +from urllib.parse import parse_qsl + from ...kodion.items import VideoItem, DirectoryItem from . import utils @@ -34,9 +35,9 @@ def __init__(self, flatten=True): self._channel_ids = [] def add_url(self, url, provider, context): - url_components = urllib.parse.urlparse(url) + url_components = urlparse(url) if url_components.hostname.lower() in ('youtube.com', 'www.youtube.com', 'm.youtube.com'): - params = dict(urllib.parse.parse_qsl(url_components.query)) + params = dict(parse_qsl(url_components.query)) if url_components.path.lower() == '/watch': video_id = params.get('v', '') if video_id: diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/utils.py b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/utils.py index 88a7fb7f54..734e0a12fa 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/utils.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/utils.py @@ -8,8 +8,6 @@ See LICENSES/GPL-2.0-only for more information. """ -from six import PY2 - import re import time @@ -143,8 +141,6 @@ def update_channel_infos(provider, context, channel_id_dict, subscription_id_dic if context.get_path() == '/subscriptions/list/': channel = title.lower() channel = channel.replace(',', '') - if PY2: - channel = channel.encode('utf-8', 'ignore') if channel in filter_list: yt_context_menu.append_remove_my_subscriptions_filter(context_menu, provider, context, title) else: @@ -479,8 +475,8 @@ def update_play_info(provider, context, video_id, video_item, video_stream, use_ if 'headers' in video_stream: video_item.set_headers(video_stream['headers']) - # set uses_dash - video_item.set_use_dash(settings.use_dash()) + # set uses_mpd + video_item.set_use_mpd_video(settings.use_mpd_videos()) license_info = video_stream.get('license_info', {}) @@ -686,8 +682,10 @@ def filter_short_videos(context, items): shorts_filtered = [] for item in items: - if hasattr(item, '_duration') and (0 < item.get_duration() <= 60): - continue + if hasattr(item, '_duration'): + item_duration = 0 if item.get_duration() is None else item.get_duration() + if 0 < item_duration <= 60: + continue shorts_filtered += [item] return shorts_filtered diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/v3.py b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/v3.py index 6f2a9e7a76..b0427088fc 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/v3.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/v3.py @@ -266,7 +266,7 @@ def _process_list_response(provider, context, json_data): else: raise kodion.KodionException("Unknown kind '%s'" % kind) - use_play_data = not incognito and context.get_settings().use_playback_history() + use_play_data = not incognito and context.get_settings().use_local_history() # this will also update the channel_id_dict with the correct channel id for each video. channel_items_dict = {} diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/video_info.py b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/video_info.py index 54ff9835e8..8bdbc6e632 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/video_info.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/video_info.py @@ -8,29 +8,23 @@ See LICENSES/GPL-2.0-only for more information. """ -from six.moves import range -from six import PY2 -from six.moves import urllib - -try: - from six.moves import html_parser - - unescape = html_parser.HTMLParser().unescape -except AttributeError: - from html import unescape - -import copy import re -import json import random import traceback +from json import dumps as json_dumps, loads as json_loads +from html import unescape +from urllib.parse import (parse_qs, urlsplit, urlunsplit, urlencode, urljoin, + quote, unquote) + import requests +import xbmcvfs + from ...kodion.utils import is_httpd_live, make_dirs, DataCache from ..youtube_exceptions import YouTubeException from .subtitles import Subtitles - -import xbmcvfs +from .ratebypass import ratebypass +from .signature.cipher import Cipher class VideoInfo(object): @@ -38,7 +32,7 @@ class VideoInfo(object): # === Non-DASH === '5': {'container': 'flv', 'title': '240p', - 'sort': [240, 0], + 'sort': [-240, 0], 'video': {'height': 240, 'encoding': 'h.263'}, 'audio': {'bitrate': 64, 'encoding': 'mp3'}}, '6': {'container': 'flv', # Discontinued @@ -51,17 +45,17 @@ class VideoInfo(object): 'audio': {'encoding': 'aac'}}, '17': {'container': '3gp', 'title': '144p', - 'sort': [144, -20], + 'sort': [-144, 20], 'video': {'height': 144, 'encoding': 'mpeg-4'}, 'audio': {'bitrate': 24, 'encoding': 'aac'}}, '18': {'container': 'mp4', 'title': '360p', - 'sort': [360, 0], + 'sort': [-360, 0], 'video': {'height': 360, 'encoding': 'h.264'}, 'audio': {'bitrate': 96, 'encoding': 'aac'}}, '22': {'container': 'mp4', 'title': '720p', - 'sort': [720, 0], + 'sort': [-720, 0], 'video': {'height': 720, 'encoding': 'h.264'}, 'audio': {'bitrate': 192, 'encoding': 'aac'}}, '34': {'container': 'flv', # Discontinued @@ -74,22 +68,22 @@ class VideoInfo(object): 'audio': {'bitrate': 128, 'encoding': 'aac'}}, '36': {'container': '3gp', 'title': '240p', - 'sort': [240, -20], + 'sort': [-240, 20], 'video': {'height': 240, 'encoding': 'mpeg-4'}, 'audio': {'bitrate': 32, 'encoding': 'aac'}}, '37': {'container': 'mp4', 'title': '1080p', - 'sort': [1080, 0], + 'sort': [-1080, 0], 'video': {'height': 1080, 'encoding': 'h.264'}, 'audio': {'bitrate': 192, 'encoding': 'aac'}}, '38': {'container': 'mp4', 'title': '3072p', - 'sort': [3072, 0], + 'sort': [-3072, 0], 'video': {'height': 3072, 'encoding': 'h.264'}, 'audio': {'bitrate': 192, 'encoding': 'aac'}}, '43': {'container': 'webm', 'title': '360p', - 'sort': [360, -1], + 'sort': [-360, 1], 'video': {'height': 360, 'encoding': 'vp8'}, 'audio': {'bitrate': 128, 'encoding': 'vorbis'}}, '44': {'container': 'webm', # Discontinued @@ -106,50 +100,50 @@ class VideoInfo(object): 'audio': {'bitrate': 192, 'encoding': 'vorbis'}}, '59': {'container': 'mp4', 'title': '480p', - 'sort': [480, 0], + 'sort': [-480, 0], 'video': {'height': 480, 'encoding': 'h.264'}, 'audio': {'bitrate': 96, 'encoding': 'aac'}}, '78': {'container': 'mp4', 'title': '360p', - 'sort': [360, 0], + 'sort': [-360, 0], 'video': {'height': 360, 'encoding': 'h.264'}, 'audio': {'bitrate': 96, 'encoding': 'aac'}}, # === 3D === '82': {'container': 'mp4', '3D': True, 'title': '3D@360p', - 'sort': [360, 0], + 'sort': [-360, 0], 'video': {'height': 360, 'encoding': 'h.264'}, 'audio': {'bitrate': 96, 'encoding': 'aac'}}, '83': {'container': 'mp4', '3D': True, 'title': '3D@240p', - 'sort': [240, 0], + 'sort': [-240, 0], 'video': {'height': 240, 'encoding': 'h.264'}, 'audio': {'bitrate': 96, 'encoding': 'aac'}}, '84': {'container': 'mp4', '3D': True, 'title': '3D@720p', - 'sort': [720, 0], + 'sort': [-720, 0], 'video': {'height': 720, 'encoding': 'h.264'}, 'audio': {'bitrate': 192, 'encoding': 'aac'}}, '85': {'container': 'mp4', '3D': True, 'title': '3D@1080p', - 'sort': [1080, 0], + 'sort': [-1080, 0], 'video': {'height': 1080, 'encoding': 'h.264'}, 'audio': {'bitrate': 192, 'encoding': 'aac'}}, '100': {'container': 'webm', '3D': True, 'title': '3D@360p', - 'sort': [360, -1], + 'sort': [-360, 1], 'video': {'height': 360, 'encoding': 'vp8'}, 'audio': {'bitrate': 128, 'encoding': 'vorbis'}}, '101': {'container': 'webm', # Discontinued 'discontinued': True, '3D': True, 'title': '3D@360p', - 'sort': [360, -1], + 'sort': [-360, 1], 'video': {'height': 360, 'encoding': 'vp8'}, 'audio': {'bitrate': 192, 'encoding': 'vorbis'}}, '102': {'container': 'webm', # Discontinued @@ -161,44 +155,44 @@ class VideoInfo(object): '91': {'container': 'ts', 'Live': True, 'title': 'Live@144p', - 'sort': [144, 0], + 'sort': [-144, 0], 'video': {'height': 144, 'encoding': 'h.264'}, 'audio': {'bitrate': 48, 'encoding': 'aac'}}, '92': {'container': 'ts', 'Live': True, 'title': 'Live@240p', - 'sort': [240, 0], + 'sort': [-240, 0], 'video': {'height': 240, 'encoding': 'h.264'}, 'audio': {'bitrate': 48, 'encoding': 'aac'}}, '93': {'container': 'ts', 'Live': True, 'title': 'Live@360p', - 'sort': [360, 0], + 'sort': [-360, 0], 'video': {'height': 360, 'encoding': 'h.264'}, 'audio': {'bitrate': 128, 'encoding': 'aac'}}, '94': {'container': 'ts', 'Live': True, 'title': 'Live@480p', - 'sort': [480, 0], + 'sort': [-480, 0], 'video': {'height': 480, 'encoding': 'h.264'}, 'audio': {'bitrate': 128, 'encoding': 'aac'}}, '95': {'container': 'ts', 'Live': True, 'title': 'Live@720p', - 'sort': [720, 0], + 'sort': [-720, 0], 'video': {'height': 720, 'encoding': 'h.264'}, 'audio': {'bitrate': 256, 'encoding': 'aac'}}, '96': {'container': 'ts', 'Live': True, 'title': 'Live@1080p', - 'sort': [1080, 0], + 'sort': [-1080, 0], 'video': {'height': 1080, 'encoding': 'h.264'}, 'audio': {'bitrate': 256, 'encoding': 'aac'}}, '120': {'container': 'flv', # Discontinued 'discontinued': True, 'Live': True, 'title': 'Live@720p', - 'sort': [720, -10], + 'sort': [-720, 10], 'video': {'height': 720, 'encoding': 'h.264'}, 'audio': {'bitrate': 128, 'encoding': 'aac'}}, '127': {'container': 'ts', @@ -210,26 +204,26 @@ class VideoInfo(object): '132': {'container': 'ts', 'Live': True, 'title': 'Live@240p', - 'sort': [240, 0], + 'sort': [-240, 0], 'video': {'height': 240, 'encoding': 'h.264'}, 'audio': {'bitrate': 48, 'encoding': 'aac'}}, '151': {'container': 'ts', 'Live': True, 'unsupported': True, 'title': 'Live@72p', - 'sort': [72, 0], + 'sort': [-72, 0], 'video': {'height': 72, 'encoding': 'h.264'}, 'audio': {'bitrate': 24, 'encoding': 'aac'}}, '300': {'container': 'ts', 'Live': True, 'title': 'Live@720p', - 'sort': [720, 0], + 'sort': [-720, 0], 'video': {'height': 720, 'encoding': 'h.264'}, 'audio': {'bitrate': 128, 'encoding': 'aac'}}, '301': {'container': 'ts', 'Live': True, 'title': 'Live@1080p', - 'sort': [1080, 0], + 'sort': [-1080, 0], 'video': {'height': 1080, 'encoding': 'h.264'}, 'audio': {'bitrate': 128, 'encoding': 'aac'}}, # === DASH (video only) @@ -297,9 +291,10 @@ class VideoInfo(object): '271': {'container': 'webm', 'dash/video': True, 'video': {'height': 1440, 'encoding': 'vp9'}}, - '272': {'container': 'webm', + '272': {'container': 'webm', # was VP9 2160p30 'dash/video': True, - 'video': {'height': 2160, 'encoding': 'vp9'}}, + 'fps': 60, + 'video': {'height': 4320, 'encoding': 'vp9'}}, '278': {'container': 'webm', 'dash/video': True, 'video': {'height': 144, 'encoding': 'vp9'}}, @@ -370,16 +365,6 @@ class VideoInfo(object): 'fps': 60, 'hdr': True, 'video': {'height': 2160, 'encoding': 'vp9.2'}}, - '400': {'container': 'mp4', - 'dash/video': True, - 'fps': 60, - 'hdr': True, - 'video': {'height': 1440, 'encoding': 'av1'}}, - '401': {'container': 'mp4', - 'dash/video': True, - 'fps': 60, - 'hdr': True, - 'video': {'height': 2160, 'encoding': 'av1'}}, '394': {'container': 'mp4', 'dash/video': True, 'fps': 30, @@ -404,77 +389,171 @@ class VideoInfo(object): 'dash/video': True, 'fps': 30, 'video': {'height': 1080, 'encoding': 'av1'}}, + '400': {'container': 'mp4', + 'dash/video': True, + 'fps': 30, + 'video': {'height': 1440, 'encoding': 'av1'}}, + '401': {'container': 'mp4', + 'dash/video': True, + 'fps': 30, + 'video': {'height': 2160, 'encoding': 'av1'}}, + '402': {'container': 'mp4', + 'dash/video': True, + 'fps': 30, + 'video': {'height': 4320, 'encoding': 'av1'}}, + '571': {'container': 'mp4', + 'dash/video': True, + 'fps': 30, + 'video': {'height': 4320, 'encoding': 'av1'}}, + '694': {'container': 'mp4', + 'dash/video': True, + 'fps': 60, + 'hdr': True, + 'video': {'height': 144, 'encoding': 'av1'}}, + '695': {'container': 'mp4', + 'dash/video': True, + 'fps': 60, + 'hdr': True, + 'video': {'height': 240, 'encoding': 'av1'}}, + '696': {'container': 'mp4', + 'dash/video': True, + 'fps': 60, + 'hdr': True, + 'video': {'height': 360, 'encoding': 'av1'}}, + '697': {'container': 'mp4', + 'dash/video': True, + 'fps': 60, + 'hdr': True, + 'video': {'height': 480, 'encoding': 'av1'}}, + '698': {'container': 'mp4', + 'dash/video': True, + 'fps': 60, + 'hdr': True, + 'video': {'height': 720, 'encoding': 'av1'}}, + '699': {'container': 'mp4', + 'dash/video': True, + 'fps': 60, + 'hdr': True, + 'video': {'height': 1080, 'encoding': 'av1'}}, + '700': {'container': 'mp4', + 'dash/video': True, + 'fps': 60, + 'hdr': True, + 'video': {'height': 1440, 'encoding': 'av1'}}, + '701': {'container': 'mp4', + 'dash/video': True, + 'fps': 60, + 'hdr': True, + 'video': {'height': 2160, 'encoding': 'av1'}}, + '702': {'container': 'mp4', + 'dash/video': True, + 'fps': 60, + 'hdr': True, + 'video': {'height': 4320, 'encoding': 'av1'}}, # === Dash (audio only) '139': {'container': 'mp4', - 'sort': [48, 0], - 'title': 'aac@48', + 'sort': [0, -48 * 0.9], + 'title': 'he-aac@48', 'dash/audio': True, 'audio': {'bitrate': 48, 'encoding': 'aac'}}, '140': {'container': 'mp4', - 'sort': [129, 0], - 'title': 'aac@128', + 'sort': [0, -128 * 0.9], + 'title': 'aac-lc@128', 'dash/audio': True, 'audio': {'bitrate': 128, 'encoding': 'aac'}}, '141': {'container': 'mp4', - 'sort': [143, 0], - 'title': 'aac@256', + 'sort': [0, -256 * 0.9], + 'title': 'aac-lc@256', 'dash/audio': True, 'audio': {'bitrate': 256, 'encoding': 'aac'}}, '256': {'container': 'mp4', - 'title': 'aac/itag 256', + 'sort': [0, -192 * 0.9], + 'title': 'he-aac@192', 'dash/audio': True, - 'unsupported': True, - 'audio': {'bitrate': 0, 'encoding': 'aac'}}, + 'audio': {'bitrate': 192, 'encoding': 'aac'}}, '258': {'container': 'mp4', - 'title': 'aac/itag 258', + 'sort': [0, -384 * 0.9], + 'title': 'aac-lc@384', 'dash/audio': True, - 'unsupported': True, - 'audio': {'bitrate': 0, 'encoding': 'aac'}}, + 'audio': {'bitrate': 384, 'encoding': 'aac'}}, '325': {'container': 'mp4', - 'title': 'dtse/itag 325', + 'sort': [0, -384 * 1.3], + 'title': 'dtse@384', 'dash/audio': True, - 'unsupported': True, - 'audio': {'bitrate': 0, 'encoding': 'aac'}}, + 'audio': {'bitrate': 384, 'encoding': 'dtse'}}, + '327': {'container': 'mp4', + 'sort': [0, -256 * 0.9], + 'title': 'aac-lc@256', + 'dash/audio': True, + 'audio': {'bitrate': 256, 'encoding': 'aac'}}, '328': {'container': 'mp4', - 'title': 'ec-3/itag 328', + 'sort': [0, -384 * 1.2], + 'title': 'ec-3@384', 'dash/audio': True, - 'unsupported': True, - 'audio': {'bitrate': 0, 'encoding': 'aac'}}, + 'audio': {'bitrate': 384, 'encoding': 'ec-3'}}, '171': {'container': 'webm', - 'sort': [128, 0], + 'sort': [0, -128 * 0.75], 'title': 'vorbis@128', 'dash/audio': True, 'audio': {'bitrate': 128, 'encoding': 'vorbis'}}, '172': {'container': 'webm', - 'sort': [142, 0], + 'sort': [0, -192 * 0.75], 'title': 'vorbis@192', 'dash/audio': True, 'audio': {'bitrate': 192, 'encoding': 'vorbis'}}, '249': {'container': 'webm', - 'sort': [50, 0], + 'sort': [0, -50], 'title': 'opus@50', 'dash/audio': True, 'audio': {'bitrate': 50, 'encoding': 'opus'}}, '250': {'container': 'webm', - 'sort': [70, 0], + 'sort': [0, -70], 'title': 'opus@70', 'dash/audio': True, 'audio': {'bitrate': 70, 'encoding': 'opus'}}, '251': {'container': 'webm', - 'sort': [141, 0], + 'sort': [0, -160], 'title': 'opus@160', 'dash/audio': True, 'audio': {'bitrate': 160, 'encoding': 'opus'}}, + '338': {'container': 'webm', + 'sort': [0, -480], + 'title': 'opus@480', + 'dash/audio': True, + 'audio': {'bitrate': 480, 'encoding': 'opus'}}, + '380': {'container': 'mp4', + 'sort': [0, -384 * 1.1], + 'title': 'ac-3@384', + 'dash/audio': True, + 'audio': {'bitrate': 384, 'encoding': 'ac-3'}}, + # === Live HLS + '9995': {'container': 'hls', + 'Live': True, + 'sort': [-1080, -1], + 'title': 'Live HLS', + 'hls/audio': True, + 'hls/video': True, + 'audio': {'bitrate': 0, 'encoding': 'aac'}, + 'video': {'height': 0, 'encoding': 'h.264'}}, + # === Live HLS adaptive + '9996': {'container': 'hls', + 'Live': True, + 'sort': [-1080, -1], + 'title': 'Adaptive Live HLS', + 'hls/audio': True, + 'hls/video': True, + 'audio': {'bitrate': 0, 'encoding': 'aac'}, + 'video': {'height': 0, 'encoding': 'h.264'}}, # === DASH adaptive audio only '9997': {'container': 'mpd', - 'sort': [-1, 0], + 'sort': [1, 0], 'title': 'DASH Audio', 'dash/audio': True, 'audio': {'bitrate': 0, 'encoding': ''}}, # === Live DASH adaptive '9998': {'container': 'mpd', 'Live': True, - 'sort': [1080, 1], + 'sort': [-1080, -1], 'title': 'Live DASH', 'dash/audio': True, 'dash/video': True, @@ -482,7 +561,7 @@ class VideoInfo(object): 'video': {'height': 0, 'encoding': ''}}, # === DASH adaptive '9999': {'container': 'mpd', - 'sort': [1080, 1], + 'sort': [-1080, -1], 'title': 'DASH', 'dash/audio': True, 'dash/video': True, @@ -490,472 +569,997 @@ class VideoInfo(object): 'video': {'height': 0, 'encoding': ''}} } - # Headers from the "Galaxy S9/S9+" profile of the Firefox "Responsive Design Mode". - MOBILE_HEADERS = { - 'User-Agent': ('Mozilla/5.0 (Linux; Android 7.0; SM-G892A Build/NRD90M;' - ' wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0' - ' Chrome/67.0.3396.87 Mobile Safari/537.36'), - 'Accept': '*/*', - 'DNT': '1', - 'Accept-Encoding': 'gzip, deflate', - 'Accept-Language': 'en-US,en;q=0.5' + CLIENTS = { + # 4k no VP9 HDR + # Limited subtitle availability + 'android_testsuite': { + '_id': 30, + '_query_subtitles': True, + 'json': { + 'context': { + 'client': { + 'clientName': 'ANDROID_TESTSUITE', + 'clientVersion': '1.9', + 'androidSdkVersion': '29', + 'osName': 'Android', + 'osVersion': '10', + 'platform': 'MOBILE', + }, + }, + }, + 'headers': { + 'User-Agent': ('com.google.android.youtube/' + '{json[context][client][clientVersion]}' + ' (Linux; U; {json[context][client][osName]}' + ' {json[context][client][osVersion]};' + ' {json[context][client][gl]}) gzip'), + 'X-YouTube-Client-Name': '{_id}', + 'X-YouTube-Client-Version': '{json[context][client][clientVersion]}', + }, + 'params': { + 'key': 'AIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w', + }, + }, + 'android': { + '_id': 3, + 'json': { + 'params': 'CgIQBg==', + 'context': { + 'client': { + 'clientName': 'ANDROID', + 'clientVersion': '17.31.35', + 'androidSdkVersion': '30', + 'osName': 'Android', + 'osVersion': '11', + 'platform': 'MOBILE', + }, + }, + }, + 'headers': { + 'User-Agent': ('com.google.android.youtube/' + '{json[context][client][clientVersion]}' + ' (Linux; U; {json[context][client][osName]}' + ' {json[context][client][osVersion]};' + ' {json[context][client][gl]}) gzip'), + 'X-YouTube-Client-Name': '{_id}', + 'X-YouTube-Client-Version': '{json[context][client][clientVersion]}', + }, + 'params': { + 'key': 'AIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w', + }, + }, + # Only for videos that allow embedding + # Limited to 720p on some videos + 'android_embedded': { + '_id': 55, + 'json': { + 'context': { + 'client': { + 'clientName': 'ANDROID_EMBEDDED_PLAYER', + 'clientVersion': '17.36.4', + 'clientScreen': 'EMBED', + 'androidSdkVersion': '29', + 'osName': 'Android', + 'osVersion': '10', + 'platform': 'MOBILE', + }, + }, + 'thirdParty': { + 'embedUrl': 'https://www.youtube.com/embed/{json[videoId]}', + }, + }, + 'headers': { + 'User-Agent': ('com.google.android.youtube/' + '{json[context][client][clientVersion]}' + ' (Linux; U; {json[context][client][osName]}' + ' {json[context][client][osVersion]};' + ' {json[context][client][gl]}) gzip'), + 'X-YouTube-Client-Name': '{_id}', + 'X-YouTube-Client-Version': '{json[context][client][clientVersion]}', + }, + 'params': { + 'key': 'AIzaSyCjc_pVEDi4qsv5MtC2dMXzpIaDoRFLsxw', + }, + }, + # 4k with HDR + # Some videos block this client, may also require embedding enabled + # Limited subtitle availability + 'android_youtube_tv': { + '_id': 29, + '_query_subtitles': True, + 'json': { + 'context': { + 'client': { + 'clientName': 'ANDROID_UNPLUGGED', + 'clientVersion': '6.36', + 'androidSdkVersion': '29', + 'osName': 'Android', + 'osVersion': '10', + 'platform': 'MOBILE', + }, + }, + }, + 'headers': { + 'User-Agent': ('com.google.android.apps.youtube.unplugged/' + '{json[context][client][clientVersion]}' + ' (Linux; U; {json[context][client][osName]}' + ' {json[context][client][osVersion]};' + ' {json[context][client][gl]}) gzip'), + 'X-YouTube-Client-Name': '{_id}', + 'X-YouTube-Client-Version': '{json[context][client][clientVersion]}', + }, + 'params': { + 'key': 'AIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w', + }, + }, + 'ios': { + '_id': 5, + 'json': { + 'context': { + 'client': { + 'clientName': 'IOS', + 'clientVersion': '17.33.2', + 'deviceModel': 'iPhone14,3', + 'osName': 'iOS', + 'osVersion': '15_6', + 'platform': 'MOBILE', + }, + }, + }, + 'headers': { + 'User-Agent': ('com.google.ios.youtube/' + '{json[context][client][clientVersion]}' + ' ({json[context][client][deviceModel]};' + ' U; CPU {json[context][client][osName]}' + ' {json[context][client][osVersion]}' + ' like Mac OS X)'), + 'X-YouTube-Client-Name': '{_id}', + 'X-YouTube-Client-Version': '{json[context][client][clientVersion]}', + }, + 'params': { + 'key': 'AIzaSyB-63vPrdThhKuerbB2N_l7Kwwcxj6yUAc', + }, + }, + # Used to requests captions for clients that don't provide them + # Requires handling of nsig to overcome throttling (TODO) + 'smarttv': { + '_id': 75, + 'json': { + 'context': { + 'client': { + 'clientName': 'TVHTML5_SIMPLY', + 'clientVersion': '1.0', + }, + }, + }, + # Headers from a 2022 Samsung Tizen 6.5 based Smart TV + 'headers': { + 'User-Agent': ('Mozilla/5.0 (SMART-TV; LINUX; Tizen 6.5)' + ' AppleWebKit/537.36 (KHTML, like Gecko)' + ' 85.0.4183.93/6.5 TV Safari/537.36'), + }, + 'params': { + 'key': 'AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8', + }, + }, + # Used for misc api requests by default + # Requires handling of nsig to overcome throttling (TODO) + 'web': { + '_id': 1, + 'json': { + 'context': { + 'client': { + 'clientName': 'WEB', + 'clientVersion': '2.20220801.00.00', + }, + }, + }, + # Headers for a "Galaxy S20 Ultra" from Chrome dev tools device + # emulation + 'headers': { + 'User-Agent': ('Mozilla/5.0 (Linux; Android 10; SM-G981B)' + ' AppleWebKit/537.36 (KHTML, like Gecko)' + ' Chrome/80.0.3987.162 Mobile Safari/537.36'), + 'Referer': 'https://www.youtube.com/watch?v={json[videoId]}' + }, + 'params': { + 'key': 'AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8', + }, + }, + '_common': { + '_access_token': None, + 'json': { + 'contentCheckOk': True, + 'context': { + 'client': { + 'gl': None, + 'hl': None, + }, + }, + 'playbackContext': { + 'contentPlaybackContext': { + 'html5Preference': 'HTML5_PREF_WANTS', + }, + }, + 'racyCheckOk': True, + 'thirdParty': {}, + 'user': { + 'lockedSafetyMode': False + }, + 'videoId': None, + }, + 'headers': { + 'Origin': 'https://www.youtube.com', + 'Referer': 'https://www.youtube.com/watch?v={json[videoId]}', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', + 'Accept': '*/*', + 'Accept-Language': 'en-US,en;q=0.5', + 'Authorization': 'Bearer {_access_token}', + }, + 'params': { + 'key': None, + 'prettyPrint': 'false' + }, + }, } - def __init__(self, context, access_token='', api_key='', language='en-US'): + def __init__(self, context, access_token='', language='en-US'): + settings = context.get_settings() + + self.video_id = None self._context = context self._data_cache = self._context.get_data_cache() - self._verify = context.get_settings().verify_ssl() - self._language = language.replace('-', '_') - self.language = context.get_settings().get_string('youtube.language', 'en_US').replace('-', '_') - self.region = context.get_settings().get_string('youtube.region', 'US') + self._verify = settings.verify_ssl() + self._language = (settings.get_string('youtube.language', language) + .replace('-', '_')) + self._language_base = self._language[0:2] self._access_token = access_token - self._api_key = api_key - self._calculate_n = None + self._player_js = None + self._calculate_n = True + self._cipher = None + + self._selected_client = None + client_selection = settings.client_selection() + + # All client selections use the Android client as the first option to + # ensure that the age gate setting is enforced, regardless of login + # status + + # Alternate #1 + # Will play most videos with subtitles at full resolution with HDR + # Some restricted videos may only play at 720p + # Some restricted videos require additional requests for subtitles + if client_selection == 1: + self._prioritised_clients = ( + 'android', + 'android_embedded', + 'android_youtube_tv', + 'android_testsuite', + ) + # Alternate #2 + # Will play most videos at full resolution with HDR + # Most videos wont show subtitles + # Useful for testing AV1 HDR + elif client_selection == 2: + self._prioritised_clients = ( + 'android', + 'android_testsuite', + 'android_youtube_tv', + 'android_embedded', + ) + # Default + # Will play most videos with subtitles at full resolution with HDR + # Some restricted videos require additional requests for subtitles + else: + self._prioritised_clients = ( + 'android', + 'android_youtube_tv', + 'android_testsuite', + 'android_embedded', + ) + + self.CLIENTS['_common']['json']['context']['client'] = { + 'hl': self._language, + 'gl': settings.get_string('youtube.region', 'US'), + } @staticmethod - def generate_cpn(): + def _generate_cpn(): # https://github.com/rg3/youtube-dl/blob/master/youtube_dl/extractor/youtube.py#L1381 # LICENSE: The Unlicense # cpn generation algorithm is reverse engineered from base.js. # In fact it works even with dummy cpn. - cpn_alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_' - cpn = ''.join((cpn_alphabet[random.randint(0, 256) & 63] for _ in range(0, 16))) - return cpn - - def calculate_n(self, url): - if not self._calculate_n: - self._context.log_debug('`n` was not calculated for %s' % url) - return url - - parsed_query = dict(urllib.parse.parse_qsl(urllib.parse.urlsplit(url).query)) - - if parsed_query.get('ratebypass', 'no') != 'yes' and 'n' in parsed_query: - # Cipher n to get the updated value - initial_n = list(parsed_query['n']) - new_n = self._calculate_n.calculate_n(initial_n) - if new_n: - parsed_query['n'] = new_n - parsed_query['ratebypass'] = 'yes' - parsed_url = urllib.parse.urlsplit(url) - url = '%s://%s%s?%s' % \ - (parsed_url.scheme, parsed_url.netloc, - parsed_url.path, urllib.parse.urlencode(parsed_query)) - - return url + cpn_alphabet = ('abcdefghijklmnopqrstuvwxyz' + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + '0123456789-_') + # Python 2 compatible method + # cpn = ''.join(cpn_alphabet[random.randint(0, 63)] for _ in range(16)) + # return cpn + return ''.join(random.choices(cpn_alphabet, k=16)) def load_stream_infos(self, video_id): - return self._method_get_video_info(video_id) - - def get_watch_page(self, video_id): - headers = self.MOBILE_HEADERS.copy() - headers['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' - if self._access_token: - headers['Authorization'] = 'Bearer %s' % self._access_token - - url = 'https://www.youtube.com/watch?v={video_id}'.format(video_id=video_id) - cookies = {'CONSENT': 'YES+cb.20210615-14-p0.en+FX+294'} - - result = requests.get(url, headers=headers, verify=self._verify, - cookies=cookies, allow_redirects=True) - - return {'url': result.url, 'html': result.text, 'cookies': result.cookies} - - def get_embed_page(self, video_id): - headers = self.MOBILE_HEADERS.copy() - headers['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' - if self._access_token: - headers['Authorization'] = 'Bearer %s' % self._access_token + self.video_id = video_id + return self._get_video_info() + + def _build_client(self, client_name, auth_header=False): + def _merge_dicts(item1, item2): + if not isinstance(item1, dict) or not isinstance(item2, dict): + return item1 if item2 is ... else item2 + new = {} + for key in (item1.keys() | item2.keys()): + value = _merge_dicts(item1.get(key, ...), item2.get(key, ...)) + if value is ...: + continue + if isinstance(value, str) and '{' in value: + _format['{0}.{1}'.format(id(new), key)] = (new, key, value) + new[key] = value + return new or ... + _format = {} + + client = (self.CLIENTS.get(client_name) or self.CLIENTS['web']).copy() + client = _merge_dicts(self.CLIENTS['_common'], client) + + client['json']['videoId'] = self.video_id + if auth_header and self._access_token: + client['_access_token'] = self._access_token + client['params'] = None + elif 'Authorization' in client['headers']: + del client['headers']['Authorization'] + + for values, key, value in _format.values(): + if key in values: + values[key] = value.format(**client) + + return client + + def _request(self, url, method='GET', + cookies=None, data=None, headers=None, json=None, params=None, + error_msg=None, raise_error=False, timeout=(3.05, 27), **_): + try: + result = requests.request(method, url, + verify=self._verify, + allow_redirects=True, + timeout=timeout, + cookies=cookies, + data=data, + headers=headers, + json=json, + params=params) + result.raise_for_status() + except requests.exceptions.RequestException as error: + response = error.response and error.response.text + self._context.log_debug('Response: {0}'.format(response)) + self._context.log_error('{0}\n{1}'.format( + error_msg or 'Request failed', traceback.format_exc() + )) + if raise_error: + raise YouTubeException(error_msg) from error + return None + return result - url = 'https://www.youtube.com/embed/{video_id}'.format(video_id=video_id) + def _get_player_page(self, client='web', embed=False): + client = self._build_client(client) + if embed: + url = 'https://www.youtube.com/embed/{0}'.format(self.video_id) + else: + url = 'https://www.youtube.com/watch?v={0}'.format(self.video_id) cookies = {'CONSENT': 'YES+cb.20210615-14-p0.en+FX+294'} - result = requests.get(url, headers=headers, verify=self._verify, - cookies=cookies, allow_redirects=True) - - return {'url': result.url, 'html': result.text, 'cookies': result.cookies} + result = self._request( + url, cookies=cookies, headers=client['headers'], + error_msg=('Failed to get player html for video_id: {0}' + .format(self.video_id)) + ) + if result: + return result + return None @staticmethod - def get_player_client(config): + def _get_player_client(config): return config.get('INNERTUBE_CONTEXT', {}).get('client', {}) - def get_player_key(self, html): + def _get_player_key(self, html): + if not html: + return None + pattern = 'INNERTUBE_API_KEY":"' start_index = html.find(pattern) if start_index != -1: start_index += len(pattern) end_index = html.find('"', start_index) - self._context.log_debug('Player key found') - return html[start_index:end_index] - else: - return None + player_key = html[start_index:end_index] + self._context.log_debug('Player key found: {0}'.format(player_key)) + return player_key + return None @staticmethod - def get_player_config(html): - config = {} - - found = re.search( - r'window\.ytplayer\s*=\s*{}\s*;\s*ytcfg\.set\((?P.+?)\)\s*;\s*(?:ytcfg|var setMessage\s*=\s*)', html - ) - - if found: - config = json.loads(found.group('config')) - - return config + def _get_player_config(page): + if not page: + return None - @staticmethod - def get_player_response(html): - response = {} + # pattern source is from youtube-dl + # https://github.com/ytdl-org/youtube-dl/blob/master/youtube_dl/extractor/youtube.py#L313 + # LICENSE: The Unlicense + found = re.search(r'ytcfg\.set\s*\(\s*({.+?})\s*\)\s*;', page.text) - found = re.search( - r'ytInitialPlayerResponse\s*=\s*(?P{.+?})\s*;\s*(?:var\s+meta|[^"]*base.js)"', html) + if not js_url: + return '' - if found: - javascript_url = found.group('url') + js_url = self._normalize_url(js_url) + self._data_cache.set('player_js_url', json_dumps({'url': js_url})) - javascript_url = _normalize(javascript_url) - cache_key = urllib.parse.quote(javascript_url) - cached_js = self._data_cache.get_item(DataCache.ONE_HOUR * 4, cache_key) + cache_key = quote(js_url) + cached_js = self._data_cache.get_item( + DataCache.ONE_HOUR * 4, cache_key + ).get('js') if cached_js: return cached_js - headers = self.MOBILE_HEADERS.copy() - result = requests.get(javascript_url, headers=headers, verify=False, allow_redirects=True) - javascript = result.text + client = self._build_client('web') + result = self._request( + js_url, headers=client['headers'], + error_msg=('Failed to get player js for video_id: {0}' + .format(self.video_id)) + ) + if not result: + return '' - self._data_cache.set(javascript_url, cache_key) + javascript = result.text + self._data_cache.set(cache_key, json_dumps({'js': javascript})) return javascript @staticmethod - def make_curl_headers(headers, cookies=None): - output = '' + def _make_curl_headers(headers, cookies=None): + output = [] if cookies: - output += 'Cookie={all_cookies}'.format( - all_cookies=urllib.parse.quote( - '; '.join('{0}={1}'.format(c.name, c.value) for c in cookies) - ) - ) - output += '&' - # Headers to be used in function 'to_play_item' of 'xbmc_items.py'. - output += '&'.join('{0}={1}'.format(key, urllib.parse.quote(headers[key])) - for key in headers) - return output + output.append('Cookie={0}'.format(quote('; '.join( + '{0.name}={0.value}'.format(cookie) + for cookie in cookies + )))) + # Headers to be used in function 'to_play_item' of 'xbmc_items.py' + output.extend('{0}={1}'.format(key, quote(value)) + for key, value in headers.items()) + return '&'.join(output) + + @staticmethod + def _normalize_url(url): + if not url: + url = '' + elif url.startswith(('http://', 'https://')): + pass + elif url.startswith('//'): + url = urljoin('https:', url) + elif url.startswith('/'): + url = urljoin('https://www.youtube.com', url) + return url + + def _load_hls_manifest(self, url, live_type=None, meta_info=None, headers=None, playback_stats=None): + if not url: + return [] - def _load_manifest(self, url, video_id, meta_info=None, playback_stats=None): - headers = self.MOBILE_HEADERS.copy() - headers['Referer'] = 'https://www.youtube.com/watch?v=%s' % video_id - headers['Origin'] = 'https://www.youtube.com' + if not headers and self._selected_client: + headers = self._selected_client['headers'].copy() + if 'Authorization' in headers: + del headers['Authorization'] + else: + headers = self._build_client('web')['headers'] + curl_headers = self._make_curl_headers(headers, cookies=None) + + result = self._request( + url, headers=headers, + error_msg=('Failed to get manifest for video_id: {0}' + .format(self.video_id)) + ) + if not result: + return () - curl_headers = self.make_curl_headers(headers, cookies=None) + if meta_info is None: + meta_info = {'video': {}, + 'channel': {}, + 'images': {}, + 'subtitles': []} if playback_stats is None: playback_stats = {} - try: - result = requests.get(url, headers=headers, verify=self._verify, allow_redirects=True) - result.raise_for_status() - except: - # Failed to get the M3U8 playlist file. Add a log debug in this case? - return () + if live_type is None: + live_type = self._context.get_settings().get_live_stream_type() + + if 'hls' in live_type: + if live_type == 'hls': + yt_format = self.FORMAT['9995'] + else: + yt_format = self.FORMAT['9996'] + stream = {'url': url, + 'meta': meta_info, + 'headers': curl_headers, + 'playback_stats': playback_stats} + stream.update(yt_format) + stream_list = [stream] + else: + stream_list = [] - _meta_info = {'video': {}, - 'channel': {}, - 'images': {}, - 'subtitles': []} - meta_info = meta_info if meta_info else _meta_info - streams = [] # The playlist might include a #EXT-X-MEDIA entry, but it's usually for # a small default stream with itag 133 (240p) and can be ignored. # Capture the URL of a .m3u8 playlist and the itag value from that URL. - re_playlist_data = re.compile(r'#EXT-X-STREAM-INF[^#]+(?Phttp[^\s]+/itag/(?P\d+)[^\s]+)') + re_playlist_data = re.compile( + r'#EXT-X-STREAM-INF[^#]+' + r'(?Phttp[^\s]+/itag/(?P\d+)[^\s]+)' + ) for match in re_playlist_data.finditer(result.text): playlist_url = match.group('url') itag = match.group('itag') - yt_format = self.FORMAT.get(itag, None) + yt_format = self.FORMAT.get(itag) if not yt_format: - self._context.log_debug('unknown yt_format for itag "%s"' % itag) + self._context.log_debug('Unknown itag: {0}'.format(itag)) continue - video_stream = {'url': playlist_url, - 'meta': meta_info, - 'headers': curl_headers, - 'playback_stats': playback_stats - } - video_stream.update(yt_format) - streams.append(video_stream) - return streams - - def _method_get_video_info(self, video_id): - headers = self.MOBILE_HEADERS.copy() - - params = None - if self._access_token: - headers['Authorization'] = 'Bearer %s' % self._access_token + stream = {'url': playlist_url, + 'meta': meta_info, + 'headers': curl_headers, + 'playback_stats': playback_stats} + stream.update(yt_format) + stream_list.append(stream) + return stream_list + + def _create_stream_list(self, streams, meta_info=None, headers=None, playback_stats=None): + if not headers and self._selected_client: + headers = self._selected_client['headers'].copy() + if 'Authorization' in headers: + del headers['Authorization'] else: - params = { - 'key': self._api_key - } - video_info_url = 'https://youtubei.googleapis.com/youtubei/v1/player' - # payload = {'videoId': video_id, - # 'context': {'client': {'clientVersion': '1.20210909.07.00', 'gl': self.region, - # 'clientName': 'WEB_CREATOR', 'hl': self.language}}} - - # payload = {'videoId': video_id, - # 'context': {'client': {'clientVersion': '16.05', 'gl': self.region, - # 'clientName': 'ANDROID', 'clientScreen': 'EMBED', - # 'hl': self.language}}} - - payload = {'videoId': video_id, - 'context': {'client': {'clientVersion': '16.49', 'gl': self.region, - 'clientName': 'ANDROID', 'hl': self.language}}, - 'thirdParty': {'embedUrl': 'https://google.com'} - } + headers = self._build_client('web')['headers'] + curl_headers = self._make_curl_headers(headers, cookies=None) + + if meta_info is None: + meta_info = {'video': {}, + 'channel': {}, + 'images': {}, + 'subtitles': []} + if playback_stats is None: + playback_stats = {} - player_response = {} - for attempt in range(2): - try: - r = requests.post(video_info_url, params=params, json=payload, - headers=headers, verify=self._verify, cookies=None, - allow_redirects=True) - r.raise_for_status() - player_response = r.json() - if player_response.get('playabilityStatus', {}).get('status', 'OK') in \ - ('AGE_CHECK_REQUIRED', 'UNPLAYABLE', 'CONTENT_CHECK_REQUIRED') and attempt == 0: - payload['context']['client']['clientName'] = 'ANDROID_EMBEDDED_PLAYER' - payload['context']['client']['clientVersion'] = '16.20' - continue - except: - error_message = 'Failed to get player response for video_id "%s"' % video_id - self._context.log_error(error_message + '\n' + traceback.format_exc()) - raise YouTubeException(error_message) + stream_list = [] + for stream_map in streams: + url = stream_map.get('url') + conn = stream_map.get('conn') - # Make a set of URL-quoted headers to be sent to Kodi when requesting - # the stream during playback. The YT player doesn't seem to use any - # cookies when doing that, so for now cookies are ignored. - # curl_headers = self.make_curl_headers(headers, cookies) - curl_headers = self.make_curl_headers(headers, cookies=None) + if not url and conn: + url = '%s?%s' % (conn, unquote(stream_map['stream'])) + elif not url and self._cipher and 'signatureCipher' in stream_map: + url = self._process_signature_cipher(stream_map) - playability_status = player_response.get('playabilityStatus', {}) + if not url: + continue + url = self._process_url_params(url) - video_details = player_response.get('videoDetails', {}) - is_live_content = video_details.get('isLiveContent') is True - streaming_data = player_response.get('streamingData', {}) + itag = str(stream_map['itag']) + stream_map['itag'] = itag + yt_format = self.FORMAT.get(itag) + if not yt_format: + self._context.log_debug('Unknown itag: {0}'.format(itag)) + continue + if (yt_format.get('discontinued') or yt_format.get('unsupported') + or (yt_format.get('dash/video') + and not yt_format.get('dash/audio'))): + continue - live_url = streaming_data.get('hlsManifestUrl', '') or \ - player_response.get('streamingData', {}).get('hlsManifestUrl', '') - is_live = is_live_content and live_url + stream = {'url': url, + 'meta': meta_info, + 'headers': curl_headers, + 'playback_stats': playback_stats} + stream.update(yt_format) - meta_info = {'video': {}, - 'channel': {}, - 'images': {}, - 'subtitles': []} + if 'audioTrack' in stream_map: + audio_track = stream_map['audioTrack'] + display_name = audio_track['displayName'] + stream['title'] = '{0} {1}'.format( + stream['title'], display_name + ) + stream['sort'] = stream['sort'] + [ + not audio_track['id'].startswith(self._language_base), + 'original' not in display_name, + display_name + ] - meta_info['video']['id'] = video_details.get('videoId', video_id) + stream_list.append(stream) + return stream_list - meta_info['video']['title'] = video_details.get('title', '') - meta_info['channel']['author'] = video_details.get('author', '') + def _process_signature_cipher(self, stream_map): + signature_cipher = parse_qs(stream_map['signatureCipher']) + url = signature_cipher.get('url', [None])[0] + encrypted_signature = signature_cipher.get('s', [None])[0] + query_var = signature_cipher.get('sp', ['signature'])[0] - meta_info['video']['title'] = meta_info['video']['title'].encode('raw_unicode_escape') - meta_info['channel']['author'] = meta_info['channel']['author'].encode('raw_unicode_escape') + if not url or not encrypted_signature: + return None - if PY2: + signature = self._data_cache.get_item( + DataCache.ONE_HOUR * 4, encrypted_signature + ).get('sig') + if not signature: try: - if r'\u' not in meta_info['video']['title']: - meta_info['video']['title'] = meta_info['video']['title'].decode('utf-8') - meta_info['channel']['author'] = meta_info['channel']['author'].decode('utf-8') - else: - meta_info['video']['title'] = meta_info['video']['title'].decode('raw_unicode_escape') - meta_info['channel']['author'] = meta_info['channel']['author'].decode('raw_unicode_escape') - except UnicodeDecodeError: - meta_info['video']['title'] = meta_info['video']['title'].decode('raw_unicode_escape') - meta_info['channel']['author'] = meta_info['channel']['author'].decode('raw_unicode_escape') - else: - meta_info['video']['title'] = meta_info['video']['title'].decode('raw_unicode_escape') - meta_info['channel']['author'] = meta_info['channel']['author'].decode('raw_unicode_escape') - - meta_info['video']['title'] = unescape(meta_info['video']['title']) - meta_info['channel']['author'] = unescape(meta_info['channel']['author']) - - meta_info['channel']['id'] = video_details.get('channelId', '') - image_data_list = [ - {'from': 'iurlhq', 'to': 'high', 'image': 'hqdefault.jpg'}, - {'from': 'iurlmq', 'to': 'medium', 'image': 'mqdefault.jpg'}, - {'from': 'iurlsd', 'to': 'standard', 'image': 'sddefault.jpg'}, - {'from': 'thumbnail_url', 'to': 'default', 'image': 'default.jpg'}] - for image_data in image_data_list: - image_url = 'https://i.ytimg.com/vi/{video_id}/{image}'.format(video_id=video_id, image=image_data['image']) - if image_url: - if is_live: - image_url = image_url.replace('.jpg', '_live.jpg') - meta_info['images'][image_data['to']] = image_url - - microformat = player_response.get('microformat', {}).get('playerMicroformatRenderer', {}) - meta_info['video']['status'] = { - 'unlisted': microformat.get('isUnlisted', False), - 'private': video_details.get('isPrivate', False), - 'crawlable': video_details.get('isCrawlable', False), - 'family_safe': microformat.get('isFamilySafe', False), - 'live': is_live, - } + signature = self._cipher.get_signature(encrypted_signature) + except Exception as error: + self._context.log_debug('{0}: {1}\n{2}'.format( + error, encrypted_signature, traceback.format_exc() + )) + self._context.log_error( + 'Failed to extract URL from signatureCipher' + ) + return None + self._data_cache.set( + encrypted_signature, json_dumps({'sig': signature}) + ) - if playability_status.get('status', 'ok').lower() != 'ok': - if not ((playability_status.get('desktopLegacyAgeGateReason', 0) == 1) and not self._context.get_settings().age_gate()): - reason = None - if playability_status.get('status') == 'LIVE_STREAM_OFFLINE': - if playability_status.get('reason'): - reason = playability_status.get('reason') - else: - live_streamability = playability_status.get('liveStreamability', {}) - live_streamability_renderer = live_streamability.get('liveStreamabilityRenderer', {}) - offline_slate = live_streamability_renderer.get('offlineSlate', {}) - live_stream_offline_slate_renderer = offline_slate.get('liveStreamOfflineSlateRenderer', {}) - renderer_main_text = live_stream_offline_slate_renderer.get('mainText', {}) - main_text_runs = renderer_main_text.get('runs', [{}]) - reason_text = [] - for text in main_text_runs: - reason_text.append(text.get('text', '')) - if reason_text: - reason = ''.join(reason_text) - else: - reason = playability_status.get('reason') - - if 'errorScreen' in playability_status and 'playerErrorMessageRenderer' in playability_status['errorScreen']: - status_renderer = playability_status['errorScreen']['playerErrorMessageRenderer'] - status_reason = status_renderer.get('reason', {}) - main_text_runs = status_reason.get('runs', [{}]) - reason_text = [] - descript_reason = '' - for text in main_text_runs: - reason_text.append(text.get('text', '')) - if reason_text: - descript_reason = ''.join(reason_text) - if descript_reason: - reason = descript_reason - else: - general_reason = status_renderer.get('reason', {}).get('simpleText') - if general_reason: - reason = general_reason + if signature: + url = '{0}&{1}={2}'.format(url, query_var, signature) + return url + return None - if not reason: - reason = 'UNKNOWN' + def _process_url_params(self, url): + if not url: + return url - if PY2: - try: - reason = reason.encode('raw_unicode_escape').decode('utf-8') - except: - pass + parts = urlsplit(url) + query = parse_qs(parts.query) + new_query = {} + update_url = False - raise YouTubeException(reason) + if (self._calculate_n and 'n' in query + and query.get('ratebypass', [None])[0] != 'yes'): + self._player_js = self._player_js or self._get_player_js() + if self._calculate_n is True: + self._context.log_debug('nsig detected') + self._calculate_n = ratebypass.CalculateN(self._player_js) - captions = player_response.get('captions', {}) - meta_info['subtitles'] = Subtitles(self._context, self.MOBILE_HEADERS, - video_id, captions).get_subtitles() + # Cipher n to get the updated value + new_n = self._calculate_n.calculate_n(query['n']) + if new_n: + new_query['n'] = new_n + new_query['ratebypass'] = 'yes' + else: + self._context.log_error('nsig handling failed') + self._calculate_n = False - playback_stats = { - 'playback_url': '', - 'watchtime_url': '' - } + if 'range' not in query: + content_length = query.get('clen', [''])[0] + new_query['range'] = '0-{0}'.format(content_length) - playback_tracking = player_response.get('playbackTracking', {}) - playback_url = playback_tracking.get('videostatsPlaybackUrl', {}).get('baseUrl', '') - watchtime_url = playback_tracking.get('videostatsWatchtimeUrl', {}).get('baseUrl', '') - - if playback_url and playback_url.startswith('http'): - playback_stats['playback_url'] = ''.join([ - playback_url, - '&ver=2&fs=0&volume=100&muted=0', - '&cpn={cpn}'.format(cpn=self.generate_cpn()) - ]) - - if watchtime_url and watchtime_url.startswith('http'): - playback_stats['watchtime_url'] = ''.join([ - watchtime_url, - '&ver=2&fs=0&volume=100&muted=0', - '&cpn={cpn}'.format(cpn=self.generate_cpn()), - '&st={st}&et={et}&state={state}' - ]) + if new_query: + query.update(new_query) + elif not update_url: + return url - stream_list = [] + return urlunsplit((parts.scheme, + parts.netloc, + parts.path, + urlencode(query, doseq=True), + parts.fragment)) + + @staticmethod + def _get_error_details(playability_status, details=None): + if not playability_status: + return None + if not details: + details = ( + 'errorScreen', + ('playerErrorMessageRenderer', 'confirmDialogRenderer'), + ('reason', 'title') + ) - if live_url: - stream_list.extend(self._load_manifest(live_url, video_id, - meta_info=meta_info, - playback_stats=playback_stats)) + result = playability_status + for keys in details: + is_dict = isinstance(result, dict) + if not is_dict and not isinstance(result, list): + return None + + if not isinstance(keys, (list, tuple)): + keys = [keys] + for key in keys: + if is_dict: + if key not in result: + continue + elif not isinstance(key, int) or len(result) <= key: + continue + result = result[key] + break + else: + return None + + if 'runs' not in result: + return result + + detail_texts = [ + text['text'] + for text in result['runs'] + if text and 'text' in text and text['text'] + ] + if detail_texts: + return ''.join(detail_texts) + if 'simpleText' in result: + return result['simpleText'] + return None + + def _get_video_info(self): + auth_header = bool(self._access_token) + video_info_url = 'https://www.youtube.com/youtubei/v1/player' + + _settings = self._context.get_settings() + playability_status = status = reason = None + for _ in range(2): + for client_name in self._prioritised_clients: + client = self._build_client(client_name, auth_header) + + result = self._request( + video_info_url, 'POST', **client, + error_msg=( + 'Player response failed for video_id: {0},' + ' using {1} client ({2})' + .format(self.video_id, + client_name, + 'logged in' if auth_header else 'logged out') + ), + raise_error=True + ) - httpd_is_live = (self._context.get_settings().use_dash_videos() and - is_httpd_live(port=self._context.get_settings().httpd_port())) + response = result.json() + playability_status = response.get('playabilityStatus', {}) + status = playability_status.get('status', '').upper() + reason = playability_status.get('reason', '') + + if status in {'', 'AGE_CHECK_REQUIRED', 'UNPLAYABLE', + 'CONTENT_CHECK_REQUIRED', 'LOGIN_REQUIRED', + 'AGE_VERIFICATION_REQUIRED', 'ERROR'}: + if (playability_status.get('desktopLegacyAgeGateReason') + and _settings.age_gate()): + break + # Geo-blocked video with error reasons like: + # "This video contains content from XXX, who has blocked it in your country on copyright grounds" + # "The uploader has not made this video available in your country" + if status == 'UNPLAYABLE' and 'country' in reason: + break + if status != 'ERROR': + continue + # This is used to check for error like: + # "The following content is not available on this app." + # Text will vary depending on Accept-Language and client hl + # Youtube support url is checked instead + url = self._get_error_details( + playability_status, + details=( + 'errorScreen', + 'playerErrorMessageRenderer', + 'learnMore', + 'runs', 0, + 'navigationEndpoint', + 'urlEndpoint', + 'url' + ) + ) + if url and url.startswith('//support.google.com/youtube/answer/12318250'): + continue + break + # Only attempt to remove Authorization header if clients iterable + # was exhausted i.e. request attempted using all clients + else: + if auth_header: + auth_header = False + continue + # Otherwise skip retrying clients without Authorization header + break - s_info = dict() + if status != 'OK': + if status == 'LIVE_STREAM_OFFLINE': + if not reason: + reason = self._get_error_details( + playability_status, + details=( + 'liveStreamability', + 'liveStreamabilityRenderer', + 'offlineSlate', + 'liveStreamOfflineSlateRenderer', + 'mainText' + ) + ) + elif not reason: + reason = self._get_error_details(playability_status) + raise YouTubeException(reason or 'UNKNOWN') + + self._context.log_debug( + 'Retrieved video info for video_id: {0}, using {1} client ({2})' + .format(self.video_id, + client['json']['context']['client']['clientName'], + 'logged in' if auth_header else 'logged out') + ) + self._selected_client = client.copy() - adaptive_fmts = streaming_data.get('adaptiveFormats', []) - std_fmts = streaming_data.get('formats', []) - mpd_url = streaming_data.get('dashManifestUrl') or \ - player_response.get('streamingData', {}).get('dashManifestUrl', '') + if 'Authorization' in client['headers']: + del client['headers']['Authorization'] + # Make a set of URL-quoted headers to be sent to Kodi when requesting + # the stream during playback. The YT player doesn't seem to use any + # cookies when doing that, so for now cookies are ignored. + # curl_headers = self._make_curl_headers(headers, cookies) + curl_headers = self._make_curl_headers(client['headers'], cookies=None) + + video_details = response.get('videoDetails', {}) + microformat = (response.get('microformat', {}) + .get('playerMicroformatRenderer', {})) + streaming_data = response.get('streamingData', {}) + is_live = '_live' if video_details.get('isLiveContent') else '' + + captions = response.get('captions') + if captions: + captions['headers'] = client['headers'] + elif client.get('_query_subtitles'): + result = self._request( + video_info_url, 'POST', **self._build_client('smarttv', True), + error_msg=('Caption request failed to get player response for' + 'video_id: {0}'.format(self.video_id)), + ) + + response = result.json() + captions = response.get('captions') + if captions: + captions['headers'] = result.request.headers + if captions: + captions = Subtitles( + self._context, self.video_id, captions + ) + default_lang = captions.get_default_lang() + captions = captions.get_subtitles() + else: + default_lang = {'code': 'und', 'is_asr': False} + + meta_info = { + 'video': { + 'id': video_details.get('videoId', self.video_id), + 'title': unescape(video_details.get('title', '') + .encode('raw_unicode_escape') + .decode('raw_unicode_escape')), + 'status': { + 'unlisted': microformat.get('isUnlisted', False), + 'private': video_details.get('isPrivate', False), + 'crawlable': video_details.get('isCrawlable', False), + 'family_safe': microformat.get('isFamilySafe', False), + 'live': bool(is_live), + }, + }, + 'channel': { + 'id': video_details.get('channelId', ''), + 'author': unescape(video_details.get('author', '') + .encode('raw_unicode_escape') + .decode('raw_unicode_escape')), + }, + 'images': { + 'high': ('https://i.ytimg.com/vi/{0}/hqdefault{1}.jpg' + .format(self.video_id, is_live)), + 'medium': ('https://i.ytimg.com/vi/{0}/mqdefault{1}.jpg' + .format(self.video_id, is_live)), + 'standard': ('https://i.ytimg.com/vi/{0}/sddefault{1}.jpg' + .format(self.video_id, is_live)), + 'default': ('https://i.ytimg.com/vi/{0}/default{1}.jpg' + .format(self.video_id, is_live)), + }, + 'subtitles': captions or [], + } + + if _settings.use_remote_history(): + playback_stats = { + 'playback_url': ( + 'videostatsPlaybackUrl', + '{0}&ver=2&fs=0&volume=100&muted=0&cpn={1}', + ), + 'watchtime_url': ( + 'videostatsWatchtimeUrl', + ('{0}&ver=2&fs=0&volume=100&muted=0&cpn={1}' + '&st={{st}}&et={{et}}&state={{state}}'), + ) + } + playback_tracking = response.get('playbackTracking', {}) + cpn = self._generate_cpn() + + for key, (url, url_template) in playback_stats.items(): + url = playback_tracking.get(url, {}).get('baseUrl') + if not url or not url.startswith('http'): + playback_stats[key] = '' + playback_stats[key] = url_template.format(url, cpn) + else: + playback_stats = { + 'playback_url': '', + 'watchtime_url': '', + } + + httpd_is_live = (_settings.use_mpd() and + is_httpd_live(port=_settings.httpd_port())) - license_info = {'url': None, 'proxy': None, 'token': None} pa_li_info = streaming_data.get('licenseInfos', []) - if pa_li_info and (pa_li_info != ['']) and not httpd_is_live: + if any(pa_li_info) and not httpd_is_live: raise YouTubeException('Proxy is not running') for li_info in pa_li_info: - if li_info.get('drmFamily') == 'WIDEVINE': - license_info['url'] = li_info.get('url', None) - if license_info['url']: - self._context.log_debug('Found widevine license url: |%s|' % license_info['url']) - li_ipaddress = self._context.get_settings().httpd_listen() - if li_ipaddress == '0.0.0.0': - li_ipaddress = '127.0.0.1' - proxy_addr = \ - ['http://{ipaddress}:{port}/widevine'.format( - ipaddress=li_ipaddress, - port=self._context.get_settings().httpd_port() - ), '||R{SSM}|'] - license_info['proxy'] = ''.join(proxy_addr) - license_info['token'] = self._access_token - break + if li_info.get('drmFamily') != 'WIDEVINE': + continue + url = li_info.get('url') + if not url: + continue + self._context.log_debug('Found widevine license url: {0}' + .format(url)) + license_info = { + 'url': url, + 'proxy': 'http://{0}:{1}/widevine||R{{SSM}}|'.format( + _settings.httpd_listen(for_request=True), + _settings.httpd_port() + ), + 'token': self._access_token, + } + break + else: + license_info = { + 'url': None, + 'proxy': None, + 'token': None + } - if not is_live and httpd_is_live and adaptive_fmts: - mpd_url, s_info = self.generate_mpd(video_id, - adaptive_fmts, - video_details.get('lengthSeconds', '0'), - license_info.get('url')) + stream_list = [] + adaptive_fmts = streaming_data.get('adaptiveFormats', []) + all_fmts = streaming_data.get('formats', []) + adaptive_fmts + + if any(True for fmt in all_fmts + if fmt and 'url' not in fmt and 'signatureCipher' in fmt): + self._context.log_debug('signatureCipher detected') + self._player_js = self._get_player_js() + self._cipher = Cipher(self._context, javascript=self._player_js) + + manifest_url = None + if is_live: + live_type = _settings.get_live_stream_type() + if live_type == 'ia_mpd': + manifest_url = streaming_data.get('dashManifestUrl', '') + else: + stream_list.extend(self._load_hls_manifest( + streaming_data.get('hlsManifestUrl'), + live_type, meta_info, client['headers'], playback_stats + )) + elif httpd_is_live and adaptive_fmts: + video_data, audio_data = self._process_stream_data( + adaptive_fmts, default_lang['code'] + ) + manifest_url, main_stream = self._generate_mpd_manifest( + video_data, audio_data, license_info.get('url') + ) - if mpd_url: + if manifest_url: video_stream = { - 'url': mpd_url, + 'url': manifest_url, 'meta': meta_info, 'headers': curl_headers, 'license_info': license_info, @@ -963,499 +1567,570 @@ def _method_get_video_info(self, video_id): } if is_live: - video_stream['url'] = '&'.join([video_stream['url'], 'start_seq=$START_NUMBER$']) - video_stream.update(self.FORMAT.get('9998')) + # MPD structure has segments with additional attributes + # and url has changed from using a query string to using url params + # This breaks the InputStream.Adaptive partial manifest update + video_stream['url'] = ('{0}?start_seq=$START_NUMBER$' + .format(video_stream['url'])) + details = self.FORMAT.get('9998') else: - if not s_info: - video_stream.update(self.FORMAT.get('9999')) - else: - has_video = (s_info['video']['codec'] != '') and (int(s_info['video']['bandwidth']) > 0) - if has_video: - video_stream.update(self.FORMAT.get('9999')) - video_stream['video']['height'] = s_info['video']['height'] - video_stream['video']['encoding'] = s_info['video']['codec'] - else: - video_stream.update(self.FORMAT.get('9997')) - video_stream['audio']['encoding'] = s_info['audio']['codec'] - if s_info['video']['quality_label']: - video_stream['title'] = s_info['video']['quality_label'] - else: - if has_video: - video_stream['title'] = '%sp%s' % (s_info['video']['height'], s_info['video']['fps']) - else: - video_stream['title'] = '%s@%s' % (s_info['audio']['codec'], str(s_info['audio'].get('bitrate', 0))) - if int(s_info['audio'].get('bitrate', 0)) > 0: - video_stream['audio']['bitrate'] = int(s_info['audio'].get('bitrate', 0)) + details = self.FORMAT.get('9999').copy() + + video_info = main_stream['video'] + details['title'] = [video_info['label']] + details['video']['encoding'] = video_info['codec'] + details['video']['height'] = video_info['height'] + + audio_info = main_stream['audio'] + if audio_info: + details['audio']['encoding'] = audio_info['codec'] + details['audio']['bitrate'] = audio_info['bitrate'] // 1000 + if audio_info['langCode'] not in {'', 'und'}: + details['title'].extend((' ', audio_info['langName'])) + if default_lang['is_asr']: + details['title'].append(' [ASR]') + if main_stream['multi_lang']: + details['title'].extend(( + ' [', self._context.localize(30762), ']' + )) + if main_stream['multi_audio']: + details['title'].extend(( + ' [', self._context.localize(30763), ']' + )) + + details['title'] = ''.join(details['title']) + + video_stream.update(details) stream_list.append(video_stream) - def parse_to_stream_list(streams): - for item in streams: - stream_map = item + # extract streams from map + if all_fmts: + stream_list.extend(self._create_stream_list( + all_fmts, meta_info, client['headers'], playback_stats + )) - url = stream_map.get('url', None) - conn = stream_map.get('conn', None) + # last fallback + if not stream_list: + raise YouTubeException('No streams found') - stream_map['itag'] = str(stream_map['itag']) + return stream_list - if url: - itag = stream_map['itag'] - yt_format = self.FORMAT.get(itag, None) - if not yt_format: - self._context.log_debug('unknown yt_format for itag "%s"' % itag) - continue + def _process_stream_data(self, stream_data, default_lang_code='und'): + _settings = self._context.get_settings() + qualities = _settings.get_mpd_video_qualities() + ia_capabilities = self._context.inputstream_adaptive_capabilities() + stream_features = _settings.stream_features() + allow_hdr = 'hdr' in stream_features + allow_hfr = 'hfr' in stream_features + allow_ssa = 'ssa' in stream_features + stream_select = _settings.stream_select() + + fps_scale_map = { + 0: '{0}000/1000', # --.00 fps + 24: '24000/1001', # 23.97 fps + 30: '30000/1001', # 29.97 fps + 60: '60000/1001', # 59.97 fps + } - if yt_format.get('discontinued', False) or yt_format.get('unsupported', False) or \ - (yt_format.get('dash/video', False) and not yt_format.get('dash/audio', False)): - continue + quality_factor_map = { + # video - order based on comparative compression ratio + 'av01': 1, + 'vp9': 0.75, + 'vp8': 0.55, + 'avc1': 0.5, + # audio - order based on preference + 'vorbis': 0.75, + 'mp4a': 0.9, + 'opus': 1, + 'ac-3': 1.1, + 'ec-3': 1.2, + 'dts': 1.3, + } - stream = {'url': url, - 'meta': meta_info, - 'headers': curl_headers, - 'playback_stats': playback_stats} - stream.update(yt_format) - stream_list.append(stream) - elif conn: - url = '%s?%s' % (conn, urllib.parse.unquote(stream_map['stream'])) - itag = stream_map['itag'] - yt_format = self.FORMAT.get(itag, None) - if not yt_format: - self._context.log_debug('unknown yt_format for itag "%s"' % itag) - continue + audio_data = {} + video_data = {} + preferred_audio = { + 'id': '', + 'language_code': None, + 'role_type': 0, + } + for stream in stream_data: + mime_type = stream.get('mimeType') + if not mime_type: + continue - stream = {'url': url, - 'meta': meta_info, - 'headers': curl_headers, - 'playback_stats': playback_stats} - stream.update(yt_format) - if stream: - stream_list.append(stream) + itag = stream.get('itag') + if not itag: + continue - # extract streams from map - if std_fmts: - parse_to_stream_list(std_fmts) + index_range = stream.get('indexRange') + if not index_range: + continue - if adaptive_fmts: - parse_to_stream_list(adaptive_fmts) + init_range = stream.get('initRange') + if not init_range: + continue - # last fallback - if not stream_list: - raise YouTubeException('No streams found') + url = stream.get('url') + if not url and self._cipher and 'signatureCipher' in stream: + url = self._process_signature_cipher(stream) + if not url: + continue - return stream_list + mime_type, codecs = unquote(mime_type).split('; ') + codec = re.match(r'codecs="([a-z0-9]+([.\-][0-9](?="))?)', codecs) + if codec: + codec = codec.group(1) + if codec.startswith('vp9'): + codec = 'vp9' + elif codec.startswith('dts'): + codec = 'dts' + if codec not in stream_features or codec not in ia_capabilities: + continue + media_type, container = mime_type.split('/') + bitrate = stream.get('bitrate', 0) - def generate_mpd(self, video_id, adaptive_fmts, duration, license_url): - discarded_streams = list() - - def get_discarded_audio(fmt, mime_type, itag, stream, reason='unsupported'): - _discarded_stream = dict() - _discarded_stream['audio'] = dict() - _discarded_stream['audio']['itag'] = str(itag) - _discarded_stream['audio']['mime'] = str(mime_type) - _discarded_stream['audio']['codec'] = str(stream['codecs']) - if fmt: - audio_bitrate = int(fmt.get('audio', {}).get('bitrate', 0)) - if audio_bitrate > 0: - _discarded_stream['audio']['bitrate'] = audio_bitrate - codec_match = re.search('codecs="(?P[^"]+)"', _discarded_stream['audio']['codec']) - if codec_match: - _discarded_stream['audio']['codec'] = codec_match.group('codec') - _discarded_stream['audio']['bandwidth'] = int(stream['bandwidth']) - _discarded_stream['reason'] = reason - return _discarded_stream - - def get_discarded_video(mime_type, itag, stream, reason='unsupported'): - _discarded_stream = dict() - _discarded_stream['video'] = dict() - _discarded_stream['video']['itag'] = str(itag) - _discarded_stream['video']['width'] = str(stream['width']) - _discarded_stream['video']['height'] = str(stream['height']) - if stream.get('quality_label'): - _discarded_stream['video']['quality_label'] = str(stream['quality_label']) - _discarded_stream['video']['fps'] = str(stream['frameRate']) - _discarded_stream['video']['codec'] = str(stream['codecs']) - _discarded_stream['video']['mime'] = str(mime_type) - codec_match = re.search('codecs="(?P[^"]+)"', _discarded_stream['video']['codec']) - if codec_match: - _discarded_stream['video']['codec'] = codec_match.group('codec') - _discarded_stream['video']['bandwidth'] = int(stream['bandwidth']) - _discarded_stream['reason'] = reason - return _discarded_stream - - def filter_qualities(stream_data, container, sorted_qualities, fps_limit): - - data_copy = copy.deepcopy(stream_data) - - if container == 'mp4': - discard_mime = 'video/webm' - mime_type = 'video/mp4' - elif container == 'webm': - discard_mime = 'video/mp4' - mime_type = 'video/webm' - else: - return data_copy - - if fps_limit and mime_type in stream_data: - # if 30 fps limit enabled, discard streams that are greater than 30fps - if any(k for k in list(data_copy[mime_type].keys()) - if data_copy[mime_type][k]['fps'] <= 30): - for k in list(data_copy[mime_type].keys()): - if data_copy[mime_type][k]['fps'] > 30: - discarded_streams.append(get_discarded_video(mime_type, k, - data_copy[mime_type][k], - 'frame rate')) - del data_copy[mime_type][k] - - if discard_mime in data_copy: - # discard streams with unwanted mime type - for itag in list(data_copy[discard_mime].keys()): - discarded_streams.append(get_discarded_video(discard_mime, itag, - data_copy[discard_mime][itag], - 'mime type')) - del data_copy[discard_mime][itag] - del data_copy[discard_mime] - - itag_matches = [] - itag_match = None - - for idx, q in enumerate(sorted_qualities): - # find all streams with matching height - if any(itag for itag in list(data_copy[mime_type].keys()) - if int(data_copy[mime_type][itag].get('height', 0)) == q): - i_matches = [itag for itag in list(data_copy[mime_type].keys()) - if int(data_copy[mime_type][itag].get('height', 0)) == q] - itag_matches.extend(i_matches) - break + if media_type == 'audio': + data = audio_data + channels = stream.get('audioChannels', 2) + if channels > 2 and not allow_ssa: + continue - if not itag_matches: - # find best match for quality if there were no exact height candidates - for idx, q in enumerate(sorted_qualities): - if idx != len(sorted_qualities) - 1: - if any(itag for itag in list(data_copy[mime_type].keys()) - if ((int(data_copy[mime_type][itag].get('height', 0)) < q) and - (int(data_copy[mime_type][itag].get('height', 0)) >= sorted_qualities[idx + 1]))): - i_match = next(itag for itag in list(data_copy[mime_type].keys()) - if ((int(data_copy[mime_type][itag].get('height', 0)) < q) and - (int(data_copy[mime_type][itag].get('height', 0)) >= - sorted_qualities[idx + 1]))) - itag_matches.append(i_match) - break - - for itag in list(data_copy[mime_type].keys()): - # find highest fps and bandwidth itag out of all candidates - if itag in itag_matches: - if (not itag_match or itag_match.get('fps') < data_copy[mime_type][itag].get('fps') or - (itag_match.get('fps') == data_copy[mime_type][itag].get('fps') and - itag_match.get('bandwidth') < data_copy[mime_type][itag].get('bandwidth'))): - itag_match = data_copy[mime_type][itag] - - if itag_match: - for itag in list(data_copy[mime_type].keys()): - # discard all streams except the best match - if itag != itag_match.get('id'): - discarded_streams.append(get_discarded_video(mime_type, itag, - data_copy[mime_type][itag], - 'quality')) - del data_copy[mime_type][itag] - - return data_copy + if 'audioTrack' in stream: + audio_track = stream['audioTrack'] - basepath = 'special://temp/plugin.video.youtube/' - if not make_dirs(basepath): - self._context.log_debug('Failed to create directories: %s' % basepath) - return None + language = audio_track.get('id', default_lang_code) + if '.' in language: + language_code, role_type = language.split('.') + role_type = int(role_type) + else: + language_code = language + role_type = 4 + + if role_type == 4 or audio_track.get('audioIsDefault'): + role = 'main' + label = self._context.localize(30744) + elif role_type == 3: + role = 'dub' + label = self._context.localize(30745) + elif role_type == 2: + role = 'description' + label = self._context.localize(30746) + # Unsure of what other audio types are actually available + # Role set to "alternate" as default fallback + else: + role = 'alternate' + label = self._context.localize(30747) + + mime_group = '{0}_{1}.{2}'.format( + mime_type, language_code, role_type + ) + if (language_code == self._language_base and ( + not preferred_audio['id'] + or role == 'main' + or role_type > preferred_audio['role_type'] + )): + preferred_audio = { + 'id': '_{0}.{1}'.format(language_code, role_type), + 'language_code': language_code, + 'role_type': role_type, + } + else: + language_code = default_lang_code + role = 'main' + role_type = 4 + label = self._context.localize(30744) + mime_group = mime_type + + sample_rate = int(stream.get('audioSampleRate', '0'), 10) + height = width = fps = frame_rate = hdr = None + language = self._context.get_language_name(language_code) + label = '{0} ({1} kbps)'.format(label, bitrate // 1000) + if channels > 2 or 'auto' not in stream_select: + quality_group = '{0}_{1}_{2}.{3}'.format( + container, codec, language_code, role_type + ) + else: + quality_group = mime_group - has_video_stream = False - ia_capabilities = self._context.inputstream_adaptive_capabilities() + else: + data = video_data + # Could use "zxx" language code for + # "Non-Linguistic, Not Applicable" but that is too verbose + language_code = '' - ipaddress = self._context.get_settings().httpd_listen() - if ipaddress == '0.0.0.0': - ipaddress = '127.0.0.1' + fps = stream.get('fps', 0) + if fps > 30 and not allow_hfr: + continue - stream_info = {'video': {'height': '0', 'fps': '0', 'codec': '', 'mime': '', 'quality_label': '', 'bandwidth': 0}, - 'audio': {'bitrate': '0', 'codec': '', 'mime': '', 'bandwidth': 0}} + hdr = 'HDR' in stream.get('qualityLabel', '') + if hdr and not allow_hdr: + continue - data = dict() - for item in adaptive_fmts: - stream_map = item - stream_map['itag'] = str(stream_map.get('itag')) + height = stream.get('height') + width = stream.get('width') + if height > width: + compare_width = height + compare_height = width + else: + compare_width = width + compare_height = height + + bounded_quality = {} + for quality in qualities: + if compare_width > quality['width']: + if bounded_quality: + if compare_height >= bounded_quality['height']: + quality = bounded_quality + elif compare_height < quality['height']: + quality = qualities[-1] + break + bounded_quality = quality + if not bounded_quality: + continue - t = stream_map.get('mimeType') - t = urllib.parse.unquote(t) - t = t.split(';') - mime = key = t[0] - i = stream_map.get('itag') - if 'audioTrack' in stream_map: - key = '_'.join([mime, stream_map.get('audioTrack').get('id')[0:2]]) - - if key not in data: - data[key] = {} - data[key][i] = {} - - data[key][i]['codecs'] = t[1][1:] - data[key][i]['id'] = i - - data[key][i]['width'] = stream_map.get('width') - data[key][i]['height'] = stream_map.get('height') - - data[key][i]['quality_label'] = str(stream_map.get('qualityLabel')) - - data[key][i]['bandwidth'] = stream_map.get('bitrate', 0) - - # map frame rates to a more common representation to lessen the chance of double refresh changes - # sometimes 30 fps is 30 fps, more commonly it is 29.97 fps (same for all mapped frame rates) - frame_rate = None - fps_scale_map = {24: 1001, 30: 1001, 60: 1001} - if 'fps' in stream_map: - fps = int(stream_map.get('fps')) - data[key][i]['fps'] = fps - scale = fps_scale_map.get(fps, 1000) - frame_rate = '%d/%d' % (fps * 1000, scale) - - data[key][i]['frameRate'] = frame_rate - - url = urllib.parse.unquote(stream_map.get('url')) - url = url.replace("&", "&").replace('"', """).replace("<", "<").replace(">", ">") - - data[key][i]['baseUrl'] = url - - data[key][i]['indexRange'] = '0-0' - data[key][i]['initRange'] = '0-0' - if 'indexRange' in stream_map and 'initRange' in stream_map: - data[key][i]['indexRange'] = '-'.join([stream_map.get('indexRange').get('start'), - stream_map.get('indexRange').get('end')]) - data[key][i]['init'] = '-'.join([stream_map.get('initRange').get('start'), - stream_map.get('initRange').get('end')]) - if ('indexRange' not in stream_map or 'initRange' not in stream_map or - data[key][i].get('indexRange') == '0-0' and data[key][i].get('initRange') == '0-0'): - if key.startswith('video'): - discarded_streams.append(get_discarded_video(mime, i, data[key][i], 'no init or index')) + # map frame rates to a more common representation to lessen the + # chance of double refresh changes + if fps: + frame_rate = (fps_scale_map.get(fps) + or fps_scale_map[0].format(fps)) else: - stream_format = self.FORMAT.get(i, {}) - discarded_streams.append(get_discarded_audio(stream_format, mime, i, data[key][i], 'no init or index')) - del data[key][i] + frame_rate = None + + mime_group = mime_type + channels = language = role = role_type = sample_rate = None + label = quality['label'].format(fps if fps > 30 else '', + ' HDR' if hdr else '', + compare_height) + quality_group = '{0}_{1}'.format(container, label) + + if mime_group not in data: + data[mime_group] = {} + if quality_group not in data: + data[quality_group] = {} + + url = unquote(url) + url = self._process_url_params(url) + url = (url.replace("&", "&") + .replace('"', """) + .replace("<", "<") + .replace(">", ">")) + + data[mime_group][itag] = data[quality_group][itag] = { + 'mimeType': mime_type, + 'baseUrl': url, + 'mediaType': media_type, + 'container': container, + 'codecs': codecs, + 'codec': codec, + 'id': itag, + 'width': width, + 'height': height, + 'label': label, + 'bitrate': bitrate, + 'biasedBitrate': bitrate * quality_factor_map.get(codec, 1), + # integer round up + 'duration': -(-int(stream.get('approxDurationMs', 0)) // 1000), + 'fps': fps, + 'frameRate': frame_rate, + 'hdr': hdr, + 'indexRange': '{start}-{end}'.format(**index_range), + 'initRange': '{start}-{end}'.format(**init_range), + 'langCode': language_code, + 'langName': language, + 'role': role, + 'roleType': role_type, + 'sampleRate': sample_rate, + 'channels': channels, + } - if not data.get('video/mp4') and not data.get('video/webm'): + if not video_data: self._context.log_debug('Generate MPD: No video mime-types found') return None, None - mpd_quality = self._context.get_settings().get_mpd_quality() - hdr = self._context.get_settings().include_hdr() and 'vp9.2' in ia_capabilities - limit_30fps = self._context.get_settings().mpd_30fps_limit() - - supported_mime_types = [] - default_mime_type = 'mp4' - if data.get('video/mp4'): - supported_mime_types.append('video/mp4') - if any(m for m in data if m.startswith('audio/mp4')): - supported_mime_types.append('audio/mp4') - - if (('vp9' in ia_capabilities or 'vp9.2' in ia_capabilities) and - any(m for m in data if m == 'video/webm') and - data.get('video/webm')): - supported_mime_types.append('video/webm') - - if (('vorbis' in ia_capabilities or 'opus' in ia_capabilities) and - any(m for m in data if m.startswith('audio/webm'))): - supported_mime_types.append('audio/webm') - - if ('video/webm' in supported_mime_types and - ((isinstance(mpd_quality, str) and mpd_quality == 'webm') or - (isinstance(mpd_quality, int) and mpd_quality > 1080) or - hdr)): - default_mime_type = 'webm' - - limit_qualities = self._context.get_settings().mpd_video_qualities() - apply_filters = isinstance(mpd_quality, int) and isinstance(limit_qualities, list) - - self._context.log_debug('Generating MPD: Apply filters |{apply_filters}| ' - 'Quality selection |{quality}| Limit 30FPS |{limit_fps}| HDR |{hdr}|' - .format(apply_filters=str(apply_filters), - quality=(limit_qualities if isinstance(limit_qualities, str) - else str(next(iter(limit_qualities), None))), - limit_fps=str(limit_30fps), - hdr=str(hdr))) - - if 'video/webm' in supported_mime_types: - webm_streams = {} - if hdr and any(k for k in list(data['video/webm'].keys()) if '"vp9.2"' in data['video/webm'][k]['codecs']): - # when hdr enabled and available replace vp9 streams with vp9.2 (hdr) - for key in list(data['video/webm'].keys()): - if '"vp9.2"' in data['video/webm'][key]['codecs']: - webm_streams[key] = data['video/webm'][key] - - discard_webm = [data['video/webm'][i] for i in (set(data['video/webm']) - set(webm_streams)) - if i in data['video/webm']] - - for d in discard_webm: - discarded_streams.append(get_discarded_video('video/webm', - d['id'], - data['video/webm'][d['id']], - 'replaced by hdr')) - elif not hdr: - # when hdr disabled and remove vp9.2 (hdr) streams - for key in list(data['video/webm'].keys()): - if '"vp9"' in data['video/webm'][key]['codecs']: - webm_streams[key] = data['video/webm'][key] - - discard_webm = [data['video/webm'][i] for i in (set(data['video/webm']) - set(webm_streams)) - if i in data['video/webm']] - - for d in discard_webm: - discarded_streams.append(get_discarded_video('video/webm', - d['id'], - data['video/webm'][d['id']], - 'hdr disabled')) - - if webm_streams: - data['video/webm'] = webm_streams - - if apply_filters: - data = filter_qualities(data, default_mime_type, limit_qualities, limit_30fps) - - out_list = ['\n' - '\n', - '\t\n'] - - n = 0 - - for key in data: - if "_" in key: - key_parts = key.split("_") - mime = key_parts[0] - lang = key_parts[1] + def _stream_sort(stream): + if not stream: + return (1, ) + + return ( + - stream['height'], + - stream['fps'], + - stream['hdr'], + - stream['biasedBitrate'], + ) if stream['mediaType'] == 'video' else ( + - stream['channels'], + - stream['biasedBitrate'], + ) + + def _group_sort(item): + group, streams = item + main_stream = streams[0] + + key = ( + group != main_stream['mimeType'], + ) if main_stream['mediaType'] == 'video' else ( + not group.startswith(main_stream['mimeType']), + preferred_audio['id'] not in group, + main_stream['langName'], + - main_stream['roleType'], + ) + return key + _stream_sort(main_stream) + + video_data = sorted(( + (group, sorted(streams.values(), key=_stream_sort)) + for group, streams in video_data.items() + ), key=_group_sort) + + audio_data = sorted(( + (group, sorted(streams.values(), key=_stream_sort)) + for group, streams in audio_data.items() + ), key=_group_sort) + + return video_data, audio_data + + def _generate_mpd_manifest(self, video_data, audio_data, license_url): + if not video_data or not audio_data: + return None, None + + basepath = 'special://temp/plugin.video.youtube/' + if not make_dirs(basepath): + self._context.log_debug('Failed to create temp directory: {0}' + .format(basepath)) + return None, None + + def _filter_group(previous_group, previous_stream, item): + skip_group = True + if not item: + return skip_group + if not previous_group or not previous_stream: + return not skip_group + + new_group = item[0] + new_stream = item[1][0] + + media_type = new_stream['mediaType'] + if media_type != previous_stream['mediaType']: + return not skip_group + + if previous_group.startswith(previous_stream['mimeType']): + if new_group.startswith(new_stream['container']): + return not skip_group + + skip_group = ( + new_stream['height'] <= previous_stream['height'] + ) if media_type == 'video' else ( + new_stream['channels'] <= previous_stream['channels'] + ) else: - mime = key - lang = None - if mime in supported_mime_types: - default = False - if mime.endswith(default_mime_type): - default = True + if new_group.startswith(new_stream['mimeType']): + return not skip_group - out_list.append(''.join(['\t\t\n'])) - if license_url is not None: - license_url = license_url.replace("&", "&").replace('"', """).replace("<", "<").replace(">", ">") - out_list.append(''.join(['\t\t\t\n', '\t\t\t\t', license_url, '\n', '\t\t\t\n'])) - out_list.append('\t\t\t\n') - for i in data[key]: - stream_format = self.FORMAT.get(i, {}) - if 'audio' in mime: - audio_codec = str(data[key][i]['codecs']) - match = re.search('codecs="(?P[^"]+)"', audio_codec) - if match: - audio_codec = match.group('codec') - - if 'opus' == audio_codec.lower() and 'opus' not in ia_capabilities: - discarded_streams.append(get_discarded_audio(stream_format, mime, i, data[key][i])) - continue - elif 'vorbis' == audio_codec.lower() and 'vorbis' not in ia_capabilities: - discarded_streams.append(get_discarded_audio(stream_format, mime, i, data[key][i])) - continue - - if int(data[key][i]['bandwidth']) > int(stream_info['audio']['bandwidth']): - stream_info['audio']['mime'] = str(mime) - if stream_format: - bitrate = int(stream_format.get('audio', {}).get('bitrate', 0)) - if bitrate > 0: - stream_info['audio']['bitrate'] = bitrate - stream_info['audio']['codec'] = stream_format.get('audio', {}).get('encoding') - if not stream_info['audio'].get('codec'): - stream_info['audio']['codec'] = audio_codec - stream_info['audio']['bandwidth'] = int(data[key][i]['bandwidth']) - - out_list.append(''.join(['\t\t\t\n'])) - out_list.append('\t\t\t\t\n') - else: + skip_group = ( + new_stream['height'] == previous_stream['height'] + ) if media_type == 'video' else ( + 2 == new_stream['channels'] == previous_stream['channels'] + ) + + skip_group = ( + skip_group + and new_stream['fps'] == previous_stream['fps'] + and new_stream['hdr'] == previous_stream['hdr'] + ) if media_type == 'video' else ( + skip_group + and new_stream['langCode'] == previous_stream['langCode'] + and new_stream['role'] == previous_stream['role'] + ) + return skip_group + + _settings = self._context.get_settings() + stream_features = _settings.stream_features() + do_filter = 'filter' in stream_features + stream_select = _settings.stream_select() + + main_stream = { + 'video': video_data[0][1][0], + 'audio': audio_data[0][1][0], + 'multi_audio': False, + 'multi_lang': False, + } - video_codec = str(data[key][i]['codecs']) - match = re.search('codecs="(?P[^"]+)"', video_codec) - if match: - video_codec = match.group('codec') - - if 'vp9.2' == video_codec.lower() and ('vp9.2' not in ia_capabilities or - not self._context.get_settings().include_hdr()): - if not self._context.get_settings().include_hdr() and 'vp9.2' in ia_capabilities: - discarded_streams.append(get_discarded_video(mime, i, data[key][i], 'hdr not selected')) - else: - discarded_streams.append(get_discarded_video(mime, i, data[key][i])) - continue - elif 'vp9' == video_codec.lower() and 'vp9' not in ia_capabilities: - discarded_streams.append(get_discarded_video(mime, i, data[key][i])) - continue - elif video_codec.lower().startswith(('av01', 'av1')) and 'av1' not in ia_capabilities: - discarded_streams.append(get_discarded_video(mime, i, data[key][i])) - continue - - has_video_stream = True - if default: - if int(data[key][i]['bandwidth']) > int(stream_info['video']['bandwidth']): - stream_info['video']['height'] = str(data[key][i]['height']) - stream_info['video']['fps'] = str(data[key][i]['frameRate']) - stream_info['video']['mime'] = str(mime) - stream_info['video']['codec'] = video_codec - stream_info['video']['bandwidth'] = int(data[key][i]['bandwidth']) - if data[key][i].get('quality_label'): - stream_info['video']['quality_label'] = str(data[key][i]['quality_label']) - if stream_format: - stream_info['video']['codec'] = stream_format.get('video', {}).get('encoding') - if not stream_info['video'].get('codec'): - stream_info['video']['codec'] = video_codec - - video_codec = data[key][i]['codecs'] - out_list.append(''.join(['\t\t\t\n'])) - - out_list.append(''.join(['\t\t\t\t', data[key][i]['baseUrl'], '\n'])) - out_list.append(''.join(['\t\t\t\t\n', '\t\t\t\t\t\t\n', '\t\t\t\t\n'])) - out_list.append('\t\t\t\n') - out_list.append('\t\t\n') - n = n + 1 + out_list = [ + '\n' + '\n' + '\t\n' + ] + + set_id = 0 + group = stream = None + languages = set() + roles = set() + for item in (video_data + audio_data): + default = original = impaired = False + + if do_filter and _filter_group(group, stream, item): + continue + group, streams = item + stream = streams[0] + container = stream['container'] + media_type = stream['mediaType'] + mime_type = stream['mimeType'] + language = stream['langCode'] + role = stream['role'] or '' + + if group.startswith(mime_type) and 'auto' in stream_select: + label = '{0} [{1}]'.format( + stream['langName'] or self._context.localize(30583), + stream['label'] + ) + if stream == main_stream[media_type]: + default = True + role = 'main' + elif group.startswith(container) and 'list' in stream_select: + if 'auto' in stream_select or media_type == 'video': + label = stream['label'] + else: + label = '{0} {1}'.format( + stream['langName'], + stream['label'] + ) + if stream == main_stream[media_type]: + default = True + role = 'main' else: - for i in data[key]: - stream_format = self.FORMAT.get(i, {}) - if 'audio' in mime: - discarded_stream = get_discarded_audio(stream_format, mime, i, data[key][i]) - else: - discarded_stream = get_discarded_video(mime, i, data[key][i]) - discarded_streams.append(discarded_stream) + continue - out_list.append('\t\n\n') + if role == 'main': + if not default: + role = 'alternate' + original = True + elif role == 'description': + impaired = True + + languages.add(language) + roles.add(role) + + out_list.extend(( + '\t\t\n' + # AdaptationSet Label element not currently used by ISA + '\t\t\t\n' + '\t\t\t\n' + )) + + if license_url: + license_url = (license_url.replace("&", "&") + .replace('"', """).replace("<", "<") + .replace(">", ">")) + out_list.extend(( + '\t\t\t\n' + '\t\t\t\t', + license_url, + '\n' + '\t\t\t\n' + )) + + num_streams = len(streams) + if media_type == 'audio': + out_list.extend((( + '\t\t\t\n' + '\t\t\t\t\n' + # Representation Label element is not used by ISA + '\t\t\t\t\n' + '\t\t\t\t{baseUrl}\n' + '\t\t\t\t\n' + '\t\t\t\t\t\n' + '\t\t\t\t\n' + '\t\t\t\n' + ).format( + quality=(idx + 1), priority=(num_streams - idx), **stream + ) for idx, stream in enumerate(streams))) + elif media_type == 'video': + out_list.extend((( + '\t\t\t\n' + # Representation Label element is not used by ISA + '\t\t\t\t\n' + '\t\t\t\t{baseUrl}\n' + '\t\t\t\t\n' + '\t\t\t\t\t\n' + '\t\t\t\t\n' + '\t\t\t\n' + ).format( + quality=(idx + 1), priority=(num_streams - idx), **stream + ) for idx, stream in enumerate(streams))) + + out_list.append('\t\t\n') + set_id += 1 + + out_list.append('\t\n' + '\n') out = ''.join(out_list) - self._context.log_debug('Generated MPD highest supported quality found: |%s|' % str(stream_info)) - if discarded_streams: - discarded_streams = sorted(discarded_streams, key=lambda k: k.get('audio', k.get('video', {}))['bandwidth'], reverse=True) - self._context.log_debug('Generated MPD discarded streams: \n%s' % '\n'.join(str(stream) for stream in discarded_streams)) - - if not has_video_stream: - self._context.log_debug('Generated MPD no supported video streams found') + if len(languages.difference({'', 'und'})) > 1: + main_stream['multi_lang'] = True + if roles.difference({'', 'main', 'dub'}): + main_stream['multi_audio'] = True - filepath = '{base_path}{video_id}.mpd'.format(base_path=basepath, video_id=video_id) - try: - f = xbmcvfs.File(filepath, 'w') - if PY2: - _ = f.write(out.encode('utf-8')) - else: - _ = f.write(str(out)) - f.close() - return 'http://{ipaddress}:{port}/{video_id}.mpd'.format( - ipaddress=ipaddress, - port=self._context.get_settings().httpd_port(), - video_id=video_id - ), stream_info - except: + filepath = '{0}{1}.mpd'.format(basepath, self.video_id) + success = None + with xbmcvfs.File(filepath, 'w') as mpd_file: + success = mpd_file.write(str(out)) + if not success: return None, None + return 'http://{0}:{1}/{2}.mpd'.format( + _settings.httpd_listen(for_request=True), + _settings.httpd_port(), + self.video_id + ), main_stream diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/yt_login.py b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/yt_login.py index 1e2df0b067..faa621b68f 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/yt_login.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/yt_login.py @@ -8,8 +8,6 @@ See LICENSES/GPL-2.0-only for more information. """ -from six.moves import range - import copy import json import time diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/yt_play.py b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/yt_play.py index 5be425c430..9de573632d 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/yt_play.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/yt_play.py @@ -82,18 +82,19 @@ def play_video(provider, context): incognito = str(context.get_param('incognito', False)).lower() == 'true' use_history = not is_live and not screensaver and not incognito - playback_history = use_history and settings.use_playback_history() + use_remote_history = use_history and settings.use_remote_history() + use_play_data = use_history and settings.use_local_history() + video_item = utils.update_play_info(provider, context, video_id, video_item, video_stream, - use_play_data=playback_history) + use_play_data=use_play_data) seek_time = None play_count = 0 playback_stats = video_stream.get('playback_stats') - if use_history: - major_version = context.get_system_version().get_version()[0] - if video_item.get_start_time() and video_item.use_dash() and major_version > 17: + if use_remote_history: + if video_item.get_start_time() and video_item.use_mpd_video(): seek_time = video_item.get_start_time() play_count = video_item.get_play_count() if video_item.get_play_count() is not None else '0' @@ -113,8 +114,8 @@ def play_video(provider, context): "video_status": metadata.get('video', {}).get('status', {}), "playing_file": video_item.get_uri(), "play_count": play_count, - "use_history": use_history, - "playback_history": playback_history, + "use_remote_history": use_remote_history, + "use_local_history": use_play_data, "playback_stats": playback_stats, "seek_time": seek_time, "refresh_only": screensaver diff --git a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/provider.py b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/provider.py index fea2957999..bdab66582b 100644 --- a/plugin.video.youtube/resources/lib/youtube_plugin/youtube/provider.py +++ b/plugin.video.youtube/resources/lib/youtube_plugin/youtube/provider.py @@ -108,7 +108,7 @@ class Provider(kodion.AbstractProvider): 'youtube.succeeded': 30575, 'youtube.failed': 30576, 'youtube.settings': 30577, - 'youtube.dash.enable.confirm': 30579, + 'youtube.mpd.enable.confirm': 30579, 'youtube.reset.access.manager.confirm': 30581, 'youtube.my_subscriptions_filtered': 30584, 'youtube.add.my_subscriptions.filter': 30587, @@ -1077,8 +1077,7 @@ def configure_addon(self, context, re_match): context.addon().openSettings() context.get_ui().refresh_container() elif switch == 'mpd': - use_dash = context.use_inputstream_adaptive() - if use_dash: + if context.use_inputstream_adaptive(): xbmcaddon.Addon(id='inputstream.adaptive').openSettings() else: settings.set_bool('kodion.video.quality.mpd', False) diff --git a/plugin.video.youtube/resources/lib/youtube_registration.py b/plugin.video.youtube/resources/lib/youtube_registration.py index 45c143b55a..ab64f9ad4d 100644 --- a/plugin.video.youtube/resources/lib/youtube_registration.py +++ b/plugin.video.youtube/resources/lib/youtube_registration.py @@ -7,7 +7,6 @@ See LICENSES/GPL-2.0-only for more information. """ -from six import PY3, binary_type from base64 import b64encode from youtube_plugin.kodion.json_store import APIKeyStore from youtube_plugin.kodion.impl import Context @@ -54,14 +53,9 @@ def register_api_keys(addon_id, api_key, client_id, client_secret): jkeys = json_api['keys']['developer'].get(addon_id, {}) - if PY3: - api_key = b64encode(binary_type(api_key, 'utf-8')).decode('ascii') - client_id = b64encode(binary_type(client_id, 'utf-8')).decode('ascii') - client_secret = b64encode(binary_type(client_secret, 'utf-8')).decode('ascii') - else: - api_key = b64encode(api_key) - client_id = b64encode(client_id) - client_secret = b64encode(client_secret) + api_key = b64encode(bytes(api_key, 'utf-8')).decode('ascii') + client_id = b64encode(bytes(client_id, 'utf-8')).decode('ascii') + client_secret = b64encode(bytes(client_secret, 'utf-8')).decode('ascii') api_keys = { 'origin': addon_id, 'main': { diff --git a/plugin.video.youtube/resources/lib/youtube_requests.py b/plugin.video.youtube/resources/lib/youtube_requests.py index 547c8f30ea..cf062d1968 100644 --- a/plugin.video.youtube/resources/lib/youtube_requests.py +++ b/plugin.video.youtube/resources/lib/youtube_requests.py @@ -39,7 +39,7 @@ def handle_error(context, json_data): return True -def v3_request(method='GET', headers=None, path=None, post_data=None, params=None, allow_redirects=True, addon_id=None): +def v3_request(method='GET', headers=None, path=None, post_data=None, params=None, addon_id=None): """ https://developers.google.com/youtube/v3/docs/ :param method: @@ -47,12 +47,11 @@ def v3_request(method='GET', headers=None, path=None, post_data=None, params=Non :param path: :param post_data: :param params: - :param allow_redirects: :param addon_id: addon id associated with developer keys to use for requests :type addon_id: str """ provider, context, client = __get_core_components(addon_id) - return client.perform_v3_request(method=method, headers=headers, path=path, post_data=post_data, params=params, allow_redirects=allow_redirects) + return client.perform_v3_request(method=method, headers=headers, path=path, post_data=post_data, params=params) def _append_missing_page_token(items): diff --git a/plugin.video.youtube/resources/lib/youtube_resolver.py b/plugin.video.youtube/resources/lib/youtube_resolver.py index 8748cd166c..28eb032561 100644 --- a/plugin.video.youtube/resources/lib/youtube_resolver.py +++ b/plugin.video.youtube/resources/lib/youtube_resolver.py @@ -7,10 +7,7 @@ See LICENSES/GPL-2.0-only for more information. """ -from six import string_types import re -import json -import requests from youtube_plugin.youtube.provider import Provider from youtube_plugin.kodion.impl import Context @@ -57,6 +54,6 @@ def resolve(video_id, sort=True, addon_id=None): streams = client.get_video_streams(context=context, video_id=matched_id) if sort and streams: - streams = sorted(streams, key=lambda x: x.get('sort', 0), reverse=True) + streams = sorted(streams, key=lambda x: x.get('sort', (0, 0))) return streams diff --git a/plugin.video.youtube/resources/media/fanart.jpg b/plugin.video.youtube/resources/media/fanart.jpg index 7d7202f356..2d05a9be52 100644 Binary files a/plugin.video.youtube/resources/media/fanart.jpg and b/plugin.video.youtube/resources/media/fanart.jpg differ diff --git a/plugin.video.youtube/icon.png b/plugin.video.youtube/resources/media/icon.png similarity index 100% rename from plugin.video.youtube/icon.png rename to plugin.video.youtube/resources/media/icon.png diff --git a/plugin.video.youtube/resources/settings.xml b/plugin.video.youtube/resources/settings.xml index 240043a94a..70429df9f6 100644 --- a/plugin.video.youtube/resources/settings.xml +++ b/plugin.video.youtube/resources/settings.xml @@ -1,9 +1,9 @@
- + - + 0 3 @@ -17,27 +17,27 @@ - false + false - + 0 false - false + false - + 0 false - + 0 RunPlugin(plugin://plugin.video.youtube/config/subtitles/) @@ -55,7 +55,7 @@ true - + 0 0 @@ -67,7 +67,7 @@ - + 0 false @@ -77,17 +77,17 @@ - + 0 false - + 0 false - + 0 85 @@ -104,34 +104,34 @@ false - + 0 true - + 0 false - + 0 false - true + true - + 0 false - + 0 1 @@ -142,22 +142,22 @@ - + 0 true - + 0 true - true + true - + 0 50 @@ -169,7 +169,7 @@ false - + 0 10 @@ -181,7 +181,7 @@ false - + 0 0 @@ -193,16 +193,16 @@ - + 0 true - + - + 0 false @@ -212,7 +212,7 @@ - + 0 RunPlugin(plugin://plugin.video.youtube/config/mpd/) @@ -220,7 +220,7 @@ - true + true @@ -229,83 +229,127 @@ - + 0 true - true + true - + 0 - 8 + 4 - - - - - - - - - - + + + + + + + + - true + true - - 0 - false - + + 0 + avc1,vp9,av01,hdr,hfr,vorbis,opus,mp4a,ssa,ac-3,ec-3,dts,filter + + + + + + + + + + + + + + + + + , + 1 + + - - true - 8 - + true - + + true + true + - + 0 - false + 1 + + + + + + + - - true - false - 8 - 9 - + true - + - + 0 - true + 0 + + + + + + + + + - - true + + true - + + + 0 + 0 + + + + + + + + + + false + + + - + 0 RunPlugin(plugin://plugin.video.youtube/maintain/inputstreamhelper/install/) @@ -313,44 +357,48 @@ - true + + true + 1 + 1 + - + - + 0 true - + 0 true - + 0 false - + 0 false - true + true - true + true - + 0 @@ -358,52 +406,52 @@ - true + true - true + true 30585 - + 0 true - + 0 true - + 0 true - + 0 false - + 0 false - + 0 true - + 0 true - + 0 true @@ -413,12 +461,12 @@ - + 0 true - + 0 @@ -426,32 +474,32 @@ - true + true - true + true 30037 - + 0 true - + 0 true - + 0 true - + 0 @@ -459,22 +507,22 @@ - true + true - true + true 30038 - + 0 true - + 0 true @@ -484,51 +532,51 @@ - + 0 true - + 0 true - + 0 true - + 0 true - + 0 true - + 0 true - + 0 true - + 0 true - + - + 0 RunPlugin(plugin://plugin.video.youtube/users/add/?refresh=false) @@ -536,7 +584,7 @@ - + 0 RunPlugin(plugin://plugin.video.youtube/users/remove/?refresh=false) @@ -544,7 +592,7 @@ - + 0 RunPlugin(plugin://plugin.video.youtube/users/rename/?refresh=false) @@ -552,7 +600,7 @@ - + 0 RunPlugin(plugin://plugin.video.youtube/users/switch/?refresh=false) @@ -562,43 +610,60 @@ - + - + + 0 + 0 + + + + + + + + + + 0 true - + 0 false - + 0 false - true + true - + 0 true - + + 0 + false + + + 0 false - + 0 10 @@ -610,14 +675,14 @@ false - + 0 true - + 0 en-US @@ -629,7 +694,7 @@ 30523 - + 0 US @@ -641,7 +706,7 @@ 30550 - + 0 @@ -656,7 +721,7 @@ 30651 - + 0 500 @@ -675,9 +740,9 @@ - + - + 0 0.0.0.0 @@ -689,7 +754,7 @@ 30643 - + 0 RunPlugin(plugin://plugin.video.youtube/config/listen_ip/) @@ -699,7 +764,7 @@ true - + 0 50152 @@ -711,7 +776,7 @@ 30619 - + 0 @@ -726,7 +791,7 @@ 30629 - + 0 RunPlugin(plugin://plugin.video.youtube/show_client_ip/) @@ -736,9 +801,9 @@ - + - + 0 @@ -748,7 +813,7 @@ 30201 - + 0 @@ -758,7 +823,7 @@ 30202 - + 0 @@ -768,23 +833,23 @@ 30203 - + 0 true - + 0 false - + - + 0 RunPlugin(plugin://plugin.video.youtube/maintain/function_cache/clear/) @@ -792,7 +857,7 @@ - + 0 RunPlugin(plugin://plugin.video.youtube/maintain/data_cache/clear/) @@ -800,7 +865,7 @@ - + 0 RunPlugin(plugin://plugin.video.youtube/maintain/search_cache/clear/) @@ -808,7 +873,7 @@ - + 0 RunPlugin(plugin://plugin.video.youtube/maintain/playback_history/clear/) @@ -818,7 +883,7 @@ - + 0 RunPlugin(plugin://plugin.video.youtube/maintain/function_cache/delete/) @@ -826,7 +891,7 @@ - + 0 RunPlugin(plugin://plugin.video.youtube/maintain/data_cache/delete/) @@ -834,7 +899,7 @@ - + 0 RunPlugin(plugin://plugin.video.youtube/maintain/search_cache/delete/) @@ -842,7 +907,7 @@ - + 0 RunPlugin(plugin://plugin.video.youtube/maintain/playback_history/delete/) @@ -852,7 +917,7 @@ - + 0 RunPlugin(plugin://plugin.video.youtube/maintain/access_manager/reset/) @@ -864,7 +929,7 @@ - + 0 RunPlugin(plugin://plugin.video.youtube/maintain/settings_xml/delete/) @@ -874,7 +939,7 @@ true - + 0 RunPlugin(plugin://plugin.video.youtube/maintain/api_keys/delete/) @@ -882,7 +947,7 @@ - + 0 RunPlugin(plugin://plugin.video.youtube/maintain/access_manager/delete/) @@ -890,7 +955,7 @@ - + 0 RunPlugin(plugin://plugin.video.youtube/maintain/temp_files/delete/) @@ -898,7 +963,7 @@ - + 0 @@ -913,7 +978,7 @@ - + 0 @@ -928,7 +993,7 @@ - + 0 0 @@ -940,7 +1005,7 @@ - + 0