Commit Graph

1370 Commits

Author SHA1 Message Date
Rintaro Kuroiwa fe851f692b Calculate (sub)SegmentAlignment for AdaptationSets
- AdaptationSet::OnNewSegmentForRepresentation() calculates whether the
  Representations are aligned by looking at the start time and duration.
  (Except that duration is not used in this implementation).
- Add RepresentationStateChangeListener to callback
  AdaptationSet::OnNewSegmentForRepresentation() from Representation.

Change-Id: I3c30bd6652880dabb9d5c619d8a733ffc789eec9
2015-07-22 21:16:15 -07:00
Rintaro Kuroiwa 8d84ebfed7 Change LocalFileTest to use CreateTemporaryFile
- The tests couldn't run in parallel using gtest-parallel
  (https://github.com/google/gtest-parallel) because all the tests
  used the same file.

Change-Id: I9a3d2c20c290fbf4bee2a1d79c4ce9bf802aefcf
2015-07-22 00:28:57 -07:00
Rintaro Kuroiwa 60c54975d7 MpdBuilder should not automatically add ContentProtection elements
- ContentProtection elements should be added explicitly by the
  AddContentProtection() methods.
- This is because some MPDs should have ContentProtection at
  AdaptationSet level instead of Representation.
- Change SimpleMpdNotifier, which uses MpdBuilder, to add
  ContentProtectionElements. The logic is moved from MuxerListener.
- Add Element class for specifying subelements for
  ContentProtectionElement.

Change-Id: I9bedfb3e5a5ac0b3d5c702f1e6e4a8608c978d1d
2015-07-20 10:37:20 -07:00
Rintaro Kuroiwa f492cccc1d Add a method to add roles to AdaptationSets
Change-Id: Ib0de3b2817870c58fda9bcabf4686c27d60a72c5
2015-07-14 10:32:30 -07:00
Rintaro Kuroiwa 4e2b70c939 Add method to set AdaptationSet@group
Change-Id: Iba147806417aa2a87525318b00a4980b68c38c39
2015-07-13 22:58:49 -07:00
Rintaro Kuroiwa 5c8efd332e Pass content protection information to MuxerListener
- The UUID and DRM name can be fetched from KeySource.
- Add ProtectedContent message to MediaInfo. The message contains basic
  information for the protected content, such as the default key ID for
  the content.
- The message is required to separate Representations with different
  content protection information into different AdaptationSets.

Change-Id: Ib9dc834ae0abf93b7ca0acdf52a865b1394a4816
2015-07-13 19:03:44 -07:00
Rintaro Kuroiwa 21e43966db Use pixel_{height,width} to set AdaptationSet@par
- Pass pixel_height and pixel_width from VideoStreamInfo to MediaInfo.
- par can only be set if all the Representations have the same
  picture aspect ratio. That is the ratio of sar_x*width:sar_y*height
  should all be the same.
- If there is a Representation that does not have the sar attribute set,
  par is also not set.

Change-Id: Id34c95e4a99da9ce028a9f35737cfe5bca9e5697
2015-07-01 11:53:09 -07:00
Rintaro Kuroiwa ec21b04fab Add edash_packager.ycm_extra_conf.py
- Adding YCM configuration file for edash packager.
- For now the developer has to do a Debug build before YCM starts
  working.
- Also PATH must be set to where 'clang' is so that the system headers
  are included (e.g. for classes in std namespace).

Change-Id: I934f69fa6d70b930bde3fd684fa5d6a8204c5631
2015-06-29 14:56:22 -07:00
Rintaro Kuroiwa 5f7a55b1db Set AdaptationSet contentType
- "video" and "audio" content type are set. No "text" support yet.

Change-Id: I15a9aae1aab15022627ca737668e6c97069a2e95
2015-06-29 14:15:16 -07:00
Rintaro Kuroiwa c3c971ebd9 Add pixel_{width,height} to VideoStreamInfo
- Added logic to container parsers to extract pixel width and height.
- If the container doesn't contain the pixel width and height of the
  stream and the stream is H264, this parses the SPS to get the
  sar_width and sar_height.
- If extracted sar_width and sar_height are 0s then they imply 1s.
- Add hb2_v_frag.mp4 for test media. This does not have a
  'pasp' box and has sar_width = 8 sar_height = 9.

Change-Id: I4a06ce95582547bec19adb7905e7612c5a1f359e
2015-06-29 11:17:28 -07:00
Rintaro Kuroiwa 2cf673055c Make {Video,Audio,Text}Info optional
- The fields used to be repeated but there is no use case at the moment.
- DASH IOP explicitly disallows segments with multiple tracks.

Change-Id: Ia0af2048210c546dfaa178735605a81052ea1123
2015-06-25 17:41:00 -07:00
Rintaro Kuroiwa a02e3b60df max{Width,Height,FrameRate} for AdaptationSet
- DASH IOP requires AdaptationSets with video Representations to have:
  @maxWidth (or @width if all the Representations have the same width).
  @maxHeight (or @height if all the Representations have the same width).
  @maxFrameRate (or @frameRate if all the Representations have the same
  frame rate).

Change-Id: I1247b7461237255aeb70b7fb40f78d4439f9c529
2015-06-25 11:20:13 -07:00
Rintaro Kuroiwa d685edef62 Pass sample duration to MPD
- Get the first sample duration in Segmenter.
- Pass the value all the way to Representation thru MuxerListener.

Change-Id: I76fd970f8140d359863363dc347958f680cca5ae
2015-06-23 13:12:17 -07:00
Rintaro Kuroiwa fcaac3de33 Check for sample aspect ratio, frame duration, and time scale
- These fields are required to generate DASH IOP compliant MPDs
  of type=video.

Change-Id: I142ecd662e454ae10d06d66aa5519171f5995303
2015-06-19 13:16:07 -07:00
Kongqun Yang b87d27a23b Use variants of the PKCS#1 PSS functions that specify the MGF1 hash
BoringSSL removes the variants that had been used, in which the hash
is given a default value. This change makes the code more compatible
with BoringSSL.

Change-Id: I665084c2e71593db1afd6baf182224fe0d23c944
2015-06-09 18:34:32 -07:00
Thomas Inskip 4cb5326355 Added missing VideoStreamInfo::trick_play_rate() accessor.
Change-Id: I88656efcb510d7ed2650fdea960ab1fe7e0c2b36
2015-06-03 09:53:48 -07:00
Thomas Inskip a14ea461fb Added trick_play_rate to VideoStreamInfo.
Added ability to query the Demuxer for the container name (type).

Change-Id: I328215f7c5badfe117c5419dd42f5262c568112a
2015-06-02 22:54:13 +00:00
Thomas Inskip 581cb1fc4d Added sample_description_index to 'tfhd' box for DASH-IF IOP compatiblity.
Change-Id: I1bb24f3b3f258625ce6958d6510aab49bedbf719
2015-06-02 14:56:58 -07:00
Thomas Inskip b56f5a0edf Fix for clang build break.
Change-Id: I32b59d96ae2465fe60db9646a4c336695e3190a0
2015-05-26 13:51:40 -07:00
Thomas Inskip a0dc98c13e Added support for ISO-BMFF files with trailing 'moov' boxes.
Change-Id: Icdc9058179a998617f865566d635ecdbd0e422c5
2015-05-22 14:11:46 -07:00
Thomas Inskip ada218c089 Added File Seek and Tell functionality.
Added ability to open files in direct-access mode (no buffering).

Change-Id: Icca71a60f6697967e7535a030c71414de95d8044
2015-05-21 12:48:20 -07:00
Kongqun Yang 57e3e79a3d Add info logging when packaging starts/finishes
Change-Id: I6adc2490e779242a34e3d2db11d349bd0c97eb9f
2015-05-15 09:23:36 -07:00
Kongqun Yang 8277236fe7 Add ProgressListener for progress updates
Bug: 19730025
Change-Id: If60d7629c69d84b245f0c96fb564704d7af82ea2
2015-05-14 19:09:02 -07:00
Kongqun Yang e9f402a328 Drop media::event namespace
Change-Id: I736a645a604a22ef5ce969aeb7533e003a386172
2015-05-07 14:06:16 -07:00
Kongqun Yang 71e39e40ad Let SetMuxerListener() take ownership of listeners
Change-Id: Id7a9d6f6768556ac4bcaa9c000792a61ee6b758f
2015-05-05 17:32:33 -07:00
Kongqun Yang 5f64698144 Update mp4 dependency to include openssl
mp4 code was changed earlier which uses openssl in some way but the
dependency was not updated.

Issue: 15

Change-Id: Icababe00753f739832d61bc6792d95321cc59cf5
2015-04-28 15:14:58 -07:00
Thomas Inskip 14a1e06542 Changes for source code portability.
Change-Id: I06ebb0bb0cbf16c85eff066e606af5ec9033a206
2015-03-24 22:35:53 +00:00
KongQun Yang 7cac9da421 Fix various misc build issues in Windows
This is part of the effort to get edash_packager builds on Windows.

Change-Id: I1339f8f41a30ad3d5808ab19276d46ee902065e2
2015-03-24 13:52:18 -07:00
KongQun Yang d3c3a5573b Make LibcryptoThreading cross-platform
Change-Id: Id559c9b4d61f6d5d419735becc968fff3aa7f866
2015-03-24 18:19:30 +00:00
Thomas Inskip e3d18b684c Added static initialization and cleanup of libxml and libcurl.
Change-Id: I31cfc9a76c3c90c66059998ffc77371619a43acc
2015-03-24 11:01:10 -07:00
Thomas Inskip 0ff596e75b Deprecated File::Eof.
Change-Id: I0cca5e175babcdeeb982f981f97f8dd1b0ae9649
2015-03-23 09:39:05 -07:00
Thomas Inskip 5ce7afeda4 Added threaded I/O.
Change-Id: I2528f5f48dafa1477f2d849b6b86cdda33e47f96
2015-03-20 21:15:39 +00:00
KongQun Yang 299bb97490 Read enough bytes before detecting the container type
The input source may produce inputs with very small sizes. Demuxer
needs to accumulate enough bytes before trying to detect the container
type.

Issue: https://github.com/google/edash-packager/issues/11
Change-Id: Ie25339832a826e78f39b3b25abb98c1ad89e3021
2015-03-20 11:45:49 -07:00
Thomas Inskip f494f1f760 Fix for build break with clang.
Change-Id: I7af0b6b787324aa478c654f9a20e9008823a6378
2015-03-18 14:35:25 -07:00
Thomas Inskip 055ccde14f Added implementation and tests of IoCache (thread-safe circular memory buffer).
Change-Id: Id057b641e4eb6f61d18ec3e0565580b23d1e4297
2015-03-18 19:24:57 +00:00
Matt Brannock 6a7c6a3f7a Use bytes_read == 0 instead of EoF()
Due to various libraries' inconsistencies with using EoF, this change
will instead continue to read a file until the number of bytes read is
0. It considers bytes_read == 0 to mean end of file.

Change-Id: I90a592d6ae2b9879fe21bd0c4f9e1c9cbc680afe
2015-03-18 16:38:53 +00:00
KongQun Yang 269aced6f0 Fix find_curl_ca_bundle shell script break in old systems
Change-Id: Ief20f4d29a4f878cf70f90deae119f01eb3e7558
2015-03-12 15:35:13 -07:00
KongQun Yang 63792f088e Move find curl_ca_bundle script out of gyp and zlib DEPS change
Find curl_ca_bundle script is used by linux only. Move it out of
gyp and make sure it runs only in linux.

Also make zlib deps generic for all systems, not for linux only.

This is the first step of getting edash_packager builds on Windows
and Mac.

Change-Id: I82d3e5872fd0dd6f57127890bc062490332a1b69
2015-03-12 09:39:51 -07:00
Thomas Inskip a82bab9f3f Added File::Delete as well as deletion of temporary files created by SingleSegmentSegmenter.
Change-Id: Id0aec2f83955f81d2a059c2d077e8381ec7ec1f7
2015-03-11 15:23:19 -07:00
KongQun Yang 35e033b838 Disable gold linker by default
The bundled gold (third_party/gold) does not work on Ubuntu 64bit server.

Did some benchmarking on some systems: the build is around 1% faster,
which is not significant.

"gold" tool will still be pulled in using gclient. It can be enabled via
GYP_DEFINES flag:
GYP_DEFINES="linux_use_gold_binary=1 linux_use_gold_flags=1" gclient runhooks

Issue: 7

Change-Id: Ic5a83368e0e475280f6722ddbd3f5cead2276712
2015-02-12 12:48:34 -08:00
KongQun Yang daac38db98 Fix DCHECK failure for UDP streams
Change-Id: I45816058bcf01b9db26a1fd1a88131303ff1623e
2015-02-09 16:14:07 -08:00
Matt Brannock 26a4969ea2 Increase packager input/output file buffers to 2MB
Increases the read/write buffers for packager input and output files to
2MB from 256KB, which helps throughput when using network file systems.

Change-Id: Iff5d1b796ba4648f1436e0559c0ca2d353b6c4b5
2015-02-09 15:04:31 -08:00
Thomas Inskip cf0a1878f7 Added ability to cancel a Demuxer or Muxer run.
Change-Id: Ic4c040ef5084c4ec48206403b6abf8ca3d367ad3
2015-02-09 12:56:52 -08:00
KongQun Yang e76b20a282 Replace CreateTemporaryFileInDir with a custom implementation
CreateTemporaryFileInDir uses mkstemp which works only on local files.
This change enables the use of other types of files, like network file
as temporary directory.

Bug: 19246995

Change-Id: Ic752725e56b65eec2cd10a4e5d760c6f76ba4f18
2015-02-06 20:37:35 +00:00
Joey Parrish dddff135cf Fix signedness in DCHECKs.
Change-Id: I7d11c7b7380021c07fd9849c298ce0329b7bf6dd
2015-02-04 21:39:30 +00:00
Joey Parrish 3cc86c62b5 Add a stream descriptor field for language.
If a stream has no language metadata, or has the wrong metadata, this
field allows the user to override this on the command-line.

This also maps all specified languages on the command-line to ISO-639-2
tags as required by the MP4 muxer, so that ISO-639-1 tags specified on
the command-line do not cause a DCHECK to fail.

b/18613148

Change-Id: I473baeecbb3d388db5e06d080179ec6a332b4794
2015-02-04 13:36:04 -08:00
Joey Parrish 77ec23afe4 Split up AdaptationSets by language.
Additionally, for XML schema correctness, convert ISO-639-2 language
tags (three-letter codes) to ISO-639-1 tags (two-letter codes) when
possible.  This follows BCP-47, which says to always use the shortest
language tag when there are multiple possibilities.

b/18613148

Change-Id: I120fb7b42ac4da5feb4ca046bba93d9e58acd7a9
2015-02-03 16:50:00 -08:00
KongQun Yang 80db1c7bbf Handle non-MSE compliant fmp4 properly
MSE requires 'base-data-offset-present' not to be set, but FFmpeg may
generate fmp4 files with this flag though it actually uses moof as base.
Log a warning instead of failing directly in this case.

FFmpeg may also generates fmp4 files without tfdt box
(TrackFragmentDecodeTime) box, which is again non-MSE compliant. Handle
this scenario properly.

Bug: 18613712

Also fixes a test failure in SegmentTemplateTest introduced in an earlier
change.

Bug: 19235748

Change-Id: I4bcbb675b22a832a88cd33ee64c3e99a1c6e3a63
2015-02-03 13:19:19 -08:00
KongQun Yang 5462b350ae Optimize BitReader::SkipBits for large skips
Change-Id: Ic3a383a7112f21602755d6caa6b24b2857d62ebf
2015-01-31 00:56:14 +00:00
KongQun Yang f814ce75c3 Log a warning if there is a gap in media timeline
Change-Id: I39bdd3adeaa1d191bbc429ee91cbad3b8018afbf
2015-01-31 00:49:13 +00:00