Update CHANGELOG for v1.5.0
- Also updated a few wording in README and in the code. Change-Id: I9adf297c00aee92e61e87effa3bdcfaf402638e5
This commit is contained in:
parent
f3d35b730c
commit
cf778f7149
13
CHANGELOG.md
13
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.
|
||||
|
@ -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
|
||||
|
|
24
README.md
24
README.md
|
@ -1,10 +1,10 @@
|
|||
![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:
|
||||
|
||||
|
@ -12,15 +12,15 @@ Current supported codecs:
|
|||
|:-----------------:|:------------:|:------------:|:------------:|:-----------:|
|
||||
| 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).
|
||||
|
||||
|
@ -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/"
|
||||
|
@ -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/"
|
||||
|
|
|
@ -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,
|
||||
|
@ -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: "
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
@ -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));
|
||||
|
||||
|
@ -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));
|
||||
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -227,7 +227,7 @@ bool TsWriter::NewSegment(const std::string& file_name) {
|
|||
return true;
|
||||
}
|
||||
|
||||
void TsWriter::SignalEncypted() {
|
||||
void TsWriter::SignalEncrypted() {
|
||||
encrypted_ = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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());
|
||||
|
||||
|
@ -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());
|
||||
|
||||
|
|
Loading…
Reference in New Issue