The present disclosure generally relates to systems, methods, and apparatus for adaptive bitrate streaming environments.
Adaptive Bitrate Streaming is a technique used in streaming multimedia over computer networks. While in the past most video streaming technologies used either file download, progressive download, or custom streaming protocols, most of today's adaptive streaming technologies are based on utilizing hypertext transfer protocol (HTTP) requests and methods to download content. HTTP requests and methods are designed to work efficiently over large distributed HTTP networks such as may be found on the Internet.
HTTP-based Adaptive Streaming (HAS) operates by tracking a user's bandwidth and CPU capacity, and then selecting an appropriate representation (e.g., bandwidth and resolution) to stream among the available bitrates and resolutions. Typically, HAS leverages the use of an encoder that can encode a single source video at multiple bitrates and resolutions, wherein said encoding can be representative of either constant bitrate encoding (CBR) or variable bitrate encoding (VBR). A player client can switch among the different encodings or representation depending on available resources. Ideally, the result of utilizing HAS is that there is little buffering, fast start times, and good video quality experiences for both high-bandwidth and low-bandwidth connections.
The present disclosure will be understood and appreciated more fully from the following detailed description, taken in conjunction with the drawings in which:
In one embodiment, a system, apparatus and method is described, the system having a processor operative to receive a request for a download of at least one high priority adaptive bitrate (ABR) content item and a request for a download of at least one low priority ABR content item, the at least one high priority ABR content item being available for download at a first higher bit rate and at a first lower bit rate, and the at least one lower ABR content item being available for download at a second higher bit rate and at a second lower bit rate. The system also having a byte acquisition scheduler operative to determine a required bandwidth to download the at least one high priority ABR content item without adapting to the first lower bit rate, and determine a remaining bandwidth to download the at least one low priority ABR content item on the basis of an available bandwidth for downloading ABR content and the required bandwidth. The system further having a download interface operative to interface with at least one ABR server external to the system, download the at least one high priority ABR content item and the at least one low priority ABR content item, and allocate, based on the available bandwidth, at least the required bandwidth and up to the remaining bandwidth. Related systems, apparatuses and methods are also described.
Reference is now made to
The servers 12a-b are configured to deliver content to HAS clients 18a-c upon request of the HAS clients 18a-c. The requested content may include any suitable information and/or data that can propagate in the network 16 (e.g., video, audio, media, metadata, any type of streaming information, etc.). Certain content may be stored in media storage 14, which can be located anywhere appropriate in the network 16. For example, media storage 14 may be a part of a Web server, or may be logically connected to one of servers 12a-b, and may be suitably accessed using the network 16, etc. In general, the communication system 10 can be configured to provide downloading and streaming capabilities associated with various data services. The communication system 10 can also offer the ability to manage content for mixed-media offerings, which may combine video, audio, games, applications, channels, and programs into digital media bundles.
In ABR streaming, a source video is encoded such that multiple instances of the same content is available for streaming at a number of different bitrates. The multiple instances can be encoded via either multi-rate coding, such as H.264 AVC, or layered coding, such as H.264 SVC). Content for streaming to the HAS clients 18a-c can be divided into “segments”, each segment typically two (2) to ten (10) seconds in length. HAS clients 18a-c can access the segments stored on servers (or produced in near real time for live streaming) using a Web paradigm (e.g., HTTP GET operations over a TCP/IP transport), and the HAS clients 18a-c depend on the reliability, congestion control, and flow control features of TCP/IP for data delivery. HAS clients 18a-c can indirectly monitor the performance of fetch operations by monitoring the delivery bitrate and/or buffer fill level. HAS clients 18a-c use observed performance in order to determine to either:
Compared to non-adaptive systems such as classic cable TV or broadcast services, adaptive streaming systems typically use significantly larger amounts of buffering to absorb the effects of varying bandwidth from the network.
In a typical ABR streaming scenario, HAS clients 18a-c fetch content in segments from one of the servers 12a-b. Each segment can contain a portion of a program, typically comprising a few seconds of program content. [Note that the terms ‘segment’, ‘fragment’, and ‘chunk’ are often used interchangeably in the art. It is appreciated that this usage may be convenient at times, but is not necessarily precise, in that there are differences between how different ABR streaming protocols use these terms.]
With most adaptive streaming technologies, it is common practice to have every segment represent the same, or very nearly the same, interval of program time. For example, in the case of one streaming protocol, it is common practice to have every segment of a program represent almost exactly 2 seconds worth of content for the program. With HTTP Live Streaming (HLS), it is quite common practice to have every segment of a program represent almost exactly 10 seconds worth of content. Although it is also possible to encode segments with different durations (e.g., using 6-second segments for HLS instead of 10-second segments), even when this is done, it is nevertheless common practice to keep segments within a program of the same duration.
Reference is now made to
The HAS client 18a can download available segments of the plurality of segments 200 from the server 12a in any order using HTTP GET operations, measure the available bandwidth based on the download history, and select the video bitrate of the next segment on-the-fly based on video bitrates of available segments at the server 12a. Upon download, segments which are received are available for playing at a media player 210.
Reference is now made to
The exemplary client device 300 is suitable for implementing of the systems, methods or processes described herein. The exemplary client device 300 comprises one or more processors, such as processor 301 (only one processor 301 is depicted), providing an execution platform for executing machine readable instructions such as software. The one or more processors 301 may be a special purpose processor operative to perform the method for non-real time ABR recording scheduling described herein. The one or more processors 301 comprise dedicated hardware logic circuits, in the form of an application-specific integrated circuit (ASIC), field programmable gate array (FPGA), or full-custom integrated circuit, or a combination of such devices. Alternatively, or additionally, some or all of the functions of the one or more processors 301 may be carried out by a programmable processor or digital signal processor (DSP), under the control of suitable software. This software may be downloaded to the processor in electronic form, over a network, for example. Alternatively, or additionally, the software may be stored on tangible storage media, such as optical, magnetic, or electronic memory media.
Commands and data from the one or more processors 301 are communicated to their destination over a communication bus 302. The exemplary client device 300 also includes a main memory 303, such as a Random Access Memory (RAM) 304, where machine readable instructions may reside during runtime, and a secondary memory 305. The secondary memory 305 comprises, for example, a hard disk drive 307 and/or a removable storage drive 308, such as a floppy diskette drive, a magnetic tape drive, a compact disk drive, a flash drive, etc., or a nonvolatile memory where a copy of the machine-readable instructions or software may be stored. The secondary memory 305 may also comprise ROM (read only memory), EPROM (erasable, programmable ROM), EEPROM (electrically erasable, programmable ROM). In addition to software, data such as the ABR content, data pertinent to relevant HTTP operations and methods, data pertinent to bandwidth availability, and so forth, and without limiting the generality of the foregoing, or other similar data, may be stored in the main memory 303 and/or the secondary memory 305. The removable storage drive 308 reads from and/or writes to a removable storage unit 309 in a well-known manner.
A user can interface with the exemplary device 300 via a user interface which comprises one or more input devices 311, (such as a touch screen, a keyboard, a mouse, a stylus, and the like) in order to provide user input data. A display adapter 315 interfaces with the communication bus 302 and a display 317, receives display data from the one or more processors 301, and converts the display data into display commands for the display 317.
A network interface 319 is provided for communicating with other systems and devices (external to the exemplary client device 300) via the network 16 (
The network interface 319 may be utilized by the exemplary client device 300 in order to interface with the plurality of servers 12a-b (
It will be apparent to persons skilled in the art that one or more of the components of the exemplary device 300 may not be included in the exemplary device 300 and/or other components may be added to the exemplary device 300, as is known in the art. The exemplary device 300 shown in
One or more of the steps or processes described herein may be implemented as instructions embedded on a computer readable medium and executed on the exemplary device 300. The steps or processes may be embodied by a computer program, which may exist in a variety of forms both active and inactive. For example, the steps or processes may exist as software program(s) comprised of program instructions in source code, object code, executable code or other formats for performing some of the steps. Any of the software program(s), source code, object code, executable code or other formats may be embodied on a computer readable medium, which include storage devices and signals, in compressed or uncompressed form. Examples of suitable computer readable media include conventional computer system RAM (random access memory), ROM (read only memory), EPROM (erasable, programmable ROM), EEPROM (electrically erasable, programmable ROM), and magnetic or optical disks or tapes. Examples of computer readable signals, whether modulated using a carrier or not, are signals that a computer system hosting or running a computer program may be configured to access, including signals downloaded through the Internet or other networks. In a sense, computer networks in general, including the Internet itself, as abstract entities, are computer readable media. The same is true of in general. It is therefore to be understood that steps or processes described herein may be performed by any electronic device capable of executing said instructions.
Service providers typically attempt to use local storage (e.g. hard disk drive 307) of devices to their advantage. These devices, such as the client device 300, may be an IP gateway, a video gateway (i.e. device 300, with or without a display 317 connected), a set top box, or other consumer electronics device with local disks (i.e. hard disk drive 307). By way of example, be one such advantage might entail creating local copies of content for later playback, in order that said content is already present on the local storage in advance of when the content is requested. When such copies are made of live content, this approach can be thought of as recording. In some circumstances, it may be appropriate to record a single representation of the content. Given varying network conditions, this may result in the recording completing in non-real time.
In an environment where the video gateway might be recording multiple live viewing sessions concurrently to multiple non-real time recordings, conflicting design concerns occur, however. On the one hand, it might be desirable to maximize network utilization order to take full advantage of the available network capacity, but on the other hand a limit of utilization of the network for sessions that have a lower priority is also desirable. One mechanism would be to throttle the lower priority streams in order to maintain capacity for the higher priority streams. However, pacing of the higher and lower priority streams may be problematic for several reasons:
Reference is now made to
T can safely be varied to change overall network utilization in a non-real time (i.e., low priority) recording scenario, as it is typically the case that underrun is only a minor concern, if of any concern at all, due to the non-real time nature of the scenario. However, the PW will continue to be governed by the ratio of media encoding rate to goodput. Accordingly, in
Competing sessions, i.e., sessions which are downloading at the same time, and are competing for the same bandwidth, can be broadly classified as either:
Furthermore, it may be desirable that the non-real time (i.e., low priority) sessions complete at a fixed quality (preferably a highest available quality), but if possible, it may also be preferable to avoid adaptation (i.e. a reduction in quality) if possible for live (i.e., high priority) sessions. In that TCP does not divide bandwidth in any non-equal fashion, without changing T and PW of these competing high and low priority sessions, TCP would attempt to be fair and share the available network capacity between the sessions. For example, a 20 Mb/s link used by one session for segment durations of 4 s and an encoding rate of 5 Mb/s would yield T=4 and PW=1 (i.e. duty cycle of 25%). That same scenario with 2 sessions would have PW increase from 1 to 2 for each session, and in that case, each session would observe transfers of 10 Mb/s (assuming that TCP is fair, as noted above). At full utilization with 4 sessions, each session would observe 5 Mb/s during the PW. Extending this example, consider the case where 2 sessions are high priority (2H) and 3 sessions are low priority (3L). With fair-share, it would not be possible to sustain the high priority sessions at 5 Mb/s, because the available bandwidth (i.e., fair-share) would drop to 4 Mb/s.
A byte acquisition scheduler disposed in the HAS client 18a-c (
Accordingly, the shape of the waveform of a low priority session is calculated based on the requirements of the high priority sessions. Returning to the 2H+3L scenario, each high priority session requires at least an average of 5 Mb/s across its PW or else the high priority session may shift downwards to a lower bandwidth session. Accordingly, an average of 10 Mb/s is provided for the two high priority sessions to maintain their average 5 Mb/s.
Since each of the high priority sessions is to be provided with an average 5 Mb/s, each low priority session does not request more than an average of 3.3 Mb/s over the duration of the PW of any high priority session. The byte acquisition scheduler 350 (
Reference is now made to
A third set of blocks 540 can be thought of as providing, over a two second time span, each of the two 2H high priority downloads 533, 536 with its 10 Mb/s (i.e. 0.5 Mb/s per block*20 blocks/2 s=10 Mb/s). The remaining 40 blocks, are, accordingly divided into three groups of blocks 550, 560, 570. Each one of the three groups of blocks 550, 560, 570 is therefore allocated a “fair-share” (⅓rd) of the remaining 10 Mb/s, or, on average, 3.33 Mb/s. (It is appreciated that group of blocks 550 and 570 are both depicted as having 13 blocks, and group of blocks 560 is depicted as having 14 blocks. This is due to rounding effects, and may be viewed as a result of local unequal distribution which is accounted for, on average, over longer amounts of time.
To rephrase the above discussion somewhat, a single 40 Mb low priority session may be broken down, for example, into a number of smaller download requests, each one of which may be allocated a smaller bandwidth. So, two requests are allocated 3.25 Mb/s, as is seen in groups of blocks 550 and 570. One request is allocated 3.5 Mb/s, as is seen in groups of blocks 560.
Using techniques know in the art, the scheduler can constantly probe the average utilization upwards by reducing the inter-request gap. Alternatively, increasing the inter-request gap has the effect of reducing the average utilization. The average utilization can be capped by resource availability if desired.
The above described embodiment illustrates how the byte acquisition scheduler 350 (
Reference is now made to
With the 12 Mb/s bandwidth, a playback session is able to download high priority segments 610 and 620 in the allotted 1 second, as depicted. High priority segments 630 and 640 are also able to download in the allotted 1 second, even as a lower priority download begins, splitting its transfer into 4 segments 650a-d and 660a-d. Each of the lower priority segments 650a-d and 660a-d downloads at an effective throughput of 8 Mb/s, which is enough to achieve an effective recording rate of 1× for the lower priority download.
Reference is now made to
Reference is now made to
After segment 820 has been downloaded, a recording session, to downloaded concurrently with the viewing session begins. The recording session is depicted as segment 830. The viewing session, depicted now as segment 840, is presently allocated the 4 Mb/s the viewing session requires in order to not have to adapt to a lower bitrate session. The recording session, i.e. segment 830, is accordingly allocated the remaining bandwidth, i.e. 2 Mb/s.
Referring specifically to
Turning now to
Reference is now made to
Returning briefly and additionally to the discussion of the byte acquisition scheduler 350 (
The byte acquisition scheduler 350 (
For each piece in the segment (step 1140):
If there was no piece of higher priority content for which the byte acquisition scheduler 350 (
However, if there is a piece of higher priority content for which the byte acquisition scheduler 350 (
After the pieces in the segment have downloaded, control is returned to step 1130, for the next segment to download, and so forth, until the segments in the stream have completed downloading or acquisition is stopped.
Turning now to
It is appreciated in the description of
In some embodiments, if the HAS client (for example, HAS client 18a of
Utilization may probe downwards as needed in response to actual network conditions as allowed by inserting delay which increases the inter-request gap, or, alternatively, requests can be deferred by the byte acquisition scheduler 350 (
In some embodiments, a transition may occur, wherein, for whatever reason, a high priority download becomes a low priority download, or alternatively, a low priority download becomes a high priority download. By way of example, if a program which is presently being view live is now switched, so that, for whatever reason, the remainder of the program is to be recorded, then the byte acquisition scheduler 350 (
Reference is now made to
The byte acquisition scheduler 350 (
At step 1230 a download interface, such as network interface 319 of
It is appreciated that software components of the present invention may, if desired, be implemented in ROM (read only memory) form. The software components may, generally, be implemented in hardware, if desired, using conventional techniques. It is further appreciated that the software components may be instantiated, for example: as a computer program product or on a tangible medium. In some cases, it may be possible to instantiate the software components as a signal interpretable by an appropriate computer, although such an instantiation may be excluded in certain embodiments of the present invention.
It is appreciated that various features of the invention which are, for clarity, described in the contexts of separate embodiments may also be provided in combination in a single embodiment. Conversely, various features of the invention which are, for brevity, described in the context of a single embodiment may also be provided separately or in any suitable subcombination.
It will be appreciated by persons skilled in the art that the present invention is not limited by what has been particularly shown and described hereinabove. Rather the scope of the invention is defined by the appended claims and equivalents thereof:
Number | Name | Date | Kind |
---|---|---|---|
6470016 | Kalkunte | Oct 2002 | B1 |
7269330 | Iggulden | Sep 2007 | B1 |
7783773 | Wu | Aug 2010 | B2 |
7921217 | Yan | Apr 2011 | B2 |
8205004 | Kaufman | Jun 2012 | B1 |
8583818 | Dhruv | Nov 2013 | B2 |
9061207 | Perlman | Jun 2015 | B2 |
9191322 | Schlack | Nov 2015 | B2 |
9294526 | George | Mar 2016 | B2 |
9516085 | McCarthy | Dec 2016 | B2 |
9521177 | Gahm | Dec 2016 | B2 |
9544344 | Ramamurthy | Jan 2017 | B2 |
9680902 | Yu | Jun 2017 | B2 |
9712408 | Phillips | Jul 2017 | B2 |
9781377 | Poniatowski | Oct 2017 | B2 |
9936267 | Shivadas | Apr 2018 | B2 |
9986008 | Ramamurthy | May 2018 | B2 |
9992499 | Su | Jun 2018 | B2 |
10069885 | Dasher | Sep 2018 | B2 |
10194183 | Major | Jan 2019 | B2 |
10419787 | Li | Sep 2019 | B2 |
20020144260 | Devara | Oct 2002 | A1 |
20030002439 | Lee | Jan 2003 | A1 |
20030236904 | Walpole | Dec 2003 | A1 |
20040160961 | Duckering et al. | Aug 2004 | A1 |
20080060029 | Park | Mar 2008 | A1 |
20080119286 | Brunstetter | May 2008 | A1 |
20080195743 | Brueck | Aug 2008 | A1 |
20080301746 | Wiser | Dec 2008 | A1 |
20090043906 | Hurst | Feb 2009 | A1 |
20100031162 | Wiser | Feb 2010 | A1 |
20100142915 | McDermott | Jun 2010 | A1 |
20100166062 | Perlman | Jul 2010 | A1 |
20100166065 | Perlman | Jul 2010 | A1 |
20100316050 | Baykal | Dec 2010 | A1 |
20110058490 | Mills | Mar 2011 | A1 |
20110096828 | Chen | Apr 2011 | A1 |
20110150099 | Owen | Jun 2011 | A1 |
20110231519 | Luby | Sep 2011 | A1 |
20110231569 | Luby | Sep 2011 | A1 |
20110238789 | Luby | Sep 2011 | A1 |
20110239078 | Luby | Sep 2011 | A1 |
20110274179 | Holden | Nov 2011 | A1 |
20110307929 | Youssefmir | Dec 2011 | A1 |
20120016965 | Chen | Jan 2012 | A1 |
20120173748 | Bouazizi | Jul 2012 | A1 |
20120177101 | van der Schaar | Jul 2012 | A1 |
20120259994 | Gillies | Oct 2012 | A1 |
20120317189 | Einarsson | Dec 2012 | A1 |
20130007223 | Luby | Jan 2013 | A1 |
20130013803 | Bichot | Jan 2013 | A1 |
20130058480 | Ziskind | Mar 2013 | A1 |
20130089142 | Begen | Apr 2013 | A1 |
20130091251 | Walker | Apr 2013 | A1 |
20130091297 | Minder | Apr 2013 | A1 |
20130103849 | Mao | Apr 2013 | A1 |
20130160058 | Albal | Jun 2013 | A1 |
20130166765 | Kaufman | Jun 2013 | A1 |
20130246643 | Luby | Sep 2013 | A1 |
20130262694 | Swaminathan | Oct 2013 | A1 |
20130263201 | Chung-How | Oct 2013 | A1 |
20130311668 | Akhtar | Nov 2013 | A1 |
20140019633 | Zhang | Jan 2014 | A1 |
20140089452 | Beck | Mar 2014 | A1 |
20140112635 | Kelley | Apr 2014 | A1 |
20140119428 | Catchpole | May 2014 | A1 |
20140201324 | Zhang | Jul 2014 | A1 |
20140215085 | Li | Jul 2014 | A1 |
20140280749 | Arana et al. | Sep 2014 | A1 |
20140281000 | Dattagupta et al. | Sep 2014 | A1 |
20140317241 | Zhao | Oct 2014 | A1 |
20150052437 | Crawford | Feb 2015 | A1 |
20150071075 | Ramakrishnan | Mar 2015 | A1 |
20150095450 | Vitthaladevuni | Apr 2015 | A1 |
20150100702 | Krishna | Apr 2015 | A1 |
20150101003 | Bull | Apr 2015 | A1 |
20150146778 | De Cicco | May 2015 | A1 |
20150163273 | Radcliffe | Jun 2015 | A1 |
20150200986 | Stockhammer | Jul 2015 | A1 |
20150207841 | Drang | Jul 2015 | A1 |
20150249622 | Phillips | Sep 2015 | A1 |
20150256906 | Jones | Sep 2015 | A1 |
20150271231 | Luby | Sep 2015 | A1 |
20150271237 | Stockhammer | Sep 2015 | A1 |
20150282000 | Andersson | Oct 2015 | A1 |
20150288617 | Dasher | Oct 2015 | A1 |
20150312303 | Krishna | Oct 2015 | A1 |
20150341412 | Marchand | Nov 2015 | A1 |
20150358373 | Famaey | Dec 2015 | A1 |
20150382034 | Thangaraj | Dec 2015 | A1 |
20160028594 | Ramakrishnan | Jan 2016 | A1 |
20160028595 | Ramakrishnan | Jan 2016 | A1 |
20160028647 | Ramakrishnan | Jan 2016 | A1 |
20160028651 | Ramakrishnan | Jan 2016 | A1 |
20160050241 | Lotfallah | Feb 2016 | A1 |
20160050246 | Liao | Feb 2016 | A1 |
20160065995 | Phillips | Mar 2016 | A1 |
20160072637 | Gholmieh | Mar 2016 | A1 |
20160072864 | Houdaille | Mar 2016 | A1 |
20160112732 | Li | Apr 2016 | A1 |
20160119404 | Bowen | Apr 2016 | A1 |
20160134673 | MacInnis | May 2016 | A1 |
20160198012 | Fablet | Jul 2016 | A1 |
20160198161 | Samuelsson | Jul 2016 | A1 |
20160205158 | Lo | Jul 2016 | A1 |
20160211002 | Tada | Jul 2016 | A1 |
20160212452 | Tada | Jul 2016 | A1 |
20160255131 | Bulava | Sep 2016 | A1 |
20160261661 | Taibi | Sep 2016 | A1 |
20160286247 | Phillips | Sep 2016 | A1 |
20160286248 | Phillips | Sep 2016 | A1 |
20160286249 | Phillips | Sep 2016 | A1 |
20160308934 | Gholmieh | Oct 2016 | A1 |
20160308958 | Navali | Oct 2016 | A1 |
20160309241 | Ljung | Oct 2016 | A1 |
20160337424 | Mandyam | Nov 2016 | A1 |
20160337680 | Kalagi | Nov 2016 | A1 |
20160373324 | Gholmieh | Dec 2016 | A1 |
20170034545 | Rozenberg | Feb 2017 | A1 |
20170034589 | Rozenberg | Feb 2017 | A1 |
20170070551 | Phillips | Mar 2017 | A1 |
20170070757 | Phillips | Mar 2017 | A1 |
20170070758 | Phillips | Mar 2017 | A1 |
20170070773 | Phillips | Mar 2017 | A1 |
20170126256 | Salomons | May 2017 | A1 |
20170156015 | Stockhammer | Jun 2017 | A1 |
20170171103 | Gouache | Jun 2017 | A1 |
20170171264 | Salomons | Jun 2017 | A1 |
20170171287 | Famaey | Jun 2017 | A1 |
20170171589 | Phillips | Jun 2017 | A1 |
20170180817 | Thompson | Jun 2017 | A1 |
20170188072 | Major | Jun 2017 | A1 |
20170195393 | Su | Jul 2017 | A1 |
20170223074 | Degrange | Aug 2017 | A1 |
20170223081 | Degrange | Aug 2017 | A1 |
20170223424 | Degrange | Aug 2017 | A1 |
20170331875 | Houze | Nov 2017 | A1 |
20170332116 | Lee | Nov 2017 | A1 |
20170339207 | Mueller | Nov 2017 | A1 |
20170366833 | Amidei | Dec 2017 | A1 |
20180007395 | Ugur | Jan 2018 | A1 |
20180109468 | Sridhar | Apr 2018 | A1 |
20180109743 | Oh | Apr 2018 | A1 |
20180212882 | Phillips | Jul 2018 | A1 |
20180375915 | Sridhar | Dec 2018 | A1 |
20190028524 | Salomons | Jan 2019 | A1 |
20190306551 | Arye | Oct 2019 | A1 |
Number | Date | Country |
---|---|---|
0199370 | Dec 2001 | WO |
Entry |
---|
Jiang, Junchen et al.; Improving Fairness, Efficiency, and Stability in HTTP-Based Adaptive Video Streaming With Festive (Jun. 14, 2012). |
Number | Date | Country | |
---|---|---|---|
20180375792 A1 | Dec 2018 | US |