mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-30 05:31:15 +00:00
hls: Make crypto dependency optional when hls-crypto is auto
crypto libraries are not required for hlssink and hlssink2. Also, hlsdemux with nonencrypted stream can work without crpyto. Make an error only when users set "hls-crpyto" with non-auto option explicitly, but no crpyto library was found.
This commit is contained in:
parent
807e311ae8
commit
98b303498a
4 changed files with 73 additions and 55 deletions
|
@ -2018,19 +2018,15 @@ AG_GST_CHECK_FEATURE(HLS, [http live streaming plugin], hls, [
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
dnl Try to find a valid crypto library
|
dnl Try to find a valid crypto library
|
||||||
|
HAVE_HLS="yes"
|
||||||
PKG_CHECK_MODULES(NETTLE, nettle, [
|
PKG_CHECK_MODULES(NETTLE, nettle, [
|
||||||
AC_DEFINE(HAVE_NETTLE, 1, [Define if nettle is available])
|
AC_DEFINE(HAVE_NETTLE, 1, [Define if nettle is available])
|
||||||
HAVE_HLS="yes"
|
|
||||||
],[
|
],[
|
||||||
AM_PATH_LIBGCRYPT([1.2.0], [
|
AM_PATH_LIBGCRYPT([1.2.0], [
|
||||||
AC_DEFINE(HAVE_LIBGCRYPT, 1, [Define if libgcrypt is available])
|
AC_DEFINE(HAVE_LIBGCRYPT, 1, [Define if libgcrypt is available])
|
||||||
HAVE_HLS="yes"
|
|
||||||
],[
|
],[
|
||||||
PKG_CHECK_MODULES(OPENSSL, openssl, [
|
PKG_CHECK_MODULES(OPENSSL, openssl, [
|
||||||
AC_DEFINE(HAVE_OPENSSL, 1, [Define if openssl is available])
|
AC_DEFINE(HAVE_OPENSSL, 1, [Define if openssl is available])
|
||||||
HAVE_HLS="yes"
|
|
||||||
],[
|
|
||||||
HAVE_HLS="no"
|
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
@ -2511,4 +2507,3 @@ AC_OUTPUT
|
||||||
|
|
||||||
AG_GST_OUTPUT_PLUGINS
|
AG_GST_OUTPUT_PLUGINS
|
||||||
ORC_OUTPUT
|
ORC_OUTPUT
|
||||||
|
|
||||||
|
|
|
@ -1753,7 +1753,7 @@ gst_hls_demux_stream_decrypt_end (GstHLSDemuxStream * stream)
|
||||||
/* NOP */
|
/* NOP */
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#elif defined(HAVE_LIBGCRYPT)
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_hls_demux_stream_decrypt_start (GstHLSDemuxStream * stream,
|
gst_hls_demux_stream_decrypt_start (GstHLSDemuxStream * stream,
|
||||||
const guint8 * key_data, const guint8 * iv_data)
|
const guint8 * key_data, const guint8 * iv_data)
|
||||||
|
@ -1801,6 +1801,30 @@ gst_hls_demux_stream_decrypt_end (GstHLSDemuxStream * stream)
|
||||||
stream->aes_ctx = NULL;
|
stream->aes_ctx = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
/* NO crypto available */
|
||||||
|
static gboolean
|
||||||
|
gst_hls_demux_stream_decrypt_start (GstHLSDemuxStream * stream,
|
||||||
|
const guint8 * key_data, const guint8 * iv_data)
|
||||||
|
{
|
||||||
|
GST_ERROR ("No crypto available");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
decrypt_fragment (GstHLSDemuxStream * stream, gsize length,
|
||||||
|
const guint8 * encrypted_data, guint8 * decrypted_data)
|
||||||
|
{
|
||||||
|
GST_ERROR ("Cannot decrypt fragment, no crypto available");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_hls_demux_stream_decrypt_end (GstHLSDemuxStream * stream)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static GstBuffer *
|
static GstBuffer *
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
#elif defined(HAVE_NETTLE)
|
#elif defined(HAVE_NETTLE)
|
||||||
#include <nettle/aes.h>
|
#include <nettle/aes.h>
|
||||||
#include <nettle/cbc.h>
|
#include <nettle/cbc.h>
|
||||||
#else
|
#elif defined(HAVE_LIBGCRYPT)
|
||||||
#include <gcrypt.h>
|
#include <gcrypt.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ struct _GstHLSDemuxStream
|
||||||
# endif
|
# endif
|
||||||
#elif defined(HAVE_NETTLE)
|
#elif defined(HAVE_NETTLE)
|
||||||
struct CBC_CTX (struct aes_ctx, AES_BLOCK_SIZE) aes_ctx;
|
struct CBC_CTX (struct aes_ctx, AES_BLOCK_SIZE) aes_ctx;
|
||||||
#else
|
#elif defined(HAVE_LIBGCRYPT)
|
||||||
gcry_cipher_hd_t aes_ctx;
|
gcry_cipher_hd_t aes_ctx;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -12,57 +12,56 @@ hls_cargs = ['-DGST_USE_UNSTABLE_API']
|
||||||
|
|
||||||
hls_crypto = get_option('hls-crypto')
|
hls_crypto = get_option('hls-crypto')
|
||||||
hls_option = get_option('hls')
|
hls_option = get_option('hls')
|
||||||
|
hls_crypto_dep = dependency('', required : false)
|
||||||
# used for unit test
|
# used for unit test
|
||||||
hls_dep = dependency('', required : false)
|
hls_dep = dependency('', required : false)
|
||||||
|
|
||||||
have_hls_crypto = false
|
if hls_option.disabled()
|
||||||
if not hls_option.disabled()
|
subdir_done()
|
||||||
if ['auto', 'nettle'].contains(hls_crypto)
|
endif
|
||||||
hls_crypto_dep = dependency('nettle', required : false)
|
|
||||||
if hls_crypto_dep.found()
|
|
||||||
have_hls_crypto = true
|
|
||||||
hls_cargs += ['-DHAVE_NETTLE']
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
if not have_hls_crypto and ['auto', 'libgcrypt'].contains(hls_crypto)
|
if ['auto', 'nettle'].contains(hls_crypto)
|
||||||
hls_crypto_dep = cc.find_library('gcrypt', required : false)
|
hls_crypto_dep = dependency('nettle', required : false)
|
||||||
if hls_crypto_dep.found()
|
if hls_crypto_dep.found()
|
||||||
have_hls_crypto = true
|
hls_cargs += ['-DHAVE_NETTLE']
|
||||||
hls_cargs += ['-DHAVE_LIBGCRYPT']
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
if not have_hls_crypto and ['auto', 'openssl'].contains(hls_crypto)
|
|
||||||
hls_crypto_dep = dependency('openssl', required : false)
|
|
||||||
if hls_crypto_dep.found()
|
|
||||||
have_hls_crypto = true
|
|
||||||
hls_cargs += ['-DHAVE_OPENSSL']
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
if not have_hls_crypto and hls_option.enabled()
|
|
||||||
if hls_crypto == 'auto'
|
|
||||||
error('HLS plugin enabled, but found none of nettle, libgcrypt, or openssl')
|
|
||||||
else
|
|
||||||
error('HLS plugin enabled, but crypto library "@0@" not found'.format(hls_crypto))
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if have_hls_crypto
|
if not hls_crypto_dep.found() and ['auto', 'libgcrypt'].contains(hls_crypto)
|
||||||
gsthls = library('gsthls',
|
hls_crypto_dep = cc.find_library('gcrypt', required : false)
|
||||||
hls_sources,
|
if hls_crypto_dep.found()
|
||||||
c_args : gst_plugins_bad_args + hls_cargs,
|
hls_cargs += ['-DHAVE_LIBGCRYPT']
|
||||||
link_args : noseh_link_args,
|
endif
|
||||||
include_directories : [configinc],
|
|
||||||
dependencies : [gstpbutils_dep, gsttag_dep, gstvideo_dep,
|
|
||||||
gstadaptivedemux_dep, gsturidownloader_dep,
|
|
||||||
hls_crypto_dep, libm],
|
|
||||||
install : true,
|
|
||||||
install_dir : plugins_install_dir,
|
|
||||||
)
|
|
||||||
pkgconfig.generate(gsthls, install_dir : plugins_pkgconfig_install_dir)
|
|
||||||
plugins += [gsthls]
|
|
||||||
hls_dep = declare_dependency(include_directories : include_directories('.'))
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if not hls_crypto_dep.found() and ['auto', 'openssl'].contains(hls_crypto)
|
||||||
|
hls_crypto_dep = dependency('openssl', required : false)
|
||||||
|
if hls_crypto_dep.found()
|
||||||
|
hls_cargs += ['-DHAVE_OPENSSL']
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
if not hls_crypto_dep.found()
|
||||||
|
if hls_crypto == 'auto'
|
||||||
|
message('Enable HLS plugin enable without crypto')
|
||||||
|
elif hls_option.enabled()
|
||||||
|
error('HLS plugin enabled with crypto, but crypto library "@0@" not found'.format(hls_crypto))
|
||||||
|
else
|
||||||
|
subdir_done()
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
gsthls = library('gsthls',
|
||||||
|
hls_sources,
|
||||||
|
c_args : gst_plugins_bad_args + hls_cargs,
|
||||||
|
link_args : noseh_link_args,
|
||||||
|
include_directories : [configinc],
|
||||||
|
dependencies : [gstpbutils_dep, gsttag_dep, gstvideo_dep,
|
||||||
|
gstadaptivedemux_dep, gsturidownloader_dep,
|
||||||
|
hls_crypto_dep, libm],
|
||||||
|
install : true,
|
||||||
|
install_dir : plugins_install_dir,
|
||||||
|
)
|
||||||
|
pkgconfig.generate(gsthls, install_dir : plugins_pkgconfig_install_dir)
|
||||||
|
plugins += [gsthls]
|
||||||
|
hls_dep = declare_dependency(include_directories : include_directories('.'))
|
||||||
|
|
Loading…
Reference in a new issue