Patent Abstract:
Techniques described herein may allow for the flexible selection, and use of, various streaming techniques when a particular streaming technique is specified or required by a content player application. For example, some content player applications require the use of Hypertext Transfer Protocol Live Streaming (“HLS”). In some situations, other techniques, such as Moving Pictures Experts Group Dynamic Streaming over Hypertext Transfer Protocol (“MPEG-DASH”), may be preferable. The selection may be based on current operating conditions, such as whether a device, running the content player application, is using a WiFi or a cellular network. A local web proxy may be used to allow a content player application to request files using HLS, and may obtain the requested files using another streaming technique (e.g., MPEG-DASH). The obtained files may be transpackaged and provided to the content player application for presentation to a user.

Full Description:
BACKGROUND 
     Various techniques are available for the live streaming of content, such as video content. Some such techniques include mechanisms to provide variable bitrate content, whereby the bitrate of content may be dynamically adjusted based on certain conditions, such as the bandwidth capabilities of a receiving user device, the load or congestion of one or more networks via which the user device receives the content, or other conditions. Some existing techniques to provide variable bitrate streaming content include Hypertext Transfer Protocol (“HTTP”) live streaming (“HLS”) and Moving Pictures Experts Group (“MPEG”) Dynamic Adaptive Streaming over HTTP (“DASH”), sometimes referred to as “MPEG-DASH,” or “MPD.” HLS and MPD (and/or other techniques) may have certain advantages and/or disadvantages in relation to one another, so a content provider may desire to deliver content using a particular technique (e.g., HLS as opposed to MPD, or vice versa). However, hardware and/or software constraints may be in place, whereby a content provider is forced to use a particular technique, even though another technique may be desirable. For example, some video players may require the use of HLS, even in situations where a content provider may desire to instead use MPD or another technique. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  illustrates an example overview of implementations described herein, in which content is delivered to a user device using different techniques, based on a type of wireless network to which the user device is connected; 
         FIG. 2  illustrates an example environment, in which systems and/or methods, described herein, may be implemented; 
         FIG. 3  illustrates example components of a user device, and an example signal flow relating to obtaining and transpackaging content using an MPD technique; 
         FIGS. 4 and 5  illustrate example components of a user device, and example signal flows relating to obtaining content using an HLS technique; 
         FIG. 6  illustrates an example data structure illustrating a mapping between a local HLS playlist, a remote HLS playlist, and an MPD playlist; 
         FIGS. 7 and 8  illustrate example processes for selectively obtaining content, using HLS or another technique, based on a type of network to which a user device is connected; and 
         FIG. 9  illustrates example components of a device, in accordance with some implementations described herein. 
     
    
    
     DETAILED DESCRIPTION OF PREFERRED EMBODIMENTS 
     The following detailed description refers to the accompanying drawings. The same reference numbers in different drawings may identify the same or similar elements. 
     Some implementations, described herein, may provide for the selective delivery of content (e.g., streaming content, such as streaming video content), based on a type of wireless network to which a user device, that receives the content, is connected. For example, as shown in  FIG. 1 , when connected to a cellular network (e.g., a Long-Term Evolution (“LTE”) network), a user device may obtain content using an HLS technique. When connected to another type of network, such as a WiFi network (e.g., a network that operates based on an Institute of Electrical and Electronics Engineers Institute of Electrical and Electronics Engineers (“IEEE”) 802.11-based standard), the user device may obtain content using an MPD technique. 
     Using MPD techniques may be desirable to a content provider associated with the content (e.g., when the user device is connected to a WiFi network), but software constraints on the user device may require the use of HLS. As described herein, when obtaining content using a technique other than HLS (e.g., MPD), content playback software on the user device (and/or other software that enforces the HLS requirement) may request the content using HLS techniques, an HTTP proxy on the user device may intercept the request and obtain the content using MPD techniques (or another technique), may “transpackage” the obtained content according to HLS, and may provide the transpackaged content to the content playback software. As used herein, the term “transpackage” may refer to the act of changing, or repackaging, the file format or encapsulation of content (e.g., streaming audio/video content). In some implementations, transpackaging may be a separate concept from transcoding (e.g., modifying the encoding technique of content). In this manner, the content playback software is still able to enforce the requirement that the content be delivered using HLS, while the content provider gains flexibility in the manner in which content is provided to user devices. 
       FIG. 2  illustrates an example environment  200 , in which systems and/or methods described herein may be implemented. As shown in  FIG. 2 , environment  200  may include one or more user devices  205 , cellular network  210 , WiFi network  215 , packet data network (“PDN”)  220 , and content provider  225 . 
     The quantity of devices and/or networks, illustrated in  FIG. 2 , is provided for explanatory purposes only. In practice, environment  200  may include additional devices and/or networks; fewer devices and/or networks; different devices and/or networks; or differently arranged devices and/or networks than illustrated in  FIG. 2 . For example, while not shown, environment  200  may include devices that facilitate or enable communication between various components shown in environment  200 , such as routers, modems, gateways, switches, hubs, etc. Alternatively, or additionally, one or more of the devices of environment  200  may perform one or more functions described as being performed by another one or more of the devices of environments  200 . Devices of environment  200  may interconnect with each other and/or other devices via wired connections, wireless connections, or a combination of wired and wireless connections. In some implementations, one or more devices of environment  200  may be physically integrated in, and/or may be physically attached to, one or more other devices of environment  200 . Also, while “direct” connections are shown in  FIG. 2  between certain devices, some devices may communicate with each other via PDN  220  (and/or another network). 
     User device  205  may include any computation and communication device that is capable of communicating with one or more networks (e.g., PDN  220 , via cellular network  210  and/or WiFi network  215 ). For example, user device  205  may include a radiotelephone, a personal communications system (“PCS”) terminal (e.g., a device that combines a cellular radiotelephone with data processing and data communications capabilities), a personal digital assistant (“PDA”) (e.g., that can include a radiotelephone, a pager, Internet/intranet access, etc.), a smart phone, a laptop computer, a tablet computer, a camera, a television, a set-top device (“STD”), a personal gaming system, a wearable device, and/or another type of computation and communication device. User device  205  may include logic and/or hardware circuitry to communicate via one or more “short range” wireless protocols (e.g., via WiFi network  215 ), such as WiFi, Bluetooth, Near Field Communications (“NFC”), ZigBee (e.g., based on an IEEE 802.15.4-based standard), or the like. User device  205  may also include logic and/or hardware circuitry to communicate via a wireless telecommunications protocol (e.g., via cellular network  210 ), such as LTE, Third Generation Partnership Project (“3GPP”) Third Generation (“3G”), Code Division Multiple Access (“CDMA”) 2000 1×, and/or another wireless telecommunications protocol. 
     As described below, user device  205  may include logic and/or hardware circuitry to obtain content (e.g., streaming content) in a manner that is different from constraints required by software running on user device  205  (e.g., content playback software), and transpackage the content according to such constraints (thereby fulfilling the constraints, while also enhancing the available options for obtaining the content). For example, content playback software may require that streaming video content be obtained using HLS. In some implementations, streaming video content may be obtained using a different technique (such as MPD), and the obtained content may be transpackaged according to HLS and provided to the content playback software, thereby satisfying the requirements of the content playback software. 
     Cellular network  210  and WiFi network  215  may each correspond to one or more radio access networks (“RANs”), via which user device  205  may access PDN  220  (or other networks or devices). Cellular network  210  may generally represent one or more networks that operate at a set of licensed frequencies or frequency bands (e.g., frequencies that have been licensed by a governmental agency), such as frequencies that correspond to LTE, 3GPP Second Generation (“2G”), 3GPP 3G, CDMA2000 1×, or the like. While referred to herein as a “cellular” network, it is to be understood that cellular network  210  may, in some implementations, include types of networks that do not necessarily operate using “cells,” but operate at licensed frequencies, and/or are networks provided by wireless telecommunications providers. In some implementations, cellular network  210  may correspond to “shared” frequencies, in which the same frequency band is licensed or available to multiple different entities (e.g., multiple different wireless telecommunications providers). In some implementations, cellular network  210  may be referred to as a wireless wide area network (“WWAN”). 
     Cellular network  210  may include one or more network devices that receive, process, and/or transmit traffic, such as calls, audio, video, text, and/or other data, destined for and/or received from user device  205 . For example, cellular network  210  may include one or more base stations that operate at one or more frequency bands including, but not limited to, LTE, 1×, 2G, and/or 3G frequency bands. Cellular network  210  may also include, or be communicatively coupled to, a core network and/or one or more other devices that transport traffic between a base station and PDN  220 . For example, cellular network  210  may include a serving gateway (“SGW”), an Ethernet backhaul link, a PDN gateway (“PGW”), and/or one or more other devices. 
     WiFi network  215  may generally represent one or more networks that operate at a set of unlicensed frequencies or frequency bands (e.g., frequency bands that have not been licensed by a governmental agency, or for which such licensing may not be necessary). For example, WiFi network  215  may operate at frequency bands including, but not limited to, 2.4 GHz and/or 5 GHz frequency bands, and may utilize IEEE 802.11-based protocols. While referred to as a “WiFi” network, in some implementations, WiFi network  215  may utilize one or more communications techniques in addition to, or in lieu of, WiFi techniques. For example, in some implementations, WiFi network  215  may utilize Bluetooth, NFC, ZigBee, and/or one or more other communication techniques. In some implementations, the term “WiFi network” may generally refer to a type of network that is not provided by a wireless telecommunications service provider. In some implementations, cellular network  210  may be referred to as a wireless local area network (“WLAN”). 
     WiFi network  215  may include one or more network devices that receive, process, and/or transmit traffic, such as calls, audio, video, text, and/or other data, destined for and/or received from user device  205 . For example, WiFi network  215  may include one or more WLAN access points, such as a WiFi access point. As mentioned above, in situations where WiFi network  215  includes one or more other types of technologies, WiFi network  215  may include access points or other types of suitable devices, according to the other types of technologies, via which user device  205  may wirelessly connect to WiFi network  215 . WiFi network  215  may also include, or be communicatively coupled to, an Internet service provider&#39;s (“ISP&#39;s”) network and/or one or more other devices that transport traffic between a WLAN access point and PDN  220 . For example, WiFi network  215  may include an Internet gateway, which communicatively couples a WLAN access point to the ISP&#39;s network. 
     PDN  220  may include one or more wired and/or wireless networks. For example, PDN  220  may include an Internet Protocol (“IP”)-based PDN, a wide area network (“WAN”) such as the Internet, a private enterprise network, and/or one or more other networks. User device  205  may connect, via cellular network  210 , WiFi network  215 , and/or PDN  220 , to data servers, application servers, other user devices  205 , content provider  225 , and/or to other servers or applications that are coupled to PDN  220 . PDN  220  may be connected to one or more other networks, such as a public switched telephone network (“PSTN”), a public land mobile network (“PLMN”), and/or another network. 
     Content provider  225  may include one or more devices (e.g., a single physical device or a distributed set of devices) that provide content (e.g., streaming content) to user device  205 . For example, as described below, content provider  225  may provide playlists, such as HLS playlists and/or MPD playlists, which may be used by user device  205  to obtain streaming content. Content provider  225  may receive requests from user device  205  for content (e.g., content specified in a particular playlist), and may provide the content to user device  205  in a streaming manner. In some implementations, content provider  225  may be, or may be communicatively coupled to, a content delivery network (“CDN”), which may cache content at “edges” of networks, in order to reduce the load within a network (e.g., within an Internet service provider&#39;s network). 
       FIG. 3  illustrates example functional components of user device  205 , as well as example signals that relate to the obtaining of content using one streaming technique (i.e., MPD, in this example), and the transpackaging of the obtained content and delivery to a content playback application according to another streaming technique (i.e., HLS, in this example). In the example shown in  FIG. 3 , assume that user device  205  is connected to WiFi network  215 . As shown, user device  205  may include content selection module  305 , web proxy  310 , content playback module  315 , and transpackaging module  320 . In some implementations, user device  205  may include additional, fewer, different, and/or differently arranged components than shown in  FIG. 3 . The components shown in  FIG. 3  may be implemented as hardware circuitry, software logic, or a combination of hardware and software. 
     Content selection module  305  may present (e.g., as a graphical user interface (“GUI”) via a display device associated with user device  205 ), the option to select one or more content items. For example, content selection module  305  may present a GUI with a set of thumbnails, icons, links, and/or other selectable visual representations that each correspond to a particular content item (e.g., a streaming video content item). Content selection module  305  may correspond to, for example, an application (or “app”) installed on user device  205  by an end user of user device  205 , a vendor of user device  205 , or a manufacturer of user device  205 . As shown, for instance, content selection module  305  may receive (at  325 ) a selection of a particular item of content. The selection may correspond to, for example, a selection by a user on a touchscreen of user device  205  of a particular content item, a voice command by the user, an instruction received from another device (e.g., from a wearable device in communication with user device  205 ), and/or some other form of selection. 
     Content selection module  305  may also receive and/or store information regarding a uniform resource locator (“URL”), and/or some other identifier, associated with a provider of the content (e.g., a URL associated with the content, hosted by content provider  225 ). Upon selection (at  325 ) of the content, content selection module  305  may obtain (at  330 ) one or more playlists, associated with the content, from content provider  225 . The playlists may include an MPD playlist and/or an HLS playlist. 
     The playlists may include listings of files (and URLs or other identifiers associated with the files) that correspond to the content. For example, assuming that the selected content is a movie that is two hours in length, a particular playlist may include a listing of 720 ten-second files. The listing of files may include URLs and/or other identifiers, which may be used to obtain the files while streaming the content. In some implementations, the playlists (obtained at  330 ) may include multiple playlists that each correspond to different bitrates (e.g., one playlist may correspond to a “low” bitrate, another playlist may correspond to a “medium” bitrate, and yet another playlist may correspond to a “high” bitrate). The playlist(s) (obtained at  330 ) may include one or more MPD playlists and, in some implementations, may include one or more HLS playlists. 
     In some implementations, content selection module  305  may receive and/or store different URLs (or other identifiers) for different playlists associated with a particular content item, and may determine which playlist(s) to retrieve, for the content item, based on which type of network user device  205  is connected to. In some implementations, content selection module  305  may determine whether user device  205  is connected to cellular network  210  or WiFi network  215  (and/or may receive a notification from another component of user device  205 , indicating the type of network to which user device  205  is connected). In the example shown in  FIG. 3 , content selection module  305  may have determined that user device  205  is connected to WiFi network  215 . Based on determining that user device  205  is connected to WiFi network  215 , content selection module  305  may request the MPD playlist from content provider  225 . In other situations (e.g., as described below with respect to  FIGS. 4 and 5 ), content selection module  305  may request an HLS playlist from content provider  225  (e.g., when user device  205  is connected to cellular network  210 ). In some implementations, content provider  225  may provide HLS playlists and MPD playlists (e.g., content selection module  305  may not specifically request a particular type of playlist) when content selection module  305  requests (at  330 ) playlists for the selected content. 
     Web proxy  310  may be an HTTP proxy, or another type of web proxy, installed at user device  205 . As described below, web proxy  310  may receive and handle requests (e.g., HTTP requests) directed at a particular address associated with the HTTP proxy (e.g., “http://127.0.0.1:[port],” where “http://127.0.0.1” is an IP address that user device  205  may use to refer to itself, and where “[port]” represents a port number through which web proxy  310  can be reached by applications, running on user device  205 , invoking the IP address and port number). In some implementations, the address associated with the HTTP proxy may include another identifier of user device  205  itself, such as the logical name “localhost” (e.g., in lieu of the IP address “127.0.0.1”). Generally speaking, from the standpoint of other applications running on user device  205 , web proxy  310  may appear as a separate device that can be reached through HTTP messaging (or through some other type of network protocol in lieu of, or in addition to, HTTP). 
     Once the playlist(s) is/are obtained (at  330 ), content selection module  305  may provide (at  335 ) an MPD playlist to web proxy  310 . In some implementations, content selection module  305  (and/or web proxy  310 ) may generate a “local” HLS playlist, based on the MPD playlist. For example, content selection module  305  may parse the MPD playlist (which may be in an extended markup language (“XML”) format) in order to identify files (including durations of the files) associated with the selected content, and may generate an HLS playlist (referred to herein as a “local” HLS playlist), in which the files correspond to the files identified in the MPD playlist. The files, listed in the HLS playlist, may include links to web proxy  310 . In some implementations, content selection module  305  may generate or maintain a mapping of the files, specified in the MPD playlist, to the files specified in the local HLS playlist. 
     As an example, consider an example MPD playlist, which includes the following XML code: 
                                             &lt;SegmentURL media=“cdn.foobar.com/v1/1.fmp4” mediaRange=           “0-2999”/&gt;           &lt;SegmentURL media=“cdn.foobar.com/v1/2.fmp4” mediaRange=           “3000-5999”/&gt;           &lt;SegmentURL media=“cdn.foobar.com/v1/3.fmp4” mediaRange=           “6000-8999”/&gt;                        
In this example playlist, “cdn.foobar.com/v1/” may be a URL that corresponds to a directory (e.g., a directory stored by content provider  225 ), in which files corresponding to a particular content item are stored. The content files, in this example, may be “1.fmp4,” “2.fmp4,” and “3.fmp4.” The “mediaRange” tag may indicate a temporal location of a particular file, and may be expressed in milliseconds (or, in other implementations, another measure of time). For instance, the file “1.fmp4” may correspond to the first three seconds of the streaming content, the file “2.fmp4” may correspond to the next three seconds of the streaming content, and the file “3.fmp4” may correspond to the following three seconds after “2.fmp4.” Thus, in this example, each of the three files has a duration of three seconds.
 
     An example local HLS playlist, generated based on this MPD playlist, may include the following text: 
                                             #EXTINF:3.000,           http://127.0.0.1:1234/1.ts           #EXTINF:3.000,           http://127.0.0.1:1234/2.ts           #EXTINF:3.000,           http://127.0.0.1:1234/3.ts                        
In this example local HLS playlist, the “#EXTINF” tag may denote a duration of each file (e.g., in seconds or using another measure of time), and URL “http://127.0.0.1:1234” may refer to an IP address and port number associated with web proxy  310 . The file names “1.ts,” “2.ts,” and “3.ts” may not refer to actual files; rather, these file names may be mapped to files “1.fmp4,” “2.fmp4,” and “3.fmp4” from the MPD playlist. As described below, when files “1.ts,” “2.ts,” and “3.ts” are requested by content playback module  315 , web proxy  310  may instead obtain the corresponding files, of the MPD playlist, from content provider  225 .
 
     As shown in the above playlist examples, MPD playlists may refer to “.fmp4” files, or fragmented MPEG-4 files, while HLS playlists may refer to “.ts” files, or MPEG-2 transport stream files. In practice, different types of files may be used for the MPD playlists and/or the HLS playlists. For the sake of clarity of this disclosure, MPD playlists will continue to be described in the context of fragmented MPEG-4 (“fMP4”) files, and HLS playlists will continue to be described in the context of MPEG-2 transport stream (“TS”) files. 
     Once the local HLS playlist is generated and/or obtained by content selection module  305 , content selection module  305  may provide (at  340 ) the local HLS playlist to content playback module  315 . Content playback module  315  may, in some implementations, be a native video player application associated with user device  205  (e.g., a video player application that is installed by a vendor and/or manufacturer of user device  205 ). Content playback module  315  may enforce streaming content restrictions, such as by requiring the use of HLS for streaming video. 
     Content playback module  315  may request (at  345 ) files, specified in the local HLS playlist, using the URLs specified in the local HLS playlist. As mentioned above, the URLs may point to “virtual” files on web proxy  310 . Web proxy  310  may determine a particular file, in the MPD playlist, that corresponds to a particular file (from the HLS playlist), requested (at  345 ) by content playback module  315 . For example, as mentioned above, web proxy  310  may use a previously-generated mapping, between the MPD playlist and the local HLS playlist, to determine the corresponding file in the MPD playlist. Web proxy  310  may obtain (at  350 ) the determined files (e.g., fMP4 files specified in the MPD playlist) that correspond to the requested files (e.g., TS files specified in the HLS playlist). In this example, the files may be obtained via WiFi network  215 . 
     Once obtained (at  350 ), the files may be provided (at  355 ) to transpackaging module  320 . Transpackaging module  320  may be able to transpackage files from one transport format to another. For example, transpackaging module  320  may be capable of receiving an fMP4 file as input, and outputting a corresponding TS file. Transpackaging module  320  may use any known or conventional technique in order to perform the transpackaging. In some implementations, content transpackaging module may be capable of performing other modifications on content, such as transcoding (e.g., changing content from one codec to another codec). Transpackaging module  320  may provide (at  360 ) the transpackaged file to web proxy  310 . 
     For example, assume that web proxy  310  obtains (at  350 ) an fMP4 file named “2.fmp4” from content provider  225 , and provides (at  355 ) the file to transpackaging module  320 . Transpackaging module  320  may transpackage the file into a TS file named “2.ts,” and may provide (at  360 ) the TS file to web proxy  310 . 
     Web proxy  310  may provide the transpackaged file (“2.ts”) to content playback module  315 . In some implementations, when providing the transpackaged file to content playback module  315 , web proxy  310  may use HTTP signaling (e.g., to simulate an external HTTP-enabled web server in communication with content playback module  315 ). In this sense, from the viewpoint of content playback module  315 , content playback module  315  has requested, and received, a video file in a manner commensurate with HLS content delivery techniques. Content playback module  315  may present (e.g., play) the received file, which may correspond to a portion of streaming video content (e.g., a portion of a movie, a portion of a television show, etc.). 
       FIG. 4  illustrates example functional components of user device  205 , as well as example signals that relate to the obtaining of content using HLS, when user device  205  is connected to cellular network  210 . The components shown in  FIG. 4  may be the same components, of user device  205 , shown in  FIG. 3 . 
     As shown in  FIG. 4 , content selection module  305  may receive (at  405 ) a selection of content. The selection may correspond to, for example, a selection by a user of content that the user wishes to access. As mentioned above, assume that user device  205  is connected to cellular network  210 , in the example shown in  FIG. 4 . Content selection module  305  may obtain (at  410 ), based on determining that user device  205  is connected to cellular network  210 , a remote HLS playlist associated with the requested content from content provider  225 . The remote HLS playlist may include URLs to files (e.g., TS files) located on content provider  225  (and/or another device). 
     Content selection module  305  may provide (at  415 ) the received remote HLS playlist to content playback module  315 , which may obtain (at  420 ) files specified in the remote HLS playlist from content provider  225 . Content playback module  315  may present (e.g., play) the received files, which may correspond to respective portions of streaming video content. 
       FIG. 5  also illustrates example functional components of user device  205 , as well as another example of signals that relate to the obtaining of content using HLS, when user device  205  is connected to cellular network  210 . The components shown in  FIG. 5  may be the same components, of user device  205 , shown in  FIGS. 3 and 4 . 
     As shown in  FIG. 5 , content selection module  305  may receive (at  505 ) a selection of content. The selection may correspond to, for example, a selection by a user of content that the user wishes to access. As mentioned above, assume that cellular network  210  is connected to cellular network  210 , in the example shown in  FIG. 5 . Based on receiving the selection of the content, content selection module  305  may obtain (at  510 ) an MPD playlist associated with the content from content provider  225 . In some implementations, content selection module  305  may also obtain an HLS playlist associated with the content from content provider  225 . 
     As similarly described above with respect to  FIG. 3 , content selection module  305  (and/or web proxy  310 ) may generate (at  515 ) a “local” HLS playlist, based on the MPD playlist. In some implementations, content selection module  305  and/or web proxy  310  may maintain a mapping between files in the local HLS playlist and the MPD playlist. In some implementations, a further mapping between files in the remote HLS playlist (e.g., as may be obtained at  510 ) to the local HLS playlist and/or the MPD playlist may be maintained. 
     An example of such a mapping is shown in  FIG. 6 . Data structure  600  may include a mapping of files (e.g., including resource locator information, such as URLs for the files) from an MPD playlist (e.g., URLs in the “fMP4 file name” column), files from a remote HLS playlist (e.g., files in the “Remote TS file name” column), and files from a local HLS playlist (e.g., files in the “Local TS file name” column). Such a mapping may be useful in situations where the different playlists use different names to refer to the same segment of streaming content. For example, assume that web proxy  310  obtains an MPD playlist that includes the URL “cdn.foobar.com/v1/2.fmp4,” and also obtains a remote HLS playlist that includes the URL “cdn.foobar.com/v1/10-002.ts” to refer to the same file (e.g., in instances where content provider  225  serves the files in these different formats). Web proxy  310  may generate a local HLS playlist based on the MPD playlist and/or the HLS playlist, and may generate the local URL “127.0.0.1:1234/vid1/10-2.ts” to refer to the same segment. The mapping (e.g., as shown in data structure  600 ) may be used by web proxy  310  when obtaining content requested by content playback module  315  (e.g., where the requests are made using local URLs), either by obtaining the content in a format associated with HLS (e.g., TS) or in a format associated with MPD (e.g., fMP4). 
     Returning to  FIG. 5 , content selection module  305  may provide (at  520 ) the generated local HLS playlist to content playback module  315 . Content playback module  315  may request (at  525 ) files specified in the local HLS playlist (i.e., using URLs that point to “virtual” files associated with web proxy  310 ). Web proxy  310  may identify files, specified in the remote playlist, that correspond to the requested files. For example, web proxy  310  may use data structure  600  (and/or other mapping information) in order to identify a mapping between the files specified in the local playlist and the files specified in the remote playlist. 
     As may be apparent, the request, at  525  in  FIG. 5 , may be similar or identical to the request described above with signal  345  in  FIG. 3 . However, in responding to the request for a file from the local playlist, web proxy  310  may handle the request differently in different situations. For example, in  FIG. 3 , web proxy  310  may obtain (at  350 ) files specified in the MPD playlist, while in  FIG. 5 , web proxy  310  may obtain (at  530 ) files specified in the remote HLS playlist. Web proxy  310  may determine, or may receive information regarding (e.g., from content selection module  305 ), whether user device  205  is connected to cellular network  210  or WiFi network  215 , and may obtain files (from content provider  225 ) in a manner that depends on which network user device  205  is connected to. For example, when connected to WiFi network  215  (as in the example of  FIG. 3 ), web proxy  310  may obtain files from the MPD playlist, while when connected to cellular network  210  (as in the example of  FIG. 5 ), web proxy  310  may obtain files from the remote HLS playlist. 
     Once web proxy  310  obtains (at  530 ) the files specified in the remote HLS playlist, that correspond to the requested files specified in the local HLS playlist, web proxy  310  may provide (at  535 ) the obtained files to content playback module  315 . In some implementations, web proxy  310  may rename the obtained files, in order to match the names of the requested files. In some implementations, web proxy  310  may use mapping information (e.g., as shown in data structure  600  of  FIG. 6 ), in order to rename the obtained files to the match the requested files. Content playback module  315  may proceed to play the received files. 
       FIG. 7  illustrates an example process  700  for selectively obtaining content, using HLS or another technique (e.g., MPD), based on a type of network to which a user device is connected (e.g., whether the user device is connected to a WiFi network or a cellular network). In some implementations, some or all of process  700  may be performed by user device  205  (e.g., by one or more of components  305 - 320 ). 
     As shown, process  700  may include receiving (at  705 ) a request for a playlist associated with selected content. For example, as described above with respect to content selection module  305 , user device  205  may receive a selection of content, such as video content that a user wishes to access. The selection may include the selection of a hyperlink, and/or another type of input that specifies the desired content. User device  205  may identify resource locator information associated with the selected content (e.g., a URL, hosted by content provider  225 , of one or more playlists associated with the content). Also, in some implementations, once the content is playing, requests for playlists may be received (at  705 ) during the playback of the content. 
     Process  700  may also include retrieving (at  710 ) one or more playlists associated with the selected content. For example, as described above with respect to content selection module  305 , user device  205  may obtain an HLS playlist (e.g., a remote HLS playlist) and/or an MPD playlist associated with the selected content. That is, in some implementations, content selection module  305  may obtain both playlists based on receiving the selection of the content. 
     Process  700  may further include generating (at  715 ) a mapping relating a local HLS playlist, a remote HLS playlist, and/or an MPD playlist. For example, as described above with respect to content selection module  305  and data structure  600 , user device  205  may generate a local HLS playlist based on the obtained remote HLS playlist and/or the obtained MPD playlist, and may generate a mapping between the generated local HLS playlist, the remote HLS playlist, and/or the MPD playlist. As mentioned above, the file names of the respective playlists may be different, and the mapping may assist in renaming files if necessary. 
     Process  700  may additionally include providing (at  720 ) the local HLS playlist to a content playback module. For example, as described above with respect to content selection module  305 , a content playback module (such as content playback module  315 , which may be a video player application, such as a native video player application installed with an operating system and/or firmware associated with user device  205 ). Content playback module  315  may, for example, typically use HLS techniques to obtain streaming content, and/or may not be configured to utilize other techniques. 
     Process  700  may also include receiving (at  725 ) a request, from the content playback module, for a file (e.g., a TS file specified in the local HLS playlist) from the content playback module. For example, as described above with respect to web proxy  310 , content playback module  315  may provide a request for a particular file specified in the local HLS playlist. The request may be, for example, an HTTP request, which may be handled by web proxy  310 . As discussed above, the HTTP request may be a request for which the destination of the request is user device  205  itself (e.g., the HTTP request may include the IP address “127.0.0.1,” and a port number that is associated with web proxy  310 ). 
     Process  700  may further include determining (at  730 ) whether the user device is connected to a WiFi network or a cellular network. For example, as described above with respect to content selection module  305  and/or web proxy  310 , user device  205  may determine whether user device  205  is connected to cellular network  210  or WiFi network  215 . 
     If the user device is connected to a WiFi network, process  700  may include identifying (at  735 ) a file (e.g., an fMP4 file), in the MPD playlist, that is associated with the requested file. For example, as described above with respect to web proxy  310 , user device  205  may identify a file (e.g., an fMP4 file) in the MPD playlist (e.g., as retrieved at  710 ) that corresponds to the file (e.g., a TS file) requested (at  725 ) by content playback module  315 . In some implementations, user device  205  may use mapping information, such as the example data structure  600  shown in  FIG. 6 , in order to determine which file(s) in the MPD playlist corresponds to the requested file. 
     Process  700  may additionally include obtaining (at  740 ) the identified file from the content provider. For example, as described above with respect to web proxy  310 , user device  205  may obtain the file (identified at  735 ) from content provider  225 . 
     Process  700  may also include transpackaging (at  745 ) the obtained file. For example, as described above with respect to transpackaging module  320 , user device  205  may transpackage the received file from a format, as provided by content provider  225  (e.g., the fMP4 file format), to a format that accords with the request from content playback module  315  (e.g., the TS file format). As mentioned above, in situations where the name of transpackaged file and/or the file obtained from content provider  225  does not match the file name requested by content playback module  315 , the transpackaged file may be renamed to match the requested name (e.g., using mapping information, such as data structure  600 ). 
     Process  700  may further include providing (at  750 ) the transpackaged file to the content playback module. For example, the transpackaged file may be provided to content playback module  315 , which may play the file. 
     Returning to block  730 , if the user device is connected to a cellular network, process  700  may include identifying (at  755 ) a file, specified in the remote HLS playlist, that is associated with the requested file. For example, as described above with respect to web proxy  310 , user device  205  may use mapping information (e.g., data structure  600 ) determine a file, specified in the remote HLS playlist, that corresponds to the file (specified in the local HLS playlist) requested by content playback module  315 . 
     Process  700  may additionally include obtaining (at  760 ) the identified file from the content provider. For example, as described above with respect to web proxy  310 , user device  205  may obtain the file (identified at  755 ) from content provider  225 . In some implementations, in situations where the name of the file, obtained from content provider  225 , does not match the name of the requested file, web proxy  310  may rename the obtained file (e.g., using mapping information). Process  700  may also include providing (at  765 ) the obtained file to the content playback module, which may play the file. 
       FIG. 8  illustrates another example process  800  for selectively obtaining content, using HLS or another technique (e.g., MPD), based on a type of network to which a user device is connected (e.g., whether the user device is connected to a WiFi network or a cellular network). Process  800  is not necessarily mutually exclusive with process  700 . That is, in some implementations, a device (e.g., user device  205 ) may at certain times operate according to process  700 , while at other times operate according to process  800 . In other implementations, user device  205  may be configured to operate only according to process  700  (and not process  800 ), while in still other implementations, user device  205  may be configured to operate only according to process  800  (and not process  700 ). In one or more implementations, user device  205  may be configured to operate according to a process that is similar to processes  700  and/or  800 . Certain blocks of process  800  are similar to blocks of process  700  and, for the sake of brevity, will not be explained in detail below. 
     As shown, process  800  may include receiving (at  805 ), a request for a playlist associated with selected content, retrieving (at  810 ) one or more playlists associated with the content, and generating (at  815 ) a mapping relating two or more of the retrieved playlists (e.g., relating a local HLS playlist, a remote HLS playlist, and/or an MPD playlist). 
     Process  800  may further include determining (at  820 ) whether user device  205  is connected to cellular network  210  or WiFi network  215 . If user device  205  is connected to cellular network  210 , then process  800  may include providing (at  825 ) the remote HLS playlist to content playback module  315 . Content playback module  315  may use the remote HLS playlist to obtain streaming video content from content provider  225 . 
     If, on the other hand, user device  205  is connected to WiFi network  215 , then process  800  may include providing (at  830 ) the local HLS playlist to content playback module  315 . Process  800  may further include receiving (at  835 ) a request, from content playback module  315 , for a file specified in the local HLS playlist. For example, web proxy  310  may receive the request from content playback module  315 . 
     Process  800  may additionally include identifying (at  840 ) a file (e.g., an fMP4 file), specified in the MPD playlist, that corresponds to the requested file. For example, user device  205  may use the mapping information, generated at  815 , to identify the file specified in the MPD playlist. 
     Process  800  may also include obtaining (at  845 ) the identified file (e.g., from content provider  225 ), transpackaging (at  850 ) the obtained file, and providing (at  855 ) the transpackaged file to content playback module  315 . 
       FIG. 9  is a diagram of example components of device  900 . One or more of the devices described above may include one or more devices  900 . Device  900  may include bus  910 , processor  920 , memory  930 , input component  940 , output component  950 , and communication interface  960 . In another implementation, device  900  may include additional, fewer, different, or differently arranged components. 
     Bus  910  may include one or more communication paths that permit communication among the components of device  900 . Processor  920  may include a processor, microprocessor, or processing logic that may interpret and execute instructions. Memory  930  may include any type of dynamic storage device that may store information and instructions for execution by processor  920 , and/or any type of non-volatile storage device that may store information for use by processor  920 . 
     Input component  940  may include a mechanism that permits an operator to input information to device  900 , such as a keyboard, a keypad, a button, a switch, etc. Output component  950  may include a mechanism that outputs information to the operator, such as a display, a speaker, one or more light emitting diodes (“LEDs”), etc. 
     Communication interface  960  may include any transceiver-like mechanism that enables device  900  to communicate with other devices and/or systems. For example, communication interface  960  may include an Ethernet interface, an optical interface, a coaxial interface, or the like. Communication interface  960  may include a wireless communication device, such as an infrared (“IR”) receiver, a Bluetooth® radio, or the like. The wireless communication device may be coupled to an external device, such as a remote control, a wireless keyboard, a mobile telephone, etc. In some embodiments, device  900  may include more than one communication interface  960 . For instance, device  900  may include an optical interface and an Ethernet interface. 
     Device  900  may perform certain operations relating to one or more processes described above. Device  900  may perform these operations in response to processor  920  executing software instructions stored in a computer-readable medium, such as memory  930 . A computer-readable medium may be defined as a non-transitory memory device. A memory device may include space within a single physical memory device or spread across multiple physical memory devices. The software instructions may be read into memory  930  from another computer-readable medium or from another device. The software instructions stored in memory  930  may cause processor  920  to perform processes described herein. Alternatively, hardwired circuitry may be used in place of or in combination with software instructions to implement processes described herein. Thus, implementations described herein are not limited to any specific combination of hardware circuitry and software. 
     The foregoing description of implementations provides illustration and description, but is not intended to be exhaustive or to limit the possible implementations to the precise form disclosed. Modifications and variations are possible in light of the above disclosure or may be acquired from practice of the implementations. 
     For example, while series of blocks and/or signals have been described with regard to  FIGS. 3-5, 7, and 8 , the order of the blocks and/or signals may be modified in other implementations. Further, non-dependent blocks and/or signals may be performed in parallel. 
     Also, while described in the context of HLS playlists and MPD playlists, in practice, different types of streaming techniques may be used to practice the concepts described herein. Additionally, while described in the context of TS files and fMP4 files, in practice, different types of files may be used in various implementations. Furthermore, while described in the context of using HLS techniques while connected to cellular networks and MPD techniques while connected to WiFi networks, in practice, different criteria may be used for determining which type of streaming technique should be used. For example, in some implementations, the techniques may be switched (e.g., HLS may be used when connected to WiFi networks, while MPD may be used when connected to cellular networks). As yet another example, a certain technique may be used regardless of what type of network user device  205  is connected to (e.g., MPD techniques may be used, including the use of a local HLS playlist and a mapping to an MPD playlist). 
     The actual software code or specialized control hardware used to implement an embodiment is not limiting of the embodiment. Thus, the operation and behavior of the embodiment has been described without reference to the specific software code, it being understood that software and control hardware may be designed based on the description herein. 
     Even though particular combinations of features are recited in the claims and/or disclosed in the specification, these combinations are not intended to limit the disclosure of the possible implementations. In fact, many of these features may be combined in ways not specifically recited in the claims and/or disclosed in the specification. Although each dependent claim listed below may directly depend on only one other claim, the disclosure of the possible implementations includes each dependent claim in combination with every other claim in the claim set. 
     Further, while certain connections or devices are shown, in practice, additional, fewer, or different, connections or devices may be used. Furthermore, while various devices and networks are shown separately, in practice, the functionality of multiple devices may be performed by a single device, or the functionality of one device may be performed by multiple devices. Further, multiple ones of the illustrated networks may be included in a single network, or a particular network may include multiple networks. Further, while some devices are shown as communicating with a network, some such devices may be incorporated, in whole or in part, as a part of the network. 
     To the extent the aforementioned embodiments collect, store or employ personal information provided by individuals, it should be understood that such information shall be used in accordance with all applicable laws concerning protection of personal information. Additionally, the collection, storage and use of such information may be subject to consent of the individual to such activity, for example, through well known “opt-in” or “opt-out” processes as may be appropriate for the situation and type of information. Storage and use of personal information may be in an appropriately secure manner reflective of the type of information, for example, through various encryption and anonymization techniques for particularly sensitive information. 
     Some implementations are described herein in conjunction with thresholds. The term “greater than” (or similar terms), as used herein to describe a relationship of a value to a threshold, may be used interchangeably with the term “greater than or equal to” (or similar terms). Similarly, the term “less than” (or similar terms), as used herein to describe a relationship of a value to a threshold, may be used interchangeably with the term “less than or equal to” (or similar terms). As used herein, “exceeding” a threshold (or similar terms) may be used interchangeably with “being greater than a threshold,” “being greater than or equal to a threshold,” “being less than a threshold,” “being less than or equal to a threshold,” or other similar terms, depending on the context in which the threshold is used. 
     No element, act, or instruction used in the present application should be construed as critical or essential unless explicitly described as such. An instance of the use of the term “and,” as used herein, does not necessarily preclude the interpretation that the phrase “and/or” was intended in that instance. Similarly, an instance of the use of the term “or,” as used herein, does not necessarily preclude the interpretation that the phrase “and/or” was intended in that instance. Also, as used herein, the article “a” is intended to include one or more items, and may be used interchangeably with the phrase “one or more.” Where only one item is intended, the terms “one,” “single,” “only,” or similar language is used. Further, the phrase “based on” is intended to mean “based, at least in part, on” unless explicitly stated otherwise.

Technology Classification (CPC): 7