[vlc-devel] [PATCH] Support for Http Dynamic Streaming
Jean-Baptiste Kempf
jb at videolan.org
Thu Jun 12 11:50:12 CEST 2014
Ping,
Jonathan, did you make it or is there an issue?
On 04 Jun, Jean-Baptiste Kempf wrote :
> On 29 May, Jonathan Thambidurai wrote :
> > + * HDS: Http Dynamic Streaming - based on public specs from Adobe (f4m, f4v, etc.)
>
> Poor wording.
>
> > + * hds: HTTP Dynamic Streaming, per Adobe's specs
>
> Idem
>
> > + * Heavily inspired by HDS module of Frédéric Yhuel <fyhuel _AT_ viotech _DOT_ net>
>
> by SS module, you mean.
>
> > +#ifdef HAVE_CONFIG_H
> > +# include "config.h"
> > +#endif
> > +
> > +#include <inttypes.h>
>
> Useless
>
> > +vlc_module_begin()
> > + set_category( CAT_INPUT )
> > + set_subcategory( SUBCAT_INPUT_STREAM_FILTER )
> > + set_description( N_("HTTP Dynamic Streaming") )
> > + set_shortname( "Dynamic Streaming")
>
> shortname should be HDS or HTTP Dynamic Streaming
>
> > +static int Read( stream_t *, void *, unsigned );
> > +static int Peek( stream_t *, const uint8_t **, unsigned );
> > +static int Control( stream_t *, int , va_list );
> > +
> > +static bool isFQUrl( char* url )
> inline?
>
> > +{
> > + return ( NULL != vlc_strcasestr( url, "https://") ||
> > + NULL != vlc_strcasestr( url, "http://" ) );
> > +}
> > +
>
>
> After that, the code warns way too much:
>
> CC stream_filter/hds/libhds_plugin_la-hds.lo
> ../../modules/stream_filter/hds/hds.c: In function ‘isHDS’:
> ../../modules/stream_filter/hds/hds.c:81:13: attention : assignment discards ‘const’ qualifier from pointer target type
> str = peek;
> ^
> ../../modules/stream_filter/hds/hds.c: In function ‘parse_asrt’:
> ../../modules/stream_filter/hds/hds.c:116:9: attention : format ‘%u’ expects argument of type ‘unsigned int’, but argument 6 has type ‘long int’ [-Wformat=]
> msg_Err( p_this, "Not enough asrt data (%u, %u)", asrt_len, data_end - data );
> ^
> ../../modules/stream_filter/hds/hds.c: In function ‘parse_afrt’:
> ../../modules/stream_filter/hds/hds.c:220:9: attention : format ‘%u’ expects argument of type ‘unsigned int’, but argument 6 has type ‘long int’ [-Wformat=]
> msg_Err( p_this, "Not enough afrt data %u, %u", afrt_len, data_end - data );
> ^
> ../../modules/stream_filter/hds/hds.c: In function ‘parse_BootstrapData’:
> ../../modules/stream_filter/hds/hds.c:399:22: attention : passing argument 3 of ‘memchr’ makes integer from pointer without a cast
> data_p = memchr( data_p, '\0', data_end );
> ^
> In file included from ../../include/vlc_common.h:46:0,
> from ../../modules/stream_filter/hds/hds.c:27:
> /usr/include/string.h:96:14: note: expected ‘size_t’ but argument is of type ‘char *’
> extern void *memchr (const void *__s, int __c, size_t __n)
> ^
> ../../modules/stream_filter/hds/hds.c:403:17: attention : ‘return’ with a value, in function returning void
> return NULL;
> ^
> ../../modules/stream_filter/hds/hds.c:451:9: attention : ‘return’ with a value, in function returning void
> return NULL;
> ^
> ../../modules/stream_filter/hds/hds.c:465:9: attention : ‘return’ with a value, in function returning void
> return NULL;
> ^
> ../../modules/stream_filter/hds/hds.c: In function ‘find_chunk_mdat’:
> ../../modules/stream_filter/hds/hds.c:543:17: attention : pointer targets in assignment differ in signedness [-Wpointer-sign]
> boxname = chunkdata;
> ^
> ../../modules/stream_filter/hds/hds.c:559:21: attention : pointer targets in assignment differ in signedness [-Wpointer-sign]
> boxdata = chunkdata;
> ^
> ../../modules/stream_filter/hds/hds.c:564:21: attention : pointer targets in assignment differ in signedness [-Wpointer-sign]
> boxdata = chunkdata;
> ^
> ../../modules/stream_filter/hds/hds.c:569:14: attention : pointer targets in assignment differ in signedness [-Wpointer-sign]
> *mdatptr = boxdata;
> ^
> ../../modules/stream_filter/hds/hds.c: In function ‘download_chunk’:
> ../../modules/stream_filter/hds/hds.c:638:9: attention : format ‘%li’ expects a matching ‘long int’ argument [-Wformat=]
> msg_Err(s, "Strangely-large chunk of %"PRIi64" Bytes" );
> ^
> ../../modules/stream_filter/hds/hds.c:594:10: attention : unused variable ‘free_movie_id’ [-Wunused-variable]
> bool free_movie_id = false;
> ^
> ../../modules/stream_filter/hds/hds.c: In function ‘generate_new_chunk’:
> ../../modules/stream_filter/hds/hds.c:756:25: attention : unused variable ‘latest_frun’ [-Wunused-variable]
> fragment_run_t* latest_frun = hds_stream->fragment_runs + ( hds_stream->fragment_run_count - 1 );
> ^
> ../../modules/stream_filter/hds/hds.c:768:5: attention : statement with no effect [-Wunused-value]
> for( frun_entry; frun_entry < hds_stream->fragment_run_count;
> ^
> ../../modules/stream_filter/hds/hds.c:768:33: attention : comparaison entre des expressions entières signée et non signée [-Wsign-compare]
> for( frun_entry; frun_entry < hds_stream->fragment_run_count;
> ^
> ../../modules/stream_filter/hds/hds.c:774:28: attention : comparaison entre des expressions entières signée et non signée [-Wsign-compare]
> if( frun_entry == hds_stream->fragment_run_count - 1 )
> ^
> ../../modules/stream_filter/hds/hds.c:790:28: attention : comparaison entre des expressions entières signée et non signée [-Wsign-compare]
> if( frun_entry == hds_stream->fragment_run_count - 1 ||
> ^
> ../../modules/stream_filter/hds/hds.c:791:36: attention : comparaison entre des expressions entières signée et non signée [-Wsign-compare]
> ( chunk->timestamp >= hds_stream->fragment_runs[frun_entry].fragment_timestamp &&
> ^
> ../../modules/stream_filter/hds/hds.c:792:36: attention : comparaison entre des expressions entières signée et non signée [-Wsign-compare]
> chunk->timestamp < hds_stream->fragment_runs[frun_entry+1].fragment_timestamp )
> ^
> ../../modules/stream_filter/hds/hds.c:803:73: attention : comparaison entre des expressions entières signée et non signée [-Wsign-compare]
> if( hds_stream->fragment_runs[frun_entry].fragment_number_start <=
> ^
> ../../modules/stream_filter/hds/hds.c:805:25: attention : comparaison entre des expressions entières signée et non signée [-Wsign-compare]
> (frun_entry == hds_stream->fragment_run_count - 1 ||
> ^
> ../../modules/stream_filter/hds/hds.c:806:76: attention : comparaison entre des expressions entières signée et non signée [-Wsign-compare]
> hds_stream->fragment_runs[frun_entry+1].fragment_number_start > chunk->frag_num ) )
> ^
> ../../modules/stream_filter/hds/hds.c:815:20: attention : comparaison entre des expressions entières signée et non signée [-Wsign-compare]
> if( frun_entry == hds_stream->fragment_run_count )
> ^
> ../../modules/stream_filter/hds/hds.c:831:66: attention : comparaison entre des expressions entières signée et non signée [-Wsign-compare]
> hds_stream->segment_runs[srun_entry+1].first_segment > segment )
> ^
> ../../modules/stream_filter/hds/hds.c: In function ‘maintain_live_chunks’:
> ../../modules/stream_filter/hds/hds.c:895:18: attention : unused variable ‘next_chunk’ [-Wunused-variable]
> chunk_t* next_chunk = chunk->next;
> ^
> ../../modules/stream_filter/hds/hds.c:904:1: attention : « return » manquant dans une fonction devant retourner une valeur [-Wreturn-type]
> }
> ^
> ../../modules/stream_filter/hds/hds.c: In function ‘live_thread’:
> ../../modules/stream_filter/hds/hds.c:958:17: attention : pointer targets in passing argument 3 of ‘parse_BootstrapData’ differ in signedness [-Wpointer-sign]
> parse_BootstrapData( p_this, hds_stream,
> ^
> ../../modules/stream_filter/hds/hds.c:331:13: note: expected ‘char *’ but argument is of type ‘uint8_t *’
> static void parse_BootstrapData( vlc_object_t* p_this,
> ^
> ../../modules/stream_filter/hds/hds.c:958:17: attention : pointer targets in passing argument 4 of ‘parse_BootstrapData’ differ in signedness [-Wpointer-sign]
> parse_BootstrapData( p_this, hds_stream,
> ^
> ../../modules/stream_filter/hds/hds.c:331:13: note: expected ‘char *’ but argument is of type ‘uint8_t *’
> static void parse_BootstrapData( vlc_object_t* p_this,
> ^
> In file included from ../../include/vlc_common.h:417:0,
> from ../../modules/stream_filter/hds/hds.c:27:
> ../../include/vlc_threads.h:311:55: attention : signed and unsigned type in conditional expression [-Wsign-compare]
> (__builtin_constant_p(d) ? impossible_deadline(d) : d)
> ^
> ../../include/vlc_threads.h:318:24: note: in expansion of macro ‘check_deadline’
> #define mwait(d) mwait(check_deadline(d))
> ^
> ../../modules/stream_filter/hds/hds.c:969:9: note: in expansion of macro ‘mwait’
> mwait( last_dl_start_time + ( ((uint64_t)hds_stream->fragment_runs[hds_stream->fragment_run_count-1].fragment_duration) * 1000000ULL) / ((uint64_t)hds_stream->afrt_timescale) );
> ^
> ../../modules/stream_filter/hds/hds.c: In function ‘parse_Manifest’:
> ../../modules/stream_filter/hds/hds.c:1032:20: attention : passing argument 2 of ‘xml_ReaderNextNode’ from incompatible pointer type
> while( (type = xml_ReaderNextNode( vlc_reader, &node )) > 0 )
> ^
> In file included from ../../modules/stream_filter/hds/hds.c:30:0:
> ../../include/vlc_xml.h:85:19: note: expected ‘const char **’ but argument is of type ‘char **’
> static inline int xml_ReaderNextNode( xml_reader_t *reader, const char **pval )
> ^
> ../../modules/stream_filter/hds/hds.c:1071:13: attention : parenthèses suggérées autour de l'affectation utilisée comme valeur de vérité [-Wparentheses]
> while( attr_name = xml_ReaderNextAttr( vlc_reader, &attr_value ) )
> ^
> ../../modules/stream_filter/hds/hds.c:1092:13: attention : parenthèses suggérées autour de l'affectation utilisée comme valeur de vérité [-Wparentheses]
> while( attr_name = xml_ReaderNextAttr( vlc_reader, &attr_value ) )
> ^
> ../../modules/stream_filter/hds/hds.c:1127:41: attention : cast from function call of type ‘double’ to non-matching type ‘int’ [-Wbad-function-cast]
> sys->duration_seconds = (int)atof( node );
> ^
> ../../modules/stream_filter/hds/hds.c:1181:47: attention : passing argument 1 of ‘generate_new_chunk’ from incompatible pointer type
> new_stream->chunks_head = generate_new_chunk( s, 0, new_stream );
> ^
> ../../modules/stream_filter/hds/hds.c:733:17: note: expected ‘struct vlc_object_t *’ but argument is of type ‘struct stream_t *’
> static chunk_t* generate_new_chunk(
> ^
> ../../modules/stream_filter/hds/hds.c:1186:39: attention : passing argument 1 of ‘generate_new_chunk’ from incompatible pointer type
> chunk->next = generate_new_chunk( s, chunk, new_stream );
> ^
> ../../modules/stream_filter/hds/hds.c:733:17: note: expected ‘struct vlc_object_t *’ but argument is of type ‘struct stream_t *’
> static chunk_t* generate_new_chunk(
> ^
> ../../modules/stream_filter/hds/hds.c: In function ‘Read’:
> ../../modules/stream_filter/hds/hds.c:1489:26: attention : passing argument 1 of ‘read_chunk_data’ from incompatible pointer type
> int tmp_length = read_chunk_data( s, buffer_uint8, i_read, stream, &eof );
> ^
> ../../modules/stream_filter/hds/hds.c:1383:17: note: expected ‘struct vlc_object_t *’ but argument is of type ‘struct stream_t *’
> static unsigned read_chunk_data(
> ^
> ../../modules/stream_filter/hds/hds.c: In function ‘Control’:
> ../../modules/stream_filter/hds/hds.c:1532:19: attention : unused variable ‘p_sys’ [-Wunused-variable]
> stream_sys_t *p_sys = s->p_sys;
> ^
> ../../modules/stream_filter/hds/hds.c: In function ‘live_thread’:
> ../../modules/stream_filter/hds/hds.c:928:9: attention : ignoring return value of ‘asprintf’, declared with attribute warn_unused_result [-Wunused-result]
> asprintf( &abst_url, "%s/%s",
> ^
> ../../modules/stream_filter/hds/hds.c: In function ‘download_chunk’:
> ../../modules/stream_filter/hds/hds.c:608:5: attention : ignoring return value of ‘asprintf’, declared with attribute warn_unused_result [-Wunused-result]
> asprintf( &fragment_url, "%s/%s%sSeg%u-Frag%u",
> ^
> CCLD libhds_plugin.la
>
>
>
> Moreover, why do you need a hds.h ?
>
> With my kindest regards,
>
> --
> Jean-Baptiste Kempf
> http://www.jbkempf.com/ - +33 672 704 734
> Sent from my Electronic Device
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
--
With my kindest regards,
--
Jean-Baptiste Kempf
http://www.jbkempf.com/ - +33 672 704 734
Sent from my Electronic Device
More information about the vlc-devel
mailing list