Skip to content

Commit

Permalink
Update CHANGELOG for v1.5.0
Browse files Browse the repository at this point in the history
- Also updated a few wording in README and in the code.

Change-Id: I9adf297c00aee92e61e87effa3bdcfaf402638e5
  • Loading branch information
kqyang committed Jul 12, 2016
1 parent f3d35b7 commit cf778f7
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 24 deletions.
13 changes: 13 additions & 0 deletions CHANGELOG.md
@@ -1,3 +1,15 @@
## [1.5.0] - 2016-07-12
### Added
- Added TS (output) and HLS (output) with SAMPLE-AES encryption support.
Note that only H.264 and AAC are supported right now.
- Added support for CENCv3, i.e. 'cbcs', 'cbc1', 'cens' protection schemes.
- Added H.265 support in TS (input) and iso-bmff (input / output).
- Added experimental Opus in iso-bmff support.

### Changed
- Change project name from edash-packager to shaka-packager. Also replaces
various references of edash in the code accordingly.

## [1.4.1] - 2016-06-23
### Fixed
- [VP9] VPCodecConfiguration box should inherit from FullBox instead of Box.
Expand Down Expand Up @@ -161,6 +173,7 @@ First public release.
- Added mpd_generator driver program to generate mpd file from packager generated
intermediate files.

[1.5.0]: https://github.com/google/shaka-packager/compare/v1.4.0...v1.5.0
[1.4.1]: https://github.com/google/shaka-packager/compare/v1.4.0...v1.4.1
[1.4.0]: https://github.com/google/shaka-packager/compare/v1.3.1...v1.4.0
[1.3.1]: https://github.com/google/shaka-packager/compare/v1.3.0...v1.3.1
Expand Down
24 changes: 12 additions & 12 deletions README.md
@@ -1,26 +1,26 @@
![Shaka Packager](docs/shaka-packager.png)
# ![Shaka Packager](docs/shaka-packager.png)

[![Build Status](https://travis-ci.org/google/shaka-packager.svg?branch=master)](https://travis-ci.org/google/shaka-packager)

Media packaging SDK intended for C++ programmers writing DASH packager applications with common encryption support, Widevine DRM support, Live, and Video-On-Demand.
Media packaging SDK intended for C++ programmers writing DASH/HLS packager applications with common encryption support, Widevine DRM support, Live, and Video-On-Demand.

This document provides the information needed to create a DASH packager that is able to remux and encrypt a video into fragmented ISO BMFF format with common encryption (CENC) support. The DASH packaging API is also designed in such a way for easy extension to more source and destination formats.
This document provides the information needed to create a DASH/HLS packager that is able to remux and encrypt a video into fragmented ISO BMFF format with common encryption (CENC) support. The DASH/HLS packaging API is also designed in such a way for easy extension to more source and destination formats.

Current supported codecs:

| Codecs | ISO-BMFF | WebM | MPEG2-TS | WVM |
|:-----------------:|:------------:|:------------:|:------------:|:-----------:|
| H264 (AVC) | I / O | - | I / O | I |
| H265 (HEVC) | I / O | - | I | - |
| VP8 | I / O | I / O | - | - |
| VP9 | I / O | I / O | - | - |
| VP8 | *I / O* | I / O | - | - |
| VP9 | *I / O* | I / O | - | - |
| AAC | I / O | - | I / O | I |
| Dolby AC3/EAC3 | I / O | - | - | - |
| DTS | I / O | - | - | - |
| Opus | - | I / O | - | - |
| Opus | *I / O* | I / O | - | - |
| Vorbis | - | I / O | - | - |
** I for input and O for output.
** We will update this table once new formats are supported.
** VP8/VP9/Opus support in ISO-BMFF is experimental.

Right now this project is supported directly on Linux and MacOSX platforms only. One option to run shaka-packager on other platforms is using [docker] (#Using docker for testing /development).

Expand Down Expand Up @@ -268,16 +268,16 @@ mpd_generator \
Output MPEG2-TS video.
```Shell
packager \
'input=bear-1280x720.mp4,stream=video,segment_template=bear$Number$.ts,output_format=ts'
'input=bear-1280x720.mp4,stream=video,segment_template=bear$Number$.ts'
```

Output HLS playlists with MPEG2-TS video. The following outputs a Master
Playlist as `master.m3u8`. And the Media Playlist for the video as
`playlist.m3u8`. `--hls_base_url` specifies the prefix for the
`playlist.m3u8`. The optional `--hls_base_url` specifies the prefix for the
generated TS segments.
```Shell
packager \
'input=bear-1280x720.mp4,stream=video,segment_template=bear$Number$.ts,output_format=ts,playlist_name=playlist.m3u8' \
'input=bear-1280x720.mp4,stream=video,segment_template=bear$Number$.ts,playlist_name=playlist.m3u8' \
--single_segment=false \
--hls_master_playlist_output="master.m3u8" \
--hls_base_url="http://localhost:10000/"
Expand All @@ -287,8 +287,8 @@ For audio Media Playlists, the name and group for EXT-X-MEDIA tag must be
specified.
```Shell
packager \
'input=input.mp4,stream=video,output_format=ts,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
'input=input.mp4,stream=audio,output_format=ts,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
'input=input.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
'input=input.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
--single_segment=false \
--hls_master_playlist_output="master_playlist.m3u8" \
--hls_base_url="http://localhost:10000/"
Expand Down
6 changes: 3 additions & 3 deletions packager/media/formats/mp2t/program_map_table_writer.cc
Expand Up @@ -193,8 +193,8 @@ void WritePmtToBuffer(const uint8_t* pmt,
void WritePrivateDataIndicatorDescriptor(FourCC fourcc, BufferWriter* output) {
const uint8_t kPrivateDataIndicatorDescriptor = 15;
output->AppendInt(kPrivateDataIndicatorDescriptor);
output->AppendInt(static_cast<uint8_t>(sizeof(FOURCC_aacd)));
output->AppendInt(FOURCC_aacd);
output->AppendInt(static_cast<uint8_t>(sizeof(fourcc)));
output->AppendInt(fourcc);
}

bool WriteAacAudioSetupInformation(const uint8_t* aac_audio_specific_config,
Expand Down Expand Up @@ -376,7 +376,7 @@ bool AacProgramMapTableWriter::EncryptedSegmentPmtWithParameters(
int current_next_indicator,
BufferWriter* writer) {
// -12 because there are 12 bytes between 'descriptor_length' in
// registartion_descriptor and 'setup_data_length' in audio_setup_information.
// registration_descriptor and 'setup_data_length' in audio_setup_information.
if (aac_audio_specific_config_.size() >
std::numeric_limits<uint8_t>::max() - 12) {
LOG(ERROR) << "AACAudioSpecificConfig of size: "
Expand Down
2 changes: 1 addition & 1 deletion packager/media/formats/mp2t/ts_segmenter.cc
Expand Up @@ -189,7 +189,7 @@ Status TsSegmenter::NotifyEncrypted() {

if (!pes_packet_generator_->SetEncryptionKey(encryption_key_.Pass()))
return Status(error::INTERNAL_ERROR, "Failed to set encryption key.");
ts_writer_->SignalEncypted();
ts_writer_->SignalEncrypted();
}
return Status::OK;
}
Expand Down
8 changes: 4 additions & 4 deletions packager/media/formats/mp2t/ts_segmenter_unittest.cc
Expand Up @@ -75,7 +75,7 @@ class MockTsWriter : public TsWriter {
public:
MOCK_METHOD1(Initialize, bool(const StreamInfo& stream_info));
MOCK_METHOD1(NewSegment, bool(const std::string& file_name));
MOCK_METHOD0(SignalEncypted, void());
MOCK_METHOD0(SignalEncrypted, void());
MOCK_METHOD0(FinalizeSegment, bool());

// Similar to the hack above but takes a scoped_ptr.
Expand Down Expand Up @@ -457,7 +457,7 @@ TEST_F(TsSegmenterTest, WithEncryptionNoClearLead) {
TsSegmenter segmenter(options, &mock_listener);

EXPECT_CALL(*mock_ts_writer_, Initialize(_)).WillOnce(Return(true));
EXPECT_CALL(*mock_ts_writer_, SignalEncypted());
EXPECT_CALL(*mock_ts_writer_, SignalEncrypted());
EXPECT_CALL(*mock_pes_packet_generator_, Initialize(_))
.WillOnce(Return(true));

Expand Down Expand Up @@ -495,7 +495,7 @@ TEST_F(TsSegmenterTest, WithEncryptionNoClearLeadNoMuxerListener) {
TsSegmenter segmenter(options, nullptr);

EXPECT_CALL(*mock_ts_writer_, Initialize(_)).WillOnce(Return(true));
EXPECT_CALL(*mock_ts_writer_, SignalEncypted());
EXPECT_CALL(*mock_ts_writer_, SignalEncrypted());
EXPECT_CALL(*mock_pes_packet_generator_, Initialize(_))
.WillOnce(Return(true));

Expand Down Expand Up @@ -616,7 +616,7 @@ TEST_F(TsSegmenterTest, WithEncryptionWithClearLead) {
EXPECT_CALL(mock_listener, OnEncryptionStart());
EXPECT_CALL(*mock_pes_packet_generator_raw, SetEncryptionKeyMock(_))
.WillOnce(Return(true));
EXPECT_CALL(*mock_ts_writer_raw, SignalEncypted());
EXPECT_CALL(*mock_ts_writer_raw, SignalEncrypted());
EXPECT_OK(segmenter.AddSample(sample2));
}

Expand Down
2 changes: 1 addition & 1 deletion packager/media/formats/mp2t/ts_writer.cc
Expand Up @@ -227,7 +227,7 @@ bool TsWriter::NewSegment(const std::string& file_name) {
return true;
}

void TsWriter::SignalEncypted() {
void TsWriter::SignalEncrypted() {
encrypted_ = true;
}

Expand Down
2 changes: 1 addition & 1 deletion packager/media/formats/mp2t/ts_writer.h
Expand Up @@ -42,7 +42,7 @@ class TsWriter {
virtual bool NewSegment(const std::string& file_name);

/// Signals the writer that the rest of the segments are encrypted.
virtual void SignalEncypted();
virtual void SignalEncrypted();

/// Flush all the pending PesPackets that have not been written to file and
/// close the file.
Expand Down
4 changes: 2 additions & 2 deletions packager/media/formats/mp2t/ts_writer_unittest.cc
Expand Up @@ -319,7 +319,7 @@ TEST_F(TsWriterTest, EncryptedSegmentsH264Pmt) {
EXPECT_TRUE(ts_writer_.FinalizeSegment());

// Overwrite the file but as encrypted segment.
ts_writer_.SignalEncypted();
ts_writer_.SignalEncrypted();
EXPECT_TRUE(ts_writer_.NewSegment(test_file_name_));
EXPECT_TRUE(ts_writer_.FinalizeSegment());

Expand Down Expand Up @@ -381,7 +381,7 @@ TEST_F(TsWriterTest, EncryptedSegmentsAacPmt) {
EXPECT_TRUE(ts_writer_.FinalizeSegment());

// Overwrite the file but as encrypted segment.
ts_writer_.SignalEncypted();
ts_writer_.SignalEncrypted();
EXPECT_TRUE(ts_writer_.NewSegment(test_file_name_));
EXPECT_TRUE(ts_writer_.FinalizeSegment());

Expand Down

0 comments on commit cf778f7

Please sign in to comment.