A system and method for audio content streaming with feature detection, comprising determining a streaming format compatibility criteria of a remote web browser, determining an audio selection from a list of one or more audio selections, receiving at the content server a streaming request, streaming the audio selection, the streaming including dividing the source audio content into a plurality of segment files, encrypting the plurality of segment files, sending a manifest file from the content server to the remote web browser, receiving requests at the content server for each of the plurality of segment files and a decryption key, sending from the content server each one of the requested plurality of segment files and the decryption key, and selecting the next audio selection in the list until the last audio selection is selected and streamed to the user device.
|
7. A method for audio content streaming with feature detection to a mobile device, comprising:
receiving a source audio content from a source content provider;
storing the source audio content on a content server disposed on a network;
determining a streaming format compatibility criteria of a remote web browser to determine if the remote web browser is HTTP live streaming compatible, and, if so:
a) selecting by a content presentation interface disposed in a webpage loaded in the remote web browser an audio selection from a list within the webpage of one or more audio selections, each selection including an identification of audio content, a location of the content server, and an access token;
b) receiving at the content server a HTTP live streaming request from the remote web browser for the audio selection, the request including the identification of the audio content and the location of the content server;
c) streaming the audio selection from the content server to the remote web browser via the network, the streaming including
dividing the source audio content into a plurality of segment files;
encrypting the plurality of segment files;
sending a manifest file from the content server to the remote web browser containing links to provide access to the plurality of segment files and to a decryption key associated with the plurality of segment files;
receiving requests at the content server from the remote web browser for each of the plurality of segment files and for the decryption key from the remote web browser; and
sending from the content server to the remote web browser each one of the requested plurality of segment files and the requested decryption key, to be used to decrypt each of the plurality of segment files, as each request for each of the plurality of segment files is received; and
d) repeating steps a), b), and c) while playback from the mobile device is performed until the last audio selection is selected and streamed to the mobile device, in order to buffer additional content to allow for continuous playback of the list of one or more audio selections.
12. A method for audio content streaming with feature detection to a mobile device, comprising:
navigating to a webpage via a web browser disposed on a user device, the webpage including a content presentation interface and the content presentation interface containing feature detection;
loading the webpage in the web browser;
detecting, via the feature detection, a streaming format compatibility criteria of the web browser to determine if the web browser is HTTP live streaming compatible, and, if so:
a) selecting by the content presentation interface an audio selection from a list within the webpage of one or more audio selections, each selection including an identification of audio content, a location of the content server, and an access token;
b) sending to a content server from the web browser a HTTP live streaming request including the streaming format compatibility criteria, an identification of content, and a location of the content server;
c) receiving streaming audio content generated by the content server, the operation of streaming content including
receiving a manifest file generated by the content server, the manifest file including links to a plurality of segment files and to a decryption key,
sending requests for each of the plurality of segment files and for the decryption key to the content server,
receiving from the content server each one of the requested plurality of segment files and the requested decryption key,
decrypting each one of the received plurality of segment files, only when playback of each one of the plurality of segments files is to begin, using the received decryption key,
playing, via the content presentation interface, each one of the plurality of segment files in consecutive order, and
deleting, as each one of the plurality of segment files finishes playback, each one of the plurality of segment files; and
d) repeating steps a), b), and c) while playback from the mobile device is performed until the last audio selection is selected and streamed to the mobile device, in order to buffer additional content to allow for continuous playback of the list of one or more audio selections.
1. A system for audio content streaming with feature detection to a mobile device, comprising:
a content server disposed on a location on a network, the content server including content to be streamed;
the mobile device interfaced with the network having an operating system for executing programs, and the mobile device having a web browser compatible with a streaming format;
a third party provider interfaced with the network for generating a webpage for transmittal to the mobile device via the network;
the mobile device operable to receive and display in the browser the webpage from the third party provider; and
the webpage having a content presentation interface, the content presentation interface providing:
functionality to the web browser on the mobile device to facilitate streaming of audio content to the web browser from the content server;
feature detection to determine a streaming format compatibility criteria of the web browser to determine if the web browser is HTTP live streaming compatible, and, if so:
a) the content presentation interface determines an audio selection from a list within the webpage of one or more audio selections, each selection including an identification of audio content, a location of the content server, and an access token;
b) the content presentation interface sends a HTTP live streaming request of the audio selection to the content server;
c) the content server receives the request and begins an audio stream to the mobile device for playback from the mobile device via the webpage, wherein the content server divides the audio content into a plurality of segment files, encrypts the plurality of segment files, sends a manifest file to the mobile device containing links to the plurality of segment files and to a decryption key associated with the plurality of segment files, and sends to the mobile device the plurality of segment files and the decryption key, for decryption of each of the plurality of segment files, as they are requested by the mobile device via the links in the manifest file; and
d) steps a), b), and c) are repeated while playback from the mobile device is performed until the last audio selection is selected and streamed to the mobile device, in order to buffer additional content to allow for continuous playback of the list of one or more audio selections.
4. The system of
5. The system of
6. The system of
10. The method of
11. The method of
15. The method of
16. The method of
17. The method of
|
The following disclosure related to digital content streaming and, more specifically, to HTTP Live Streaming (HLS) of digital content.
Streaming digital content over the Internet has developed into one of the most preferred and effective ways of delivering digital content to audiences around the globe. However, various difficulties arise in delivering content to multiple platforms, each platform potentially having different browsers and different versions of those browsers. Compatibility issues thus arise and streaming content providers have to provide some way to deliver content to as many users as possible in a secure fashion. One of the most popular streaming formats is Flash streaming. In most cases, Flash is available on personal computers, but not available for mobile devices.
HTTP Live Streaming is a streaming format originally designed for use in streaming video content. As a result, HTTP Live Streaming does not account for separate items of content to be consumed in sequence, such as in a playlist. Therefore, in order to accommodate playlists, other measures must be implemented.
In one aspect thereof, a system and method for audio content streaming with feature detection is provided. The system and method comprises receiving a source audio content from a source content provider and storing the source audio content on a content server disposed on a network. The system and method further comprises determining a streaming format compatibility criteria of a remote web browser to determine if the remote web browser is HTTP Live Streaming compatible, and, if so, determining by a content presentation interface disposed in a webpage loaded in the remote web browser an audio selection from a list within the webpage of one or more audio selections, each selection including an identification of audio content and a location of the content server, receiving at the content server a HTTP Live Streaming request from the remote web browser for the audio selection, the request including the identification of the audio content and the location of the content servers. Further including, streaming the audio selection from the content server to the remote web browser via the network, the streaming including dividing the source audio content into a plurality of segment files, encrypting the plurality of segment files, sending a manifest file from the content server to the remote web browser containing links to provide access to the plurality of segment files and to a plurality of decryption keys associated with the plurality of segment files, receiving requests at the content server from the remote web browser for each of the plurality of segment files and for each of the plurality of decryption keys from the remote web browser, and sending from the content server to the remote web browser each one of the requested plurality of segment files and each one of the requested plurality of decryption keys, as each request for each of the plurality of segment files is received. The system and method further comprising selecting, when the audio stream for an audio selection is complete and transferred to the user device, the next audio selection in the list until the last audio selection is selected and streamed to the user device.
For a more complete understanding, reference is now made to the following description taken in conjunction with the accompanying Drawings in which:
Referring now to the drawings, wherein like reference numbers are used herein to designate like elements throughout, the various views and embodiments of a system and method for content streaming with feature detection are illustrated and described, and other possible embodiments are described. The figures are not necessarily drawn to scale, and in some instances the drawings have been exaggerated and/or simplified in places for illustrative purposes only. One of ordinary skill in the art will appreciate the many possible applications and variations based on the following examples of possible embodiments.
Referring now to
It will be appreciated by those skilled in the art that the CDN provider server(s) 112 are not necessary for storage and streaming of content, as the custodian server 104 or the custodian HLS server 110 could be used instead, but merely provide convenience and more affordability to the custodian 103. The network 100 also may include a customer 116 having a customer webpage 118. The customer would typically be a customer of the custodian 103. In this type of arrangement, the custodian 103 would allow streaming content to be accessed by way of an end user 120 accessing the customer webpage 118 via an end user browser 122. The end user browser 122 is a web browser, such as Internet Explorer, Safari, Firefox, Google Chrome, or another browser. The customer 116 would be provided with access tokens associated with specific content stored on the custodian server 104, the custodian HLS server 110, or the CDN provider server 112. The database records 108 contain copies of the access tokens in relation to content information also stored in the database records 108. The access tokens allow one to access streaming content when provided to the custodian server 104. The customer webpage 118 has web scripting written in a scripting language, such as Perl, Python, or JavaScript, for example, to check the streaming format supported by the end user browser 122, as well as to provide the access tokens to the end user browser 122. Additionally, the customer webpage 118 will typically contain an interface for presenting streaming content to the end user 120.
Still referring to
Referring now to
In addition to utilizing email to reach the end user 120, the customer 116 may also use social media applications, as well. For example, the content presentation interface may be embedded in a social media process, such as a posting by a user on a social media website. The posting would include the content presentation interface, and others who view the post would be able to interact with the content presentation interface in order to stream content. It will be appreciated by one skilled in the art that the content presentation interface may be used in various media and in various formats, without being restricted to the example provided herein.
Referring now to
If the token is valid, at step 320, the streaming format compatibility that was received by the custodian server 104 is checked. If HLS streaming was not requested, but some other streaming format was requested, such as Flash, or another streaming format, the process may move to step 322 where the custodian server 104 redirects the end user browser 122 to the CDN provider server(s) 112 in order for the CDN provider server(s) 112 to facilitate the rest of the streaming process. It will be appreciated by one skilled in the art that the custodian 103 could provide the streaming of the Flash content, if the custodian 103 so desired. Streaming formats other than Flash, such as MPEG-Dash, may advance the process to step 322, to allow the CDN server(s) 112 to facilitate the rest of the streaming process, or the process may continue to step 324. If it is determined that HLS streaming is requested, the process moves to step 324. It will be appreciated that other streaming formats, such as MPEG-Dash, may also cause the process to move to step 324, and thus follow the same process as an HLS streaming request, instead of advancing to step 322. At step 324, the end user browser 122 is redirected to the custodian HLS server 110. At step 326, the custodian HLS server checks the current status of the content to be streamed. At step 328, it is determined if the requested content is already segmented and encrypted, and, thus, is already ready to be streamed to the end user browser 122. If the requested content is already segmented and encrypted, the process moves to step 330 where the custodian HLS server 110 sends a manifest file, also known as an index file, to the end user browser 122 containing the links to the segment files which are stored on the CDN provider server(s) 112. The CDN provider server(s) 112 would handle the streaming process from that point. If, at step 328, it is determined that the content is not already segmented and encrypted, the process moves to step 332.
At step 332, the custodian HLS server 110 downloads the source file of the requested content from the CDN provider server(s) 112. At step 334, the custodian HLS server 110 divides the downloaded file into segment files. The file would be divided into segment files containing content of equal length, such as 10 second segments. At step 336, the custodian HLS server encrypts the segment files via OpenSSL, or some other cryptology library. At step 338, the custodian server 110 sends a manifest file to the end user browser 122 containing links to the segment files currently stored on the custodian HLS server 110. The manifest file also contains a link to a decryption key, and information concerning each segment file, such as the length, in seconds, of the segment file. At step 339, the custodian HLS server 110 receives a request for the decryption key. At step 340, the custodian HLS server 110 sends the requested decryption key to the end user browser 122. At step 341, the custodian HLS server 110 receives a request for a segment by the end user browser 122 by activating the link to that segment in the manifest file. At step 342, the custodian HLS server 110 sends the requested segment file to the end user browser 122. At step 344, it is determined whether the segment sent in step 342 was the final segment in the manifest file, if it was not the process moves back to step 340 in order to send the next segment. If it was the final segment in the manifest file, the process moves to step 346. At step 346, the segmented files produced in step 334 are uploaded to the CDN provider server(s) 112. This allows the CDN provider server(s) 112 to handle subsequent requests for this same piece of content. Essentially, this enable to the custodian HLS server 110 to only have to cut and stream HLS content when a piece of content has not yet been segmented.
Referring now to
Referring now to
If the end user browser 122 is compatible with Flash streaming, the process moves on to step 514. If the end user browser 122 is not compatible with Flash streaming, the process moves to step 510, where the feature detection script determines if the end user browser is compatible with HLS streaming. If the end user browser is compatible with HLS streaming, the process moves on to step 514. If the end user browser 122 is not compatible with HLS streaming, an error message is displayed in the end user browser 122. At step 514, a content presentation interface, such as an audio player, is displayed to the end user. At step 516, the end user 120 selects content and initiates a stream request by interacting with the content presentation interface. This may simply include the end user 120 pressing a “play” button. The content presentation interface may also start automatically after the customer webpage 118 is loaded in the end user browser 122 and the appropriate checks in steps 508 and 510 are performed.
At step 518, a stream request including the access token and streaming format compatibility is sent from the end user browser 122 to the custodian server 104. At step 520, if the custodian server 104 determines the access token is invalid, then at step 522 the end user browser 122 receives an error message. If the custodian server 104 determines the access token is valid, the process moves to step 524. At step 524, the custodian server 104 reacts to the streaming format compatibility of the end user browser 122. If the end user browser 122 is requesting Flash content, for example, then at step 526 the end user browser is redirected to the CDN provider server(s) 112. At step 526, the end user browser 122 receives a manifest file from the CDN provider server(s) 112. If, at step 524, HLS streaming is requested, then at step 528 the browser is redirected to the custodian HLS server 110. Then, at step 530, the end user browser 122 downloads a manifest file from the custodian HLS server 110. It will be appreciated that other streaming formats, such as MPEG-Dash, may either follow the same process as HLS streaming, or be streamed via the CDN provider server(s) 112.
Once the end user browser 122 has downloaded a manifest file, whether from the CDN provider server(s) 112 or the custodian HLS server 110, the process progresses to step 531. At step 531, the end user browser 122 downloads a decryption key for use in decrypting segment files. At step 532, the end user browser 122 downloads the next segment file available via links provided in the downloaded manifest file. At step 534, the end user browser 122 decrypts the downloaded segment file using the downloaded decryption key. At step 536, the content presentation interface loaded in the end user browser 122 plays the downloaded and decrypted segment. At step 538, the end user browser deletes the downloaded segment file. At step 540, it is determined whether the segment file downloaded in step 532 and deleted in step 538 was the last segment linked in the manifest file. If it was not the last segment, the process loops back to step 532 to download the next segment file. If, at step 540, it is determined that the segment downloaded in step 532 and deleted in step 538 was the final segment linked in the manifest file, the process moves to step 542 where the manifest file and the decryption key are deleted. It will be appreciated by one skilled in the art that one decryption key may be downloaded for decrypting multiple source content, rather than downloading a new key for each source content. For example, one decryption key may be downloaded for an entire playlist of content, to be used in decrypting each segment associated with each item of content in the playlist.
At step 544 it is determined whether additional content is to be played. If not, the process ends at step 546. If there is additional content to be played, the process loops back to step 518 to send the stream request to the custodian server 104. Additional content may be played for a number of reasons. In some embodiments, the end user 120 may also decide to replay or rewind the content currently being played, such as by pressing a “back” button or by dragging a progress bar back to the beginning of the bar, which would result in needing to request the stream again as the segments already played would likely already be deleted form the end user's machine. In other embodiments, a replay or rewind capability may not be present, depending on how the custodian 103 and the customer 116 prefer the content to be streamed. Additional content may also play if the content presentation interface implements a playlist. In that case, the content presentation interface may move forward to the next piece of content automatically, or the end user 120 may choose to move forward in the playlist manually.
Referring now to
Additional content would also be stored on the content server 602. As shown in
When the end user device 604 requests the streaming process to being, as described hereinabove, a download stream 636 is initiated between the end user device 604 and the content server 602. Typically, each item of content would be requested one at a time as the content presentation interface needs require. Thus, the end user device 604 sends a request 638 to the content server 602. The download stream 636 downloads the manifest file (“AM.M3U8”) 608 to a memory 640 of the end user device 604. As described hereinabove, a manifest file contains links to each content segment and a link to a decryption key to decrypt each content segment in order for the segment to be played. It will be appreciated by one skilled in the art that there may be one decryption key for all segments of the item of content, or even one decryption key for all content in a playlist. Once the manifest file (“AM.M3U8”) 608 is loaded into the memory 640, an associated decryption key, as well as the first segment file (“AS1.ts”) 610, the second segment file (“AS2.ts”) 612, and all remaining segment files up to the last segment file (“ASn.ts”) 614, are downloaded to the memory 640. It will be appreciated by one skilled in the art that each segment file may be loaded into the memory 640 at variable rates, such that many segments may be queued up in the memory 640 at once, downloaded and played one at a time, or any variation thereof, dependent on the speed of the connection between the content server 602 and the end user device 604, as well as other factors. Further, additional content in the playlist may be downloaded, or buffered, into the memory 640, such as the second content file (“B”) 616 to the third content filed (“Z”) 626. Buffering of additional content, including the manifest files, decryption keys, and file segments associated with the additional content, will vary in degree depending on the available bandwidth. Such buffering of additional content in the playlist allows for uninterrupted and continuous playback of the playlist.
As the segments are successfully downloaded, the segments are loaded into the content presentation interface for playback through the end user device 602. Each segment is decrypted only when it is needed for playback. Thus, the first segment file (“AS1.ts”) 610 is decrypted using the associated decryption key 641 that was downloaded at the beginning of the stream, and playback begins. A playback timeline 644 shows that the first segment file (“AS1.ts”) 610 is played as the first 10 seconds of the content. Then, as playback of the first segment file (“AS1.ts”) 610 is completed, the first segment file (“AS1.ts”) 610 is deleted from the memory 640 and the second segment file (“AS2.ts”) 612 is decrypted using the associated decryption key 641 and loaded from the memory 640 into the content presentation interface to continue playback. It will be appreciated that these steps preferably happen quickly so that the end user does not experience any delay between the playback of the first segment file (“AS1.ts”) 610 and the second segment file (“AS2.ts”) 612. This process continues for the rest of the segment files, each segment being decrypted, played, and deleted from the memory 640.
When the last segment file (“ASn.ts”) 614 needs to be played, since each preceding segment file was 10 seconds in length, in the illustrative embodiment, the last segment file (“ASn.ts”) 614 would begin playing at a time denoted in
It will be appreciated by one skilled in the art that, in some embodiments, if the end user manually, via the content presentation interface, moves back to an earlier point in the content being played back, previous segments would be downloaded again for the appropriate point in the content the end user manually moved to in the content, so as to begin playback from that point again. If the end user manually restarted playback of the first content (“A”) 606, or if the content presentation interface was set to automatically replay the first content (“A”) 606, after playback of the first content (“A”) 606 was complete, the request 638 would be resent to the content server 602 to begin the process of playing the first content (“A”) 606 again. Such a method of replaying content or moving to a previous portion of content currently being played may not be present in certain embodiments, depending on how the content is chosen to be streamed. It may be desired that the end user not be allowed to replay or rewind content, in which case the streaming of content would simply continue in a predetermined order.
Still referring to
After playback of the second content (“B”) 616 is complete, the process would perform the same steps for all remaining items of content in the playlist 646, utilizing new decryption keys. The final decryption key 643 is shown in
It will be appreciated by one skilled in the art that, in some embodiments, the buffering described in regard to
Since HLS was developed with video streaming in mind, and under the assumption that video would be consumed one video at a time, HLS did not originally conform to playlist playback. Therefore, HLS does not provide for playlist functionality. Thus, the invention of the present disclosure provides for the content presentation interface to create playlist information, keep track of playlist content, data, and access tokens, and provide information concerning the playlist at the content presentation interface, such as the location in the playlist, the time left in each item of content, and other playlist location indicators. The manifest file contains information concerning each segment file, such as the length, in seconds, of each segment file. This allows the content presentation interface to add the length of each segment file together to display the length of the entire item of content to the end user. The content presentation interface also can determine and display, using the manifest file, the current elapsed time, in seconds, of the content currently being played. This can be accomplished by determining which segment is being played, and many seconds into that segment has been played. For example, if each segment is 10 seconds and 5 seconds have elapsed into the second segment, the content presentation interface determines and displays that the current item of content is at the 15 second mark. It will be understood that the streaming process shown in
HTTP Live Streaming, given that it is based on HTTP protocol, is less likely to be disallowed by routers, Network Address Translation (NAT), or firewall settings. No ports that are commonly closed by default need to be opened. Content is therefore more likely to get through to the client in more locations and without special settings. HTTP is also supported by more CDNs, a factor that can affect cost in large distribution models. In general, more available hardware and software works unmodified and as intended with HTTP than with RTSP or RTMP. Expertise in customizing HTTP content delivery using tools such as Hypertext Preprocessor (PHP) is also more widespread. Additionally, for large-scale events, HTTP natively and easily supports mirroring and edge caching, providing for massive-scale expansion when needed for the largest events. RTSP and RTMP, protocols for Flash streaming, can also be cached, but HTTP does so natively and without the need for proprietary or custom configurations.
It should be understood that the drawings and detailed description herein are to be regarded in an illustrative rather than a restrictive manner, and are not intended to be limiting to the particular forms and examples disclosed. On the contrary, included are any further modifications, changes, rearrangements, substitutions, alternatives, design choices, and embodiments apparent to those of ordinary skill in the art, without departing from the spirit and scope hereof, as defined by the following claims. Thus, it is intended that the following claims be interpreted to embrace all such further modifications, changes, rearrangements, substitutions, alternatives, design choices, and embodiments.
Morgan, Russell, Kalmes, Philip, Conklin, Charles, Padmos, Alex
Patent | Priority | Assignee | Title |
10382424, | Jan 26 2016 | REDHAT, INC.; Red Hat, Inc | Secret store for OAuth offline tokens |
10404713, | Sep 29 2017 | GAMECHANGER CHARITY | Multi-source broadcasting architecture |
10715573, | Apr 29 2016 | TENCENT TECHNOLOGY (SHENZHEN) COMPANY LIMITED | Media playing method, terminal device, and computer storage medium based on two players |
10839053, | Jan 12 2018 | Cisco Technology, Inc | Secure watermark for an adaptive bitrate client |
11463421, | Aug 08 2016 | RECORD SURE LIMITED | Method of generating a secure record of a conversation |
11611603, | Mar 06 2020 | IC EVENTS INC | Apparatus and method for transmitting multiple on-demand audio streams locally to web-enabled devices |
11651099, | Mar 19 2021 | CLOUDFLARE, INC | Persisting encrypted remote browser data at a local browser for use in a remote browser |
11818100, | Dec 04 2017 | TELEFONAKTIEBOLAGET LM ERICSSON PUBL | Automatic provisioning of streaming policies for video streaming control in CDN |
Patent | Priority | Assignee | Title |
20100317420, | |||
20110035219, | |||
20130159021, | |||
20130201283, | |||
20140304376, | |||
20150120953, | |||
20150134772, | |||
20150229685, | |||
20150242525, | |||
20150269421, | |||
20150326922, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Jun 16 2015 | MORGAN, RUSSELL | AMARONE PARTNERS, LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 035905 | /0840 | |
Jun 16 2015 | KALMES, PHILIP | AMARONE PARTNERS, LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 035905 | /0840 | |
Jun 17 2015 | CONKLIN, CHARLES | AMARONE PARTNERS, LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 035905 | /0840 | |
Jun 21 2015 | PADMOS, ALEX | AMARONE PARTNERS, LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 035905 | /0840 | |
Jun 25 2015 | AMARONE PARTNERS, LLC | (assignment on the face of the patent) | / |
Date | Maintenance Fee Events |
Aug 21 2019 | M2551: Payment of Maintenance Fee, 4th Yr, Small Entity. |
Aug 17 2023 | M2552: Payment of Maintenance Fee, 8th Yr, Small Entity. |
Date | Maintenance Schedule |
Feb 23 2019 | 4 years fee payment window open |
Aug 23 2019 | 6 months grace period start (w surcharge) |
Feb 23 2020 | patent expiry (for year 4) |
Feb 23 2022 | 2 years to revive unintentionally abandoned end. (for year 4) |
Feb 23 2023 | 8 years fee payment window open |
Aug 23 2023 | 6 months grace period start (w surcharge) |
Feb 23 2024 | patent expiry (for year 8) |
Feb 23 2026 | 2 years to revive unintentionally abandoned end. (for year 8) |
Feb 23 2027 | 12 years fee payment window open |
Aug 23 2027 | 6 months grace period start (w surcharge) |
Feb 23 2028 | patent expiry (for year 12) |
Feb 23 2030 | 2 years to revive unintentionally abandoned end. (for year 12) |