PATENT DOCUMENT

Publication Number: US-9246843-B2
Application Number: US-201314018348-A
Country: US
Kind Code: B2

Title: Detecting and recovering from a transmission channel change during a streaming media session

Abstract:
A method for detecting and recovering from a transmission channel change during a streaming media session is disclosed. The method can include a wireless communication device detecting a stall condition resulting from a transmission channel change. The method can further include the wireless communication device capturing a snapshot of a current transmission parameter state of the streaming media session in response to detecting the stall condition. The method can also include the wireless communication device using the snapshot to restore the streaming media session to the transmission parameter state captured by the snapshot following completion of the transmission channel change.

Claims:
What is claimed is: 
     
       1. A method for recovering from a transmission channel change during a streaming media session over a wireless network, the method comprising a wireless communication device:
 detecting a stall condition in data transmission for the streaming media session; 
 capturing a snapshot of a transmission parameter state of the streaming media session in response to detecting the stall condition; 
 determining whether the stall condition resulted from a transmission channel change; 
 in an instance in which it is determined that the stall condition resulted from a transmission channel change, using the snapshot to restore the streaming media session to the transmission parameter state captured by the snapshot following completion of the transmission channel change; and 
 in an instance in which it is determined that the stall condition did not result from a transmission channel change, initiating a slow ramp up of a data transmission rate of the streaming media session to recover from the stall condition. 
 
     
     
       2. The method of  claim 1 , wherein determining whether the stall condition resulted from a transmission channel change comprises determining based at least in part on baseband layer feedback whether the stall condition resulted from a transmission channel change. 
     
     
       3. The method of  claim 2 , wherein determining based at least in part on baseband layer feedback whether the stall condition resulted from a transmission channel change comprises:
 waiting for up to a defined period of time for an indication from the baseband layer that a transmission channel change has occurred; 
 determining that the stall condition resulted from a transmission channel change in an instance in which an indication that a transmission channel change has occurred is provided by the baseband layer within the defined period of time; and 
 determining that the stall condition did not result from a transmission channel change in an instance in which an indication that a transmission channel change has occurred is not provided by the baseband layer within the defined period of time. 
 
     
     
       4. The method of  claim 1 , wherein detecting the stall condition and capturing the snapshot are performed at an application layer. 
     
     
       5. The method of  claim 1 , further comprising discarding the snapshot in an instance in which it is determined that the stall condition did not result from a transmission channel change. 
     
     
       6. The method of  claim 1 , further comprising, in an instance in which it is determined that the stall condition resulted from a transmission channel change, flushing one or more media packets in a baseband queue in which media packets for the streaming media session are queued prior to transmission by the wireless communication device. 
     
     
       7. The method of  claim 1 , further comprising the wireless communication device, in an instance in which it is determined that the stall condition resulted from a transmission channel change:
 determining whether the transmission parameter state captured by the snapshot is better than a current transmission parameter state existing following completion of the transmission channel change; and 
 using the snapshot to restore the streaming media session only in an instance in which it is determined that the transmission parameter state captured by the snapshot is better than the current transmission parameter state. 
 
     
     
       8. The method of  claim 1 , wherein capturing the snapshot of the transmission parameter state comprises capturing a transmission rate for the streaming media session. 
     
     
       9. The method of  claim 1 , wherein detecting the stall condition comprises detecting the stall condition based at least in part on a status of a baseband queue in which media data for the streaming media session is queued prior to transmission by the wireless communication device. 
     
     
       10. The method of  claim 9 , wherein detecting the stall condition comprises:
 calculating a transmission rate for the streaming media session based at least in part on the status of the baseband queue; and 
 detecting the stall condition based at least in part on the calculated transmission rate. 
 
     
     
       11. The method of  claim 9 , wherein detecting the stall condition based at least in part on the status of the baseband queue comprises an application layer detecting the stall condition based at least in part on queue status information for the baseband queue provided to the application layer by a baseband layer. 
     
     
       12. A wireless communication device comprising:
 at least one transceiver configured to transmit data and receive data for a streaming media session over a wireless network; and 
 processing circuitry coupled with the at least one transceiver, the processing circuitry configured to control the wireless communication device to at least:
 detect a stall condition in data transmission for the streaming media session, the detected stall condition resulting from a transmission channel change; 
 capture a snapshot of a transmission parameter state of the streaming media session in response to detecting the stall condition; and 
 use the snapshot to restore the streaming media session to the transmission parameter state captured by the snapshot following completion of the transmission channel change. 
 
 
     
     
       13. The wireless communication device of  claim 12 , wherein the processing circuitry is further configured to control the wireless communication device to:
 determine whether the stall condition resulted from a transmission channel change; 
 use the snapshot to restore the streaming media session to the transmission parameter state captured by the snapshot only in an instance in which it is determined that the stall condition resulted from a transmission channel change; and 
 in an instance in which it is determined that the stall condition did not result from a transmission channel change, initiate a slow ramp up of a data transmission rate of the streaming media session to recover from the stall condition. 
 
     
     
       14. The wireless communication device of  claim 13 , wherein the processing circuitry is further configured to control the wireless communication device to determine whether the stall condition resulted from a transmission channel change at least in part by controlling the wireless communication device to:
 wait for up to a defined period of time for an indication from a baseband layer that a transmission channel change has occurred; 
 determine that the stall condition resulted from a transmission channel change in an instance in which an indication that a transmission channel change has occurred is provided by the baseband layer within the defined period of time; and 
 determine that the stall condition did not result from a transmission channel change in an instance in which an indication that a transmission channel change has occurred is not provided by the baseband layer within the defined period of time. 
 
     
     
       15. The wireless communication device of  claim 12 , wherein the processing circuitry is further configured to control the wireless communication device to detect the stall condition and capture the snapshot at an application layer. 
     
     
       16. The wireless communication device of  claim 12 , wherein the processing circuitry is further configured to control the wireless communication device to:
 determine whether the transmission parameter state captured by the snapshot is better than a current transmission parameter state existing following completion of the transmission channel change; and 
 use the snapshot to restore the streaming media session only in an instance in which it is determined that the transmission parameter state captured by the snapshot is better than the current transmission parameter state. 
 
     
     
       17. The wireless communication device of  claim 12 , wherein the processing circuitry is further configured to control the wireless communication device to detect the stall condition at least in part by controlling the wireless communication device to detect the stall condition based at least in part on a status of a baseband queue in which media data for the streaming media session is queued prior to transmission by the wireless communication device. 
     
     
       18. A computer program product for recovering from a transmission channel change during a streaming media session over a wireless network, the computer program product comprising at least one non-transitory computer readable storage medium having computer program code stored thereon, the computer program code comprising program code configured to cause a wireless communication device to:
 detect a stall condition in data transmission for the streaming media session, the detected stall condition resulting from a transmission channel change; 
 capture a snapshot of a transmission parameter state of the streaming media session in response to detecting the stall condition; and 
 use the snapshot to restore the streaming media session to the transmission parameter state captured by the snapshot following completion of the transmission channel change. 
 
     
     
       19. The computer program product of  claim 18 , wherein the computer program code further comprises program code configured to cause the wireless communication device to:
 determine whether the stall condition resulted from a transmission channel change; 
 use the snapshot to restore the streaming media session to the transmission parameter state captured by the snapshot only in an instance in which it is determined that the stall condition resulted from a transmission channel change; and 
 in an instance in which it is determined that the stall condition did not result from a transmission channel change, initiate a slow ramp up of a data transmission rate of the streaming media session to recover from the stall condition. 
 
     
     
       20. The computer program product of  claim 19 , wherein the computer program code further comprises program code configured to cause the wireless communication device to determine whether the stall condition resulted from a transmission channel change at least in part by causing the wireless communication device to:
 wait for up to a defined period of time for an indication from a baseband layer that a transmission channel change has occurred; 
 determine that the stall condition resulted from a transmission channel change in an instance in which an indication that a transmission channel change has occurred is provided by the baseband layer within the defined period of time; and 
 determine that the stall condition did not result from a transmission channel change in an instance in which an indication that a transmission channel change has occurred is not provided by the baseband layer within the defined period of time.

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     This application claims priority to U.S. Provisional Patent Application No. 61/696,792, filed on Sep. 4, 2012, which is incorporated herein in its entirety by reference. 
    
    
     FIELD OF THE DESCRIBED EMBODIMENTS 
     The described embodiments relate generally to wireless communications and more particularly to detecting and recovering from a transmission channel change during a streaming media session. 
     BACKGROUND 
     Media streaming applications that stream media from a wireless communication device over a wireless network can suffer from stall conditions in which media packets become stalled in a baseband queue and cannot be transmitted from the wireless communication device. As a result of a stall condition, rate control mechanisms can quickly ramp down a rate at which media packets are generated and/or transmitted. After recovery from the stall condition, a slow ramp up period can occur in which media packet transmission rate can slowly recover to the pre-stall condition. The stall and slow ramp up period can accordingly negatively impact user experience. 
     In some instances, a stall condition can result from degradation of a network channel condition, such as a wireless channel by which the wireless communication device can be connected to a cellular base station or other wireless network access point. In such instances, it can be appropriate to enter a slow ramp up period following recovery from the stall condition. In this regard, slow ramp up can be used to avoid flooding a potentially bad network connection with a larger volume of packets than the network connection is capable of handling. 
     However, in some instances, a stall condition can be caused by an event other than degradation of a network channel condition. For example, in some instances, a stall condition can be caused by a device changing transmission channels. In this regard, some wireless communication devices have multiple transmission channels and can switch transmission channels during an active streaming media session in order to use a channel with better conditions. In instances in which a transmission channel change is performed, a network channel condition may not have degraded. As such, using standard rate control mechanisms that implement a slow ramp up period following a stall condition resulting from a transmission channel change can unnecessarily degrade user experience for an extended period following the stall condition. 
     BRIEF SUMMARY OF SOME DISCLOSED EMBODIMENTS 
     Some embodiments disclosed herein provide for detecting and recovering from a transmission channel change during a streaming media session. More particularly, a wireless communication device in accordance with some example embodiments can be configured to detect a stall condition resulting from a transmission channel change and can capture snapshot of a current transmission parameter state of a streaming media session in response to detecting the stall condition. After completion of a transmission channel change, the wireless communication device of some such example embodiments can use the captured snapshot to restore the streaming media session to the transmission parameter state captured by the snapshot. Accordingly, such example embodiments provide for detection and recovery from a transmission channel change such that a streaming media session can quickly recover from a transmission channel change without experiencing a slow ramp up following the transmission channel change. User experience can accordingly be improved, as a transmission rate of the streaming media session can more quickly return to the pre-stall transmission rate following the stall condition. 
     This Summary is provided merely for purposes of summarizing some example embodiments so as to provide a basic understanding of some aspects of the disclosure. Accordingly, it will be appreciated that the above described example embodiments are merely examples and should not be construed to narrow the scope or spirit of the disclosure in any way. Other embodiments, aspects, and advantages will become apparent from the following detailed description taken in conjunction with the accompanying drawings which illustrate, by way of example, the principles of the described embodiments. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       The described embodiments and the advantages thereof may best be understood by reference to the following description taken in conjunction with the accompanying drawings. These drawings in no way limit any changes in form and detail that may be made to the described embodiments by one skilled in the art without departing from the spirit and scope of the described embodiments. 
         FIG. 1  illustrates a wireless communication system including a wireless communication device in accordance with some example embodiments. 
         FIG. 2  illustrates a block diagram of an example apparatus that can be implemented on a wireless communication device in accordance with some example embodiments. 
         FIG. 3  illustrates a block diagram of another example apparatus that can be implemented on a wireless communication device in accordance with some example embodiments. 
         FIG. 4  illustrates an example transmission channel change in accordance with some example embodiments. 
         FIG. 5  illustrates another example transmission channel change in accordance with some example embodiments. 
         FIG. 6  illustrates a block diagram of system layers that can operate in a wireless communication device in support of a streaming media session in accordance with some example embodiments. 
         FIG. 7  illustrates a flowchart according to an example method for detecting and recovering from a transmission channel change during a streaming media session in accordance with some example embodiments. 
         FIG. 8  illustrates a flowchart according to another example method for detecting and recovering from a transmission channel change during a streaming media session in accordance with some example embodiments. 
         FIG. 9  illustrates a flowchart according to a further example method for detecting and recovering from a transmission channel change during a streaming media session in accordance with some example embodiments. 
     
    
    
     DETAILED DESCRIPTION OF SELECTED EMBODIMENTS 
     Prior wireless communication devices perform a slow ramp up period following a stall condition in a streaming media session regardless of the cause of the stall condition. Accordingly, prior devices often perform a slow ramp up period even in scenarios in which a stall condition is caused by an event other than degradation of a network channel condition, thus negatively impacting user experience. For example, some stall conditions can result from a wireless communication device switching transmission channels during a streaming media session. In this regard, change of transmission channels can occur under the control of a hardware, or baseband, layer in the wireless communication device and an application layer in prior devices generally does not have any advance knowledge of the change in transmission channels. Accordingly, rate control mechanisms performed at the application layer by prior devices during a transmission channel change implement a slow ramp up of the transmission rate from a post-stall state following the transmission channel change even if the network channel conditions remain the same as prior to the stall, thus negatively impacting user experience. 
     Some example embodiments disclosed herein improve user experience during streaming media sessions compared to prior devices by providing for detecting and recovering from a transmission channel change for a media streaming application in a wireless network. More particularly, a wireless communication device in accordance with some example embodiments can be configured to detect a stall condition resulting from a transmission channel change and can capture snapshot of a current transmission parameter state of a streaming media session in response to detecting the stall condition. After completion of a transmission channel change, the wireless communication device of some such example embodiments can use the captured snapshot to restore the streaming media session to the transmission parameter state captured by the snapshot. 
     In some example embodiments, detection of the stall condition can be performed at an application layer. An application layer in accordance with some such example embodiments can wait for up to a defined period of time following detection of the stall condition for an indication from the baseband layer that a transmission channel change has occurred. If a transmission channel change has occurred, the application layer of such example embodiments can use the captured snapshot to restore the transmission parameter state of the streaming media session to the state that existed when the stall condition occurred. However, if the stall condition did not result from a transmission channel change, the application layer of such example embodiments can discard the snapshot and can implement a slow ramp up period of a data transmission rate of the streaming media session to recover from the stall condition. 
     Accordingly, example embodiments disclosed herein provide for detection and recovery from a transmission channel change such that a streaming media session can quickly recover from a transmission channel change without experiencing a slow ramp up following the transmission channel change. User experience can accordingly be improved, as a transmission rate of the streaming media session can return to the pre-stall transmission rate more quickly following the stall condition. 
       FIG. 1  illustrates a wireless communication system  100  including a wireless communication device  102  in accordance with some example embodiments. The wireless communication device  102  can, for example, be a cellular phone, such as a smart phone device, a tablet computing device, a laptop computing device, or other computing device that can be configured to wirelessly access a network and operate within the wireless communication system  100 . 
     The wireless communication device  102  can be configured to wirelessly access a network, such as the network  108 , via one or more network access points  104 . A network access point  104  can, for example, be a cellular base station, such as, by way of non-limiting example, a base transceiver station (BTS), a node B, an evolved node B (eNB), femtocell, or other type of cellular base station. As a further example, a network access point  104  can be embodied as a wireless local area network (WLAN) access point, such as a wireless router, wireless bridge, and/or other type of access point that can be used to access a WLAN. In some embodiments, wireless communication system  100  can include a plurality of network access points  104 , which can be of a variety of types (e.g., a mixture of multiple types of cellular base stations, a mixture of one or more types of cellular base stations and one or more WLAN access points, or the like). It will be appreciated, however, that the foregoing example embodiments of the network access point  104  are non-limiting, and that the embodiment of the wireless network access point  104  can vary depending on a type of radio access technology (RAT) used for communication between the wireless communication device  102  and network access point  104 . 
     The wireless communication device  102  can be configured to use any present or future developed RAT to wirelessly access a network, such as network  108 , via a wireless network access point, such as wireless network access point  104 . For example, in some embodiments, such as in some embodiments in which wireless network access point  104  is embodied as a cellular base station, the wireless communication device  102  can be configured to use a cellular RAT to access a network. For example, in some embodiments, the wireless communication device  102  can be configured to use a fourth generation (4G) cellular RAT, such as a Long Term Evolution (LTE) RAT, including LTE, LTE-Advanced (LTE-A), and/or the like to access a network. As another example, in some embodiments, the wireless communication device  102  can be configured to use a third generation (3G) RAT, such as a Universal Mobile Telecommunications System (UMTS) RAT, such as Wideband Code Division Multiple Access (WCDMA) or Time Division Synchronous Code Division Multiple Access (TD-SCDMA); a CDMA2000 RAT (e.g., 1xRTT) or other RAT standardized by the Third Generation Partnership Project 2 (3GPP2); and/or other 3G RAT to access a network. As a further example, in some embodiments, the wireless communication device  102  can be configured to use a second generation (2G) RAT, such as a Global System for Mobile Communications (GSM) RAT, and/or other 2G RAT to access a network. It will be appreciated, however, that the foregoing examples of cellular RATs are provided by way of example, and not by way of limitation. In this regard, other present or future developed cellular RATs, including various fifth generation (5G) RATs now in development, can be used by the wireless communication device  102  to access a network within the scope of the disclosure. 
     In some example embodiments, the wireless communication device  102  can additionally or alternatively be configured to access a network via a non-cellular RAT. For example, in some embodiments, such as some embodiments in which wireless network access point  104  is embodied as a WLAN access point, a WLAN RAT, such as an Institute of Electrical and Electronics Engineers (IEEE) standardized Wi-Fi RAT (e.g., IEEE 802.11 a/b/g/n/ac/ad/etc.), can be used by the wireless communication device  102  to access a network. 
     The wireless communication device  102  can be configured to communicate with one or more remote devices via a wireless network connection. For example, in some embodiments, the wireless communication device  102  can be configured to communicate with the receiving apparatus  106  via the network  108 . The network  108  can be any network that can be accessed via network access point  104  and that can support communication between two or more devices, such as the wireless communication device  102  and the receiving apparatus  106 . By way of non-limiting example, network  108  can include can include one or more wireless networks (e.g., one or more cellular networks, one or more WLANs, and/or the like), one or more wireline networks, or some combination thereof, and, in some example embodiments, can include the Internet 
     The receiving apparatus  106  can be any computing device that can receive media data that can be streamed by the wireless communication device  102 . In some example embodiments, the receiving apparatus  106  can be a second wireless communication device  102 . 
     In some example embodiments, the wireless communication device  102  can be configured to engage in a streaming media session and stream media data, such as audio data, video data, a combination of audio and video data, and/or other data that can be streamed over a network, such as the network  108 , to one or more remote devices, such as the receiving apparatus  106 . For example, the wireless communication device  102  of some example embodiments can have a media streaming application implemented thereon, which can be configured to transmit media data, such as media packets, for a streaming media session to the receiving apparatus  106  over the network  108  via a wireless communication link to network access point  104 . The media streaming application can be any application that can stream media data, such as audio, video, or some combination thereof to one or more receiving devices. By way of non-limiting example, the media streaming application can be a video call and/or video conferencing application, such as Apple® Inc.&#39;s FaceTime®. Media data that can be streamed by the wireless communication device  102  during a streaming media session can, for example, include real time media and/or non-real time media. 
     In some example embodiments, a streaming media session can include streaming of data in a single direction, such as from wireless communication device  102  to the receiving apparatus  106  during a streaming media session. However, in some example embodiments, a streaming media session can include multi-directional data streaming in which media data can be streamed from the wireless communication device  102  to one or more receiving apparatuses  106  and from one or more receiving apparatuses  106  to the wireless communication device  102 . For example, multi-directional data streaming can be used in some example embodiments to support real time video calls, conference calls, and/or the like. 
       FIG. 2  illustrates a block diagram of an example apparatus  200  that can be implemented on a wireless communication device, such as wireless communication device  102 , in accordance with some example embodiments. The apparatus  200  can include a processor  202  coupled with memory  206  and also coupled with a wireless transceiver(s)  204 . Processor  202  can be configured to read, write and execute processor instructions stored in memory  206 . Processor  202  can also be configured to control wireless transceiver(s)  204 . The wireless transceiver  204  can be configured to use one or more antennas  208  to support wireless communication with one or more wireless devices and/or networks. For example, in some embodiments, wireless transceiver  204  can connect to wireless networks, such as via a wireless network access point  104  and/or other wireless network access point. Accordingly, in some such example embodiments, the wireless transceiver  204  can be configured to enable transmission of media packets and/or other media data that can be streamed in a streaming media session to a receiving apparatus  106  over a wireless channel (e.g., a wireless channel between the wireless communication device  102  and network access point  104 ). 
       FIG. 3  illustrates a block diagram of another example apparatus that can be implemented on a wireless communication device, such as wireless communication device  102 , in accordance with some embodiments. In this regard,  FIG. 3  illustrates an apparatus  300  that can, when implemented on a computing device, such as wireless communication device  102 , enable the computing device to operate within the system  100  in accordance with one or more example embodiments. It will be appreciated that the components, devices or elements illustrated in and described with respect to  FIG. 3  below may not be mandatory and thus some may be omitted in certain embodiments. Additionally, some embodiments can include further or different components, devices or elements beyond those illustrated in and described with respect to  FIG. 3 . 
     In some example embodiments, the apparatus  300  can include processing circuitry  310  that is configurable to perform actions in accordance with one or more example embodiments disclosed herein. In this regard, the processing circuitry  310  can be configured to perform and/or control performance of one or more functionalities of a wireless communication device in accordance with various example embodiments, and thus can provide means for performing functionalities of wireless communication device  102  in accordance with various example embodiments. The processing circuitry  310  can be configured to perform data processing, application execution and/or other processing and management services according to one or more example embodiments. 
     In some embodiments, the apparatus  300  or a portion(s) or component(s) thereof, such as the processing circuitry  310 , can include one or more chipsets, which can each include one or more chips. The processing circuitry  310  and/or one or more further components of the apparatus  300  can therefore, in some instances, be configured to implement an embodiment on a single chip or chipset. In some example embodiments in which one or more components of the apparatus  300  are embodied as a chipset, the chipset can be capable of enabling a computing device to operate in the system  100  when implemented on or otherwise operably coupled to the computing device. For example, in some embodiments, one or more components of the apparatus  300  can provide baseband circuitry that can be configured to enable a computing device, such as wireless communication device  102 , to access and communicate over a wireless network using one or more RATs 
     In some example embodiments, the processing circuitry  310  can include a processor  312  and, in some embodiments, such as that illustrated in  FIG. 3 , can further include memory  314 . The processor  312  can, for example, be an embodiment of the processor  202 . The memory  314  can, for example, be an embodiment of the memory  206 . As such, in some example embodiments, the processing circuitry  310  can be at least partially embodied by the processor  202  and/or memory  206 . The processing circuitry  310  can be in communication with, control, and/or otherwise be coupled with a transceiver(s)  316 , baseband management module  318 , and/or rate control module  320 . 
     The processor  312  can be embodied in a variety of forms. For example, the processor  312  can be embodied as various hardware-based processing means such as a microprocessor, a coprocessor, a controller or various other computing or processing devices including integrated circuits such as, for example, an ASIC (application specific integrated circuit), an FPGA (field programmable gate array), some combination thereof, or the like. Although illustrated as a single processor, it will be appreciated that the processor  312  can comprise a plurality of processors. The plurality of processors can be in operative communication with each other and can be collectively configured to perform one or more functionalities of a communication device as described herein. In some example embodiments, the processor  312  can be configured to execute instructions that can be stored in the memory  314  or that can be otherwise accessible to the processor  312 . As such, whether configured by hardware or by a combination of hardware and software, the processor  312  capable of performing operations according to various embodiments while configured accordingly. 
     In some example embodiments, the memory  314  can include one or more memory devices. Memory  314  can include fixed and/or removable memory devices. In some embodiments, the memory  314  can provide a non-transitory computer-readable storage medium that can store computer program instructions that can be executed by the processor  312 . In this regard, the memory  314  can be configured to store information, data, applications, instructions and/or the like for enabling the apparatus  300  to carry out various functions in accordance with one or more example embodiments. In some embodiments, the memory  314  can be in communication with one or more of the processor  312 , transceiver(s)  316 , baseband management module  318 , or rate control module  320  via a bus (or buses) for passing information among components of the apparatus  300 . 
     The apparatus  300  can further include one or more transceivers  316 . The transceiver(s)  316  can, for example, be an embodiment of the transceiver  204 . The transceiver  316  can be configured to enable the apparatus  300  to send (e.g., transmit) wireless signals to and receive wireless signals from a wireless network via a connection to a wireless network access point, such as the wireless network access point  104 . As such, the transceiver(s)  316  can be configured to support any type of RAT that may be used to support communication over a wireless channel between a wireless communication device and a network. Thus, for example, the transceiver(s)  316  can be configured to support communication via any type of RAT that can be used for communication between the wireless communication device  102  and a wireless network access point  104 . 
     The apparatus  300  can further include a baseband management module  318 . The baseband management module  318  can be embodied as various means, such as circuitry, hardware, a computer program product comprising a computer readable medium (for example, the memory  314 ) storing computer readable program instructions that are executable by a processing device (for example, the processor  312 ), or some combination thereof. The baseband management module  318  can be configured to manage operations that can be performed at a baseband layer of a wireless communication device, such as wireless communication device  102 . For example, the baseband management module  318  of some example embodiments can be configured to manage a baseband queue, such as the baseband queue  608  illustrated in and described further herein below with respect to  FIG. 6 , in which media data for transmission in a streaming media session can be queued prior to transmission. In some such embodiments, the baseband module  318  can be configured to provide queue status information for the baseband queue to an application layer, such as the application layer  602  illustrated in and described further herein below with respect to  FIG. 6 , that can be responsible for generating media data for transmission in a streaming media session and for implementing rate control mechanisms for controlling a transmission rate of a streaming media session. In some example embodiments, the baseband management module  318  can be configured to control selection and switching between multiple transmission channels that can be available for use by a wireless communication device. 
     The apparatus  300  can further include rate control module  320 . The rate control module  320  can be embodied as various means, such as circuitry, hardware, a computer program product comprising a computer readable medium (for example, the memory  314 ) storing computer readable program instructions that are executable by a processing device (for example, the processor  312 ), or some combination thereof. The rate control module  320  can be configured to control application layer functionality, such as transmission rate control mechanisms, for managing a streaming media session. 
     The rate control module  320  of some example embodiments can be configured to detect occurrence of a stall condition resulting from a transmission channel change in a streaming media session and can capture a snapshot of the transmission parameter state of the streaming media session in response to detecting the stall condition. The rate control module  320  of some such example embodiments can be configured to use the snapshot to restore the streaming media session to the transmission parameter state captured by the snapshot following completion of the transmission channel change. In some example embodiments, the baseband management module  318  and the rate control module  320  can be configured to communicate with each other to support detection of a stall condition and implementation of transmission rate control mechanisms in accordance with various example embodiments described further herein below. 
     The wireless communication device  102  can include a plurality of transmission channels. The multiple transmission channels can, for example, include multiple antennas or other transmission channels that can be dispersed at various positions in the wireless communication device  102 . As another example, two or more transmission channels that can be implemented on the wireless communication device  102  in accordance with some example embodiments can each correspond to a respective RAT. For example, a first transmission channel can be used for WLAN access and a second transmission channel can be used for cellular network access. 
     The wireless communication device  102  of some example embodiments can switch between transmission channels while media is being streamed by the wireless communication device  102 . For example, in some embodiments, the wireless communication device  102  can be configured to switch between transmission channels during a streaming media session based on observed channel conditions, device usage context, and/or other information that can be used to select an appropriate transmission channel. In this regard, the wireless communication device  102  can switch to use a transmission channel that can offer better conditions (e.g., latency, loss rate, interference, throughput, and/or other conditions) than a current transmission channel. A transmission channel change can generally occur when conditions on a current transmission channel regress to be worse than conditions on a candidate transmission channel. For example, a transmission channel change can be made responsive to a change in network channel conditions, effects on channel conditions that can be caused by a user&#39;s hand position on the device, and/or other factors. A change in transmission channel can be controlled in some example embodiments by a hardware layer (e.g., a baseband layer) that can be implemented on the wireless communication device  102 . For example, in some embodiments, the baseband management module  318  can be configured to selectively switch transmission channels during a streaming media session. 
       FIG. 4  illustrates an example transmission channel change in accordance with some example embodiments.  FIG. 4  illustrates an example wireless communication device  400  having multiple antennas, including the antenna  402  and antenna  404 . The wireless communication device  400  can, for example, be an embodiment of the wireless communication device  102 . As illustrated in  FIG. 4 , the antennas  402  and  404  can be disposed in opposing corners of the wireless communication device  400 . The wireless communication device  400  can initially use the antenna  402  to support a streaming media session. However, during the streaming media session, contextual conditions of the wireless communication device  400  can change such that the antenna  404  can provide a better transmission channel than the antenna  402 . For example, a user can change an orientation of the wireless communication device  400  such that the antenna  404  is better positioned to communicate with a wireless network access point without interference compared to the antenna  402 . As another example, a user can change a hand position with which he or she may be holding or otherwise manipulating the wireless communication device  400  such that the antenna  402  can be obstructed by the user&#39;s new hand position and/or the antenna  404  can be exposed from prior obstruction by the user&#39;s prior hand position. 
       FIG. 5  illustrates another example transmission channel change in accordance with some example embodiments. More particularly,  FIG. 5  illustrates a transmission channel change that can be performed within an example wireless communication system  500  including a network access point  502  using a first RAT and a network access point  504  using a second RAT. In this regard,  FIG. 5  illustrates an example embodiment of the system  100  in which the wireless communication device  102  can be configured to access a network, such as the network  108 , via multiple RATs and the system includes a plurality of network access points  104  (e.g., the network access point  502  and the network access point  504 ), which collectively provide network access via multiple types of RATs. For example, in some embodiments, one of the network access point  502  and the network access point  504  can be configured to provide network access via a WLAN RAT and the other of the network access point  502  and the network access point  504  can be configured to provide network access via a cellular RAT. 
     The wireless communication device  102  can, for example, stream media data for a streaming media session to the receiving apparatus  106  via a transmission channel to the network access point  502  using a first RAT. While engaged in the streaming media session, conditions can change such that a second transmission channel via a connection to the network access point  504  using a second RAT can provide better conditions than and/or can otherwise be preferred to the transmission channel to the network access point  502  using the first RAT. The wireless communication device  102  can accordingly be configured to switch transmission channels during the streaming media session to a connection to the network access point  504  via the second RAT in response to the changed conditions. As such, the wireless communication device  102  of some example embodiments can accordingly change transmission channels during a streaming media session by switching from a network access point using a first RAT, such as the network access point  502 , to a network access point using a second RAT, such as the network access point  504 . 
     It will be appreciated that the example transmission channel changes illustrated in and described with respect to  FIG. 4  and  FIG. 5  are provided by way of example, and not by way of limitation. In this regard, other types of transmission channel changes in addition to or in lieu of a change in antenna and a change in type of RAT used to support a streaming media session contemplated within the scope of the disclosure. It will be further appreciated that techniques for recovering from a transmission channel change that are described herein with respect to a change in antennas and/or a change in a type of RAT used can be applied mutatis mutandis to other types of transmission channel changes within the scope of the disclosure. 
       FIG. 6  illustrates a block diagram of system layers that can operate in a wireless communication device in support of a streaming media session in accordance with some example embodiments. These layers can include an application layer  602  and a baseband layer  606 . The layers can additionally include one or more intermediate system layers, such as network layer  604 , which can be disposed between the application layer  602  and the baseband layer  606  within the system layer hierarchy. Application layer  602  can correspond to a media streaming application. For example, in embodiments in which the wireless communication device has a media streaming application, such as FaceTime® or other video conferencing application supporting a video call between two or more devices (e.g., wireless communication device  102  and one or more receiving apparatuses  106 ), implemented thereon, the application layer  602  can correspond to the video conferencing application. 
     The application layer  602  and baseband layer  606  can be configured to communicate with each other. In this regard, for example, the application layer  602  and baseband layer  606  can communicate by passing data to each other via one or more intermediate layers, such as network layer  604 . Additionally or alternatively, in some example embodiments, application layer  602  can send data to the baseband layer  606  and/or baseband layer  606  can send data to the application layer  602  via a communication path that can bypass network layer  604  and/or one or more further intermediate system layers that can be disposed between the application layer  602  and the baseband layer  606 . 
     In some embodiments, application layer  602  can generate media packets and/or other media data units for streaming in a streaming media session. The generated media data can, for example, include audio packets, video packets, and/or packets containing both audio and video data. The application layer  602  can pass the media data to the baseband layer  606 , which can control transmission of the media packets over the wireless channel. Media packets received by the baseband layer  606  from the application layer  602  can be at least temporarily stored in the baseband queue  608  prior to transmission from the wireless communication device  102 . The baseband layer  606  can provide feedback to the application layer  602 , which can include status information for the baseband queue  608 . The queue status information can, for example, include an indication of how many bytes are in the queue, how many media packets are in the queue, how many bytes have been sent, how many packets have been sent, what packets are in the queue, what packets have been sent, and/or other information. 
     The application layer  602  can be configured to calculate a transmission rate for the streaming media session based on queue status information that can be provided by the baseband layer  606 . Further, the application layer  602  can determine an occurrence of a stall condition based on a calculated transmission rate and/or otherwise on the basis of queue status information that can be received from the baseband layer  606 . A stall condition can, for example, be a stall in transmission of media packets from the baseband queue  608  for some period of time. As another example, a stall condition can be an imbalance condition in which the application layer  602  can be generating media packets at a faster rate than they are being transmitted by the baseband layer  606 . 
     In response to detecting a stall condition, the application layer  602  can be configured to capture a snapshot of a current transmission parameter state of the streaming media session. The snapshot can, for example, include current transmission channel parameters, such as transmission rate, type of media packets used, and/or other parameters that can be reflective of a transmission state and/or otherwise used for rate control purposes. 
     The application layer  602  can be further configured, if not already known, whether the stall condition resulted from a transmission channel change. In some example embodiments, the application layer  602  can be configured to determine whether the stall condition resulted from a transmission channel change based at least in part on baseband layer feedback that can be provided by the baseband layer  606 . For example, in some embodiments, the application layer  602  can wait for a defined period of time following detection of the stall condition for an indication from the baseband layer  606  that a transmission channel change has occurred. In waiting for the defined period of time, the application layer  602  can, for example, set a timer having a period corresponding to the defined period of time and wait for up to expiry of the timer. 
     The defined period of time can be any period of time sufficient to allow the baseband layer  606  sufficient time to react to a stall condition, make a transmission channel change, and inform the application layer  602  of the transmission channel change. For example, in some embodiments, it can take the baseband layer  606  on the order of 900 milliseconds to make a transmission channel change. In such embodiments, the application layer  602  can wait for a period of time sufficient to accommodate detection of a stall condition by the baseband layer  606 , the 900 milliseconds to make a transmission channel change, and sufficient time for the baseband layer  606  to inform the application layer  602  of the transmission channel change. By way of example, and not by way of limitation, in some example embodiments, the application layer  602  can wait for approximately 3 seconds following detection of a stall condition to receive an indication from the baseband layer  606  that a transmission channel change has occurred. 
     In an instance in which the application layer  602  receives an indication from the baseband layer  606  that a transmission channel change within the defined period of time, the application layer  602  can trigger a fast recovery. In this regard, the application layer  602  can use the captured snapshot to restore the transmission parameter state to the state captured in the snapshot at the time of the stall. Accordingly, transmission rate can return to substantially the same rate as was occurring at the time of the stall rather than entering a slow ramp up period following a post-stall channel state in which the transmission rate can be substantially reduced from the rate at the time of the stall. The media application can accordingly quickly recover from the stall without ongoing impact on user experience that might otherwise result from a slow ramp up following the stall. 
     If, however, the application layer  602  does not receive an indication from the baseband layer  606  that a transmission channel change has occurred within the defined period of time, the application layer  602  can assume that the stall condition resulted from a cause other than a transmission channel change, such as from poor network channel conditions. In such instances, the application layer  602  can discard the captured snapshot rather than restoring the transmission parameter state to the state captured by the snapshot at the time of the stall. As such, the transmission channel can enter a slow ramp up recovery and adapt to network channel conditions following the stall. 
     In some example embodiments, one or more media packets in the baseband queue  608  can be flushed in response to a stall condition and/or in response to a transmission channel change. Flushing of the baseband queue  608  can be performed by the baseband layer  606  based on logic that can be implemented in the baseband layer  606  and/or in response to a command from the application layer  602 . For example, in some embodiments, all packets having a time stamp that is older than a defined threshold time can be flushed from the baseband queue  608 . As another example, in some embodiments, the oldest packets can be flushed from the baseband queue  608  until no more than a threshold maximum number of packets remains in the baseband queue  608 . 
     By flushing older packets from the baseband queue  608 , the wireless communication device  102  can avoid sending old, outdated packets that may have been in the baseband queue  608  when the stall condition occurred when the transmission channel recovers (e.g., subsequent to completion of a transmission channel change) and packets can again be transmitted. In this regard, sending the old packets after the transmission channel change can result in a poor user experience and needless processing of outdated packets at the recipient apparatus  606 . Further, the recipient apparatus  606  can use the time stamp in received packets to calculate a round trip time (RTT) for the streaming media session. If the recipient apparatus  606  uses a time stamp in an outdated packet to calculate RTT, the calculated RTT can be longer than the actual RTT on the channel, which can trigger implementation of rate reduction mechanisms that would degrade user experience even though actual channel conditions might not necessitate such a rate reduction. 
     In some example embodiments, at least some functionality of the application layer  602  as described above can, for example, be performed under control of the rate control module  320 . Further, in some example embodiments, at least some functionality of the baseband layer  606  as described above can, for example, be performed under control of the baseband management module  318 . 
       FIG. 7  illustrates a flowchart according to an example method for detecting and recovering from a transmission channel change during a streaming media session in accordance with some example embodiments. In this regard,  FIG. 7  illustrates operations that can be performed by a wireless communication device, such as wireless communication device  102 , participating in a streaming media session in accordance with some example embodiments. One or more of processor  202 , transceiver  204 , memory  206 , processing circuitry  310 , processor  312 , memory  314 , transceiver(s)  316 , baseband management module  318 , or rate control module  320  can, for example, provide means for performing one or more of the operations illustrated in and described with respect to  FIG. 7 . 
     Operation  700  can include the wireless communication device  102  detecting a stall condition in data transmission for the streaming media session. The detected stall condition can have resulted from a transmission channel change. In some example embodiments, operation  700  can be performed at an application layer, such as application layer  602 . For example, in some embodiments, the stall condition can be detected at the application layer based on queue status information that can be provided to the application layer by a baseband layer, such as baseband layer  606 , for a baseband queue, such as baseband queue  608 , in which media data for the streaming media session can be queued prior to transmission. The stall condition can, for example, be detected based on a transmission rate that can be calculated based on the queue status information. The detected stall condition can, for example, be a total stall in transmission of media packets from the baseband queue (e.g., for some period of time). As another example, the detected stall condition can be an imbalance condition in which the application layer can be generating media packets at a faster rate than they are being transmitted by the baseband layer. 
     Operation  710  can include the wireless communication device  102  capturing a snapshot of a transmission parameter state of the streaming media session in response to detecting the stall condition. The transmission parameter state can, for example, include a transmission rate for the streaming media session, a type of media packets being used for the streaming media session, and/or other parameters that can be reflective of a transmission state and/or otherwise used for rate control purposes for the streaming media session. In some example embodiments, operation  710  can be performed at an application layer, such as application layer  602 . 
     Operation  720  can include the wireless communication device  102  using the snapshot to restore the streaming media session to the transmission parameter state captured by the snapshot following completion of the transmission channel change. In some example embodiments, operation  720  can be performed at an application layer, such as application layer  602 . 
       FIG. 8  illustrates a flowchart according to another example method for detecting and recovering from a transmission channel change during a streaming media session in accordance with some example embodiments. In this regard,  FIG. 8  illustrates operations that can be performed by a wireless communication device, such as wireless communication device  102 , participating in a streaming media session in accordance with some example embodiments. One or more of processor  202 , transceiver  204 , memory  206 , processing circuitry  310 , processor  312 , memory  314 , transceiver(s)  316 , baseband management module  318 , or rate control module  320  can, for example, provide means for performing one or more of the operations illustrated in and described with respect to  FIG. 8 . 
     Operation  800  can include the wireless communication device  102  detecting a stall condition in data transmission for the streaming media session. In this regard, operation  800  can, for example, correspond to an embodiment of operation  700 . In some example embodiments, operation  800  can be performed at an application layer, such as application layer  602 . For example, in some embodiments, the stall condition can be detected at the application layer based on queue status information that can be provided to the application layer by a baseband layer, such as baseband layer  606 , for a baseband queue, such as baseband queue  608 , in which media data for the streaming media session can be queued prior to transmission. The stall condition can, for example, be detected based on a transmission rate that can be calculated based on the queue status information. The detected stall condition can, for example, be a total stall in transmission of media packets from the baseband queue (e.g., for some period of time). As another example, the detected stall condition can be an imbalance condition in which the application layer can be generating media packets at a faster rate than they are being transmitted by the baseband layer. 
     Operation  810  can include the wireless communication device  102  capturing a snapshot of a transmission parameter state of the streaming media session in response to detecting the stall condition. The transmission parameter state can, for example, include a transmission rate for the streaming media session, a type of media packets being used for the streaming media session, and/or other parameters that can be reflective of a transmission state and/or otherwise used for rate control purposes for the streaming media session. In some example embodiments, operation  810  can be performed at an application layer, such as application layer  602 . Operation  810  can, for example, correspond to an embodiment of operation  710 . 
     Operation  820  can include the wireless communication device  102  determining whether the stall condition resulted from a transmission channel change. In some example embodiments, operation  820  can be performed based at least in part on baseband layer feedback that can be provided by a baseband layer, such as baseband layer  606 . For example, in some embodiments, the baseband layer can be configured to provide an indication to the application layer that a transmission channel change has occurred. In some example embodiments, such as the embodiment illustrated in and described below with respect to  FIG. 9 , the wireless communication device  102  (e.g., the application layer of the wireless communication device  102 ) can be configured to wait for a defined period of time following detection of the stall condition for an indication from the baseband layer that a transmission channel change has occurred. If an indication that a transmission channel change has occurred is provided by the baseband layer within the defined period of time, the wireless communication device  102  (e.g., the application layer of the wireless communication device  102 ) can determine that the stall condition resulted from a transmission channel change. If, however, an indication that a transmission channel change has occurred is not provided by the baseband layer within the defined period of time, the wireless communication device  102  (e.g., the application layer of the wireless communication device  102 ) can determine that the stall condition did not result from a transmission channel change. 
     In an instance in which it is determined at operation  820  that the stall condition did not result from a transmission channel change, the method can proceed to operation  830 , which can include the wireless communication device  102  initiating a slow ramp up of a data transmission rate of the streaming media session to recover from the stall condition. 
     If, however, it is determined at operation  820  that the stall condition did result from a transmission channel change, the method can instead proceed to operation  840 . Operation  840  can include the wireless communication device  102  using the snapshot to restore the streaming media session to the transmission parameter state captured by the snapshot following completion of the transmission channel change. In some example embodiments, operation  840  can be performed at an application layer, such as application layer  602 . Operation  840  can, for example, be an embodiment of operation  720 . 
       FIG. 9  illustrates a flowchart according to a further example method for detecting and recovering from a transmission channel change during a streaming media session in accordance with some example embodiments. In this regard,  FIG. 9  illustrates operations that can be performed by a wireless communication device, such as wireless communication device  102 , participating in a streaming media session in accordance with some example embodiments. One or more of processor  202 , transceiver  204 , memory  206 , processing circuitry  310 , processor  312 , memory  314 , transceiver(s)  316 , baseband management module  318 , or rate control module  320  can, for example, provide means for performing one or more of the operations illustrated in and described with respect to  FIG. 9 . 
     Operation  900  can include the application layer  602  detecting a stall condition. The stall condition can be a stall in transmission of packets from the baseband queue  608 . The detected stall condition can, for example, be a total stall in transmission of media packets from the baseband queue  608  (e.g., for some period of time). As another example, the detected stall condition can be an imbalance condition in which the application layer  602  can be generating media packets at a faster rate than they are being transmitted from the baseband queue  608  by the baseband layer  606 . Detection of the stall condition can, for example, be based on feedback including queue status information for the baseband queue  608  that can be provided by the baseband layer  606  and received at the application layer  602 . Operation  900  can, for example, correspond to an embodiment of operation  700  and/or operation  800 . 
     Operation  910  can include the application layer  602  capturing a snapshot of parameters of the current transmission parameter state for the streaming media session. The transmission parameter state can, for example, include a transmission rate for the streaming media session, a type of media packets being used for the streaming media session, and/or other parameters that can be reflective of a transmission state and/or otherwise used for rate control purposes for the streaming media session. Operation  910  can, for example, correspond to an embodiment of operation  710  and/or operation  810 . 
     At operation  920 , the application layer  602  can begin to wait for a defined period of time. Operation  930  can include determining whether the transmission channel has been changed. For example, operation  930  can include determining whether an indication that a transmission channel change has occurred has been received at the application layer  602  from the baseband layer  606 . In an instance in which it is determined at operation  930  that a transmission channel change has not yet occurred (e.g., that an indication that a transmission channel has occurred has not yet been provided by the baseband layer  606 ), the method can proceed to operation  940 . Operation  940  can include determining whether the defined period of time has expired. If it is determined at operation  940  that the defined period of time has not expired, the method can return to operation  930 . If, however, the defined period of time has expired, it may be determined that the stall condition is due to a cause other than a transmission channel switch, and the method can proceed to operation  950 . Operation  950  can include clearing (e.g., discarding) the snapshot. The transmission channel can then be allowed to recover from the post-stall state in accordance with slow ramp up to adapt to channel conditions. Operations  920 - 940  can accordingly correspond to an embodiment of operation  820 . 
     In an instance in which it is determined at operation  930  that a transmission channel has occurred, the method can proceed to operation  960 . Operation  960  can include determining whether the snapshot state (e.g., the state captured in operation  910 ) is better than a current transmission parameter state (e.g., a transmission parameter state as it exists following the stall condition and completion of the transmission channel change). 
     If it is determined at operation  960  that the snapshot state is not better than the current state, the method can proceed to operation  950 , and the snapshot can be cleared or otherwise discarded. The current transmission parameter state can accordingly continue to be used without restoring the snapshot state in instances in which the snapshot state is not better than the current state. 
     If, however, it is determined at operation  960  that the snapshot state is better than the current state, the method can proceed to operation  970 , which can include restoring the snapshot state. Operation  970  can correspond to an embodiment of operation  720  and/or operation  840 . 
     In some example embodiments, operation  960  can be omitted. In such embodiments, if it is determined at operation  930  that a transmission channel change has occurred, the method can proceed directly to operation  970 . 
     The various aspects, embodiments, implementations or features of the described embodiments can be used separately or in any combination. Various aspects of the described embodiments can be implemented by software, hardware or a combination of hardware and software. The described embodiments can also be embodied as computer readable code on a computer readable medium for controlling manufacturing operations or as computer readable code on a computer readable medium for controlling a manufacturing line. The computer readable medium is any data storage device that can store data which can thereafter be read by a computer system. Examples of the computer readable medium include read-only memory, random-access memory, CD-ROMs, HDDs, DVDs, magnetic tape, and optical data storage devices. The computer readable medium can also be distributed over network-coupled computer systems so that the computer readable code is stored and executed in a distributed fashion. 
     In the foregoing detailed description, reference was made to the accompanying drawings, which form a part of the description and in which are shown, by way of illustration, specific embodiments in accordance with the described embodiments. Although these embodiments are described in sufficient detail to enable one skilled in the art to practice the described embodiments, it is understood that these examples are not limiting; such that other embodiments may be used, and changes may be made without departing from the spirit and scope of the described embodiments. For example, it will be appreciated that the ordering of operations illustrated in the flowcharts is non-limiting, such that the ordering of two or more operations illustrated in and described with respect to a flowchart can be changed in accordance with some example embodiments. As another example, it will be appreciated that in some embodiments, one or more operations illustrated in and described with respect to a flowchart can be optional, and can be omitted. 
     Further, the foregoing description, for purposes of explanation, used specific nomenclature to provide a thorough understanding of the described embodiments. However, it will be apparent to one skilled in the art that the specific details are not required in order to practice the described embodiments. Thus, the foregoing descriptions of specific embodiments are presented for purposes of illustration and description. The description of and examples disclosed with respect to the embodiments presented in the foregoing description are provided solely to add context and aid in the understanding of the described embodiments. The description is not intended to be exhaustive or to limit the described embodiments to the precise forms disclosed. It will be apparent to one of ordinary skill in the art that many modifications, alternative applications, and variations are possible in view of the above teachings. In this regard, one of ordinary skill in the art will readily appreciate that the described embodiments may be practiced without some or all of these specific details. Further, in some instances, well known process steps have not been described in detail in order to avoid unnecessarily obscuring the described embodiments.

Metadata:
Filing Date: 20130904
Publication Date: 20160126
Grant Date: 20160126
Priority Date: 20120904
Inventors: YANG YAN
SHIVA SUNDARARAMAN V.
GARCIA ROBERTO
ABUAN JOE S.
JEONG HYEONKUK
NORMILE JAMES O.
Assignee: APPLE INC
CPC Classifications: [{"code": "H04L69/00", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L47/762", "inventive": true, "first": true, "tree": "[]"}, {"code": "H04L47/2475", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L47/32", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L47/34", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L47/564", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04W36/00", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L47/2475", "inventive": true, "first": true, "tree": "[]"}, {"code": "H04L47/34", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L67/145", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L47/32", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L47/564", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L67/145", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L47/32", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L47/762", "inventive": true, "first": true, "tree": "[]"}, {"code": "H04L47/2475", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L47/34", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L47/564", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L69/00", "inventive": true, "first": false, "tree": "[]"}]
Family ID: 50189056