Opening a named pipe can block until both ends are open, and we cannot
control when the other end will be open. Ideally, we would always
open files in a thread so that Packager can be used with piped inputs
from naive applications without a potential deadlock.
This change will defer opening WebVTT files until the parser Run()
method is called from a thread. This way, WebVTT files being sent in
from a pipe will never be able to block the main thread.
Previously, files were opened on the main thread before calling the
parser constructor, passing the open file to the constructor as an
argument. I also tried doing it in the parser's InitializeInternal()
method, but that is also called from the main thread.
Change-Id: I54cc68ed9d48a8dc697829119be84d4065b1ae1c
Also updated API keys for both Travis and Appveyor as the previous ones
have expired. And removed shared_library release to avoid confusions.
Fixes#550.
Change-Id: I81b1531a9abb9669be54a2e302346e194d7c363e
Call CRYPTO_library_init to properly initialize crypto engine, which
enables AES-NI (Hardware AES) if it is supported by CPU.
Also added a performance benchmark test.
Closes#198.
Change-Id: I962a2da588d2f4f6cbe00c83ecc9a832db0e6042
Also roll_boringssl.py script is also adjusted to work with latest
boringssl.
Disable ASM compilation on Windows x64 which fails to compile. It also
means there are no HW AES on Windows x64.
Issue #198.
Change-Id: Ib7e8ff506f014c8c733f1882eeeddbe34fa28511
For MP4 files, mp4 parser tries to open and read the same file again
to handle trailing MOOV box.
Open FIFO again may result in packager hang.
Update the code to only attempt to load MOOV for local regular files,
as FIFO and remote files are unseekable anyway.
Fixes#664.
Change-Id: Ib286d2876d202cd5a248ffe70b13589b3cc74bc9
Although FRAME-RATE is optional per HLS specification, but per HLS
Authoring Specification for Apple Devices (https://apple.co/30n90DC):
Each EXT-X-STREAM-INF tag MUST have a FRAME-RATE attribute.
Also, iOS and TVos refuse to play the content if VIDEO-RANGE is
present but FRAME-RATE is missing.
Issue #632, #634.
Change-Id: Ica282f023a7e8538f7b506094e2286840cf5c193
Calculate FRAME-RATE from sample duration as in the DASH solution.
Right now calculated frame-rate may not be accurate in some scenarios,
so we avoid setting the attribute in HLS unless it is more than 30
fps. We will set it unconditionally once it is fixed.
Fixes#634.
Change-Id: I87b6e9a047d959ae88dd4dcb2b4786527ba5c9fc
- Parse and extract transfer_characteristics from H264/H265 VUI
parameters.
- Set VIDEO-RANGE attribute in HLS according to HLS specification:
https://tools.ietf.org/html/draft-pantos-hls-rfc8216bis-02#section-4.4.4.2
- Also added an end to end test.
Fixes#632.
Change-Id: Iadf557d967b42ade321fb0b152e8e7b64fe9ff3e
- Add relevant FOURCCs for Dolby Vision.
- Parse DOVIDecoderConfigurationRecord (dvcC, dvvC) to generate
Dolby Vision codec string.
- Propagate Dolby Vision configs (dvcC, dvvC, hvcE) from Demuxer
to Muxer.
- Add a Dolby Vision end to end test.
Support for backward compatibility signaling in DASH and HLS will be
added in a later CL.
Issue #341
Change-Id: If1385df5f48e04b59cb7661130bea48e26b453bf
Latest version of FFmpeg encodes non standard channel layout, e.g. 5.1(side), in AAC using PCE.
This is now supported with the below changes:
- Allow channel_configuration in ADTS header to be 0, as the cctual channel layout is specified
in PCE.
- Add GetFrameSizeWithoutParsing to determine the frame size before actually parsing the frame.
- Skip and resume later if not the whole frame is available.
- Also ensure that the next frame starts with a proper sync word.
Fixes#598.
Store and use the segment start time in the original time scale to
delete old segments, instead of storing it in seconds, as the segment
file name is generated using the time with the time scale.
Fixes#625.
Change-Id: I7524d597b1ffc081dd1399d6fb3ea47c13502881
- Parses parameter set NAL units in the samples.
- Calculate pixel width and height from track width and height.
Fixes#621, #627.
Change-Id: Ic1e120dccbd220b01168f7bf4effeaa43f95b055
We used to use the target segment duration provided by the user.
Unfortunately that does not work for iframe only playlist which
the target duration is effectively equal to the GOP duration.
In the new approach, we estimate the target duration from the initial
few blocks (10 blocks right now).
Fixes#610.
Change-Id: Ie8bf943e157149ca7ed3b9382fe0a1088d0774e2
Add dash_accessibilities stream descriptor, which is a semi-colon
separated list of accessibility_scheme_id_uri=value. It is optional.
Add dash_roles stream descriptor, which is a semi-colon separated
list of strings. It is optional.
Closes#565.
Change-Id: Idb1c20bb410fdd016db07e11fe507c102a3dd8ea
And also dvhe with dvh1.
Apple's specification does not recommend video formats with the
parameter sets stored in the samples.
It also fails mediastreamvalidator checks and some Apple devices /
platforms refused to play.
See https://apple.co/30n90DC 1.10.
Replaced with the corresponding formats with the parameter sets stored
in the sample descriptions instead.
Fixes#587.
Change-Id: Ic5d3f6fde115b1d09d1dcac32cef5fe0ad246aa0
We have logics in bandwidth calculation to ignore segments that is
smaller than half of target duration. The logic does not have any
effect right now as the target duration in mpd/hls params is always
zero.
This change will set target duration in mpd/hls params, thus it can fix
part of issue #581 as the last segment which is less than half of
target duration.
Issue #581.
Fixes#498.
Change-Id: Ieb2dbf4da9fc72a7b9de802cda4294f1954d29b4
Segment start,end time was used previously, which could result in
problems if there are discontinuity in the streams. E.g. if the
stream has timestamp, 10000, 10001, 10002 and then next segment
comes in with timestamp 1. With the previous logic, all the segments
would remain in the time shift buffer until after 10000 segments
even with a small time shift buffer depth of 10.
This could also happen when timestamp wraps around, which could
happen during long time of live streaming.
This change will also be useful to support multi-period live DASH.
Fixes#563.
Change-Id: Ie078d76c6e4af13ade9ad46191c8e3529069ed4d
This is needed for Dolby Vision as Dolby Vision uses NAL unit type 62
to carry private information.
Issue #341.
Change-Id: Ib3f06d8f36ef3d89c33162dd74c012a0c3a805e5
- Define BaseDescriptor and generic read / write operations.
- Define descriptors: ESDescriptor, DecoderConfigDescriptor,
DecoderSpecificInfoDescriptor, SLConfigDescriptor.
DecoderSpecificInfoDescriptor and all other descriptors can now
handle arbitrary length size, not limiting to 64 byte for
DecoderSpecificInfoDescriptor, which was placed to limit
ESDescriptor length size to one byte.
- Now DecoderConfigDescriptor is able to handle reading and writing
of all fields including buffer_size_db, which was not handled
earlier.
Fixes#536.
Change-Id: Ia8a775f8bf6e90e3343a85f0e643bc44cd017c7a
Addresses binary/str conversion problems like
'can't use a string pattern on a bytes-like object'.
With this change, packager_test.py will work with any version of python
after python2.5.
Fixes#553.
Change-Id: I02066942e4bcdddc1db1daf761abab4cc46169a9
With the update, the script needs to be launched from
out/{Debug,Release} directory.
Also updated docs to make it clear how to use the tool.
Fixes#538.
Change-Id: I37b71afc33e3b73ff5232e43d79c52ffa5859d57
Add crypto_period_seconds to Widevine key request
When using key rotation with Widevine DRM, a key server has to know
the duration of crypto period to relate generated keys to the media
playback time. This helps the server to provide relevant keys to
a client during license request.
Closes#544.