Warns if HLS type is not set to LIVE for UDP inputs

- Also fixed documentation missing --hls_playlist_type LIVE for HLS
  live examples.
- Also updated packager.cc to use RETURN_IF_ERROR macro for
  consistency.

Fixes #347
Fixes #403

Change-Id: Idbccd7137b873170cd54e2c780bd554d25031a0b
This commit is contained in:
KongQun Yang 2018-06-06 17:13:06 -07:00
parent 9df2825f3d
commit e5863f1e0e
2 changed files with 22 additions and 23 deletions

View File

@ -33,7 +33,8 @@ Here are some examples.
'in=udp://225.1.1.8:8002?interface=172.29.46.122,stream=video,init_segment=h264_480p_init.mp4,segment_template=h264_480p_$Number$.m4s,playlist_name=h264_480p.m3u8' \ 'in=udp://225.1.1.8:8002?interface=172.29.46.122,stream=video,init_segment=h264_480p_init.mp4,segment_template=h264_480p_$Number$.m4s,playlist_name=h264_480p.m3u8' \
'in=udp://225.1.1.8:8003?interface=172.29.46.122,stream=video,init_segment=h264_720p_init.mp4,segment_template=h264_720p_$Number$.m4s,playlist_name=h264_720p.m3u8' \ 'in=udp://225.1.1.8:8003?interface=172.29.46.122,stream=video,init_segment=h264_720p_init.mp4,segment_template=h264_720p_$Number$.m4s,playlist_name=h264_720p.m3u8' \
'in=udp://225.1.1.8:8004?interface=172.29.46.122,stream=video,init_segment=h264_1080p_init.mp4,segment_template=h264_1080p_$Number$.m4s,playlist_name=h264_1080p.m3u8' \ 'in=udp://225.1.1.8:8004?interface=172.29.46.122,stream=video,init_segment=h264_1080p_init.mp4,segment_template=h264_1080p_$Number$.m4s,playlist_name=h264_1080p.m3u8' \
--hls_master_playlist_output h264_master.m3u8 --hls_master_playlist_output h264_master.m3u8 \
--hls_playlist_type LIVE
.. note:: .. note::

View File

@ -213,10 +213,7 @@ Status ValidateStreamDescriptor(bool dump_stream_info,
// If a segment template is provided, it must be valid. // If a segment template is provided, it must be valid.
if (stream.segment_template.length()) { if (stream.segment_template.length()) {
Status template_check = ValidateSegmentTemplate(stream.segment_template); RETURN_IF_ERROR(ValidateSegmentTemplate(stream.segment_template));
if (!template_check.ok()) {
return template_check;
}
} }
if (stream.output.find('$') != std::string::npos) { if (stream.output.find('$') != std::string::npos) {
@ -299,11 +296,22 @@ Status ValidateParams(const PackagingParams& packaging_params,
"stream descriptors."); "stream descriptors.");
} }
Status stream_check = ValidateStreamDescriptor( RETURN_IF_ERROR(ValidateStreamDescriptor(
packaging_params.test_params.dump_stream_info, descriptor); packaging_params.test_params.dump_stream_info, descriptor));
if (!stream_check.ok()) { if (base::StartsWith(descriptor.input, "udp://",
return stream_check; base::CompareCase::SENSITIVE)) {
const HlsParams& hls_params = packaging_params.hls_params;
if (!hls_params.master_playlist_output.empty() &&
hls_params.playlist_type == HlsPlaylistType::kVod) {
LOG(WARNING)
<< "Seeing UDP input with HLS Playlist Type set to VOD. The "
"playlists will only be generated when UDP socket is closed. "
"If you want to do live packaging, --hls_playlist_type needs to "
"be set to LIVE.";
}
// Skip the check for DASH as DASH defaults to 'dynamic' MPD when segment
// template is provided.
} }
} }
@ -808,11 +816,7 @@ Status Packager::Initialize(
if (internal_) if (internal_)
return Status(error::INVALID_ARGUMENT, "Already initialized."); return Status(error::INVALID_ARGUMENT, "Already initialized.");
Status param_check = RETURN_IF_ERROR(media::ValidateParams(packaging_params, stream_descriptors));
media::ValidateParams(packaging_params, stream_descriptors);
if (!param_check.ok()) {
return param_check;
}
if (!packaging_params.test_params.injected_library_version.empty()) { if (!packaging_params.test_params.injected_library_version.empty()) {
SetPackagerVersionForTesting( SetPackagerVersionForTesting(
@ -917,15 +921,11 @@ Status Packager::Initialize(
packaging_params.output_media_info, internal->mpd_notifier.get(), packaging_params.output_media_info, internal->mpd_notifier.get(),
internal->hls_notifier.get()); internal->hls_notifier.get());
Status status = media::CreateAllJobs( RETURN_IF_ERROR(media::CreateAllJobs(
streams_for_jobs, packaging_params, internal->mpd_notifier.get(), streams_for_jobs, packaging_params, internal->mpd_notifier.get(),
internal->encryption_key_source.get(), internal->encryption_key_source.get(),
internal->job_manager->sync_points(), &muxer_listener_factory, internal->job_manager->sync_points(), &muxer_listener_factory,
&muxer_factory, internal->job_manager.get()); &muxer_factory, internal->job_manager.get()));
if (!status.ok()) {
return status;
}
internal_ = std::move(internal); internal_ = std::move(internal);
return Status::OK; return Status::OK;
@ -935,9 +935,7 @@ Status Packager::Run() {
if (!internal_) if (!internal_)
return Status(error::INVALID_ARGUMENT, "Not yet initialized."); return Status(error::INVALID_ARGUMENT, "Not yet initialized.");
Status status = internal_->job_manager->RunJobs(); RETURN_IF_ERROR(internal_->job_manager->RunJobs());
if (!status.ok())
return status;
if (internal_->hls_notifier) { if (internal_->hls_notifier) {
if (!internal_->hls_notifier->Flush()) if (!internal_->hls_notifier->Flush())