Adding Webvtt in hls muxer
Hi I have attached the patch. Thanks Anshul Maheshwari
On 01/13/2015 04:19 PM, Anshul wrote:
Hi
I have attached the patch.
Thanks Anshul Maheshwari Another patch freeing memory leakage introduced by this patch.
-Anshul
On Wed, Jan 14, 2015 at 04:56:26PM +0530, Anshul wrote:
On 01/13/2015 04:19 PM, Anshul wrote:
Hi
I have attached the patch.
Thanks Anshul Maheshwari Another patch freeing memory leakage introduced by this patch.
-Anshul
From 6829d7013819418011dfba2b40657d3f921bcaee Mon Sep 17 00:00:00 2001 From: Anshul Maheshwari <anshul.ffmpeg@gmail.com> Date: Fri, 2 Jan 2015 13:18:11 +0530 Subject: [PATCH 1/2] Added webvtt in hls
Signed-off-by: Anshul Maheshwari <anshul.ffmpeg@gmail.com> --- libavformat/Makefile | 2 +- libavformat/hlsenc_vaibhav.c | 600 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 601 insertions(+), 1 deletion(-) create mode 100644 libavformat/hlsenc_vaibhav.c
diff --git a/libavformat/Makefile b/libavformat/Makefile index 7e4beac..431031d 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -177,7 +177,7 @@ OBJS-$(CONFIG_HDS_MUXER) += hdsenc.o OBJS-$(CONFIG_HEVC_DEMUXER) += hevcdec.o rawdec.o OBJS-$(CONFIG_HEVC_MUXER) += rawenc.o OBJS-$(CONFIG_HLS_DEMUXER) += hls.o
-OBJS-$(CONFIG_HLS_MUXER) += hlsenc.o +OBJS-$(CONFIG_HLS_MUXER) += hlsenc_vaibhav.o
??? [...] -- Clément B.
On 01/19/2015 08:11 PM, Clément Bœsch wrote:
On Wed, Jan 14, 2015 at 04:56:26PM +0530, Anshul wrote:
On 01/13/2015 04:19 PM, Anshul wrote:
Hi
I have attached the patch.
Thanks Anshul Maheshwari Another patch freeing memory leakage introduced by this patch.
-Anshul From 6829d7013819418011dfba2b40657d3f921bcaee Mon Sep 17 00:00:00 2001 From: Anshul Maheshwari <anshul.ffmpeg@gmail.com> Date: Fri, 2 Jan 2015 13:18:11 +0530 Subject: [PATCH 1/2] Added webvtt in hls
Signed-off-by: Anshul Maheshwari <anshul.ffmpeg@gmail.com> --- libavformat/Makefile | 2 +- libavformat/hlsenc_vaibhav.c | 600 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 601 insertions(+), 1 deletion(-) create mode 100644 libavformat/hlsenc_vaibhav.c
diff --git a/libavformat/Makefile b/libavformat/Makefile index 7e4beac..431031d 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -177,7 +177,7 @@ OBJS-$(CONFIG_HDS_MUXER) += hdsenc.o OBJS-$(CONFIG_HEVC_DEMUXER) += hevcdec.o rawdec.o OBJS-$(CONFIG_HEVC_MUXER) += rawenc.o OBJS-$(CONFIG_HLS_DEMUXER) += hls.o -OBJS-$(CONFIG_HLS_MUXER) += hlsenc.o +OBJS-$(CONFIG_HLS_MUXER) += hlsenc_vaibhav.o ???
[...]
Sorry for that.
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
attached another cleaned patch. -Anshul
On 2/15/15 5:44 AM, Anshul wrote:
attached another cleaned patch.
-Anshul
Not sure if I should be posting here, privately, or do the user list since it is an unaccepted patch... This patch applies cleanly to ffmpeg git of that day, and with minor adjustment to current git, but either crashes the same for me right away. Here is the back trace from gdb: Program received signal SIGSEGV, Segmentation fault. __GI___libc_realloc (oldmem=0x70, bytes=8) at malloc.c:2977 2977 malloc.c: No such file or directory. (gdb) bt #0 __GI___libc_realloc (oldmem=0x70, bytes=8) at malloc.c:2977 #1 0x00007ffff7609b99 in avformat_new_stream (s=s@entry=0xe2dbc0, c=c@entry=0x0) at libavformat/utils.c:3655 #2 0x00007ffff75451c4 in hls_mux_init (s=0x6787c0) at libavformat/hlsenc.c:194 #3 hls_write_header (s=0x6787c0) at libavformat/hlsenc.c:490 #4 0x00007ffff75999ec in avformat_write_header (s=s@entry=0x6787c0, options=0x6a9948) at libavformat/mux.c:406 #5 0x0000000000424c00 in transcode_init () at ffmpeg.c:3096 #6 0x0000000000407581 in transcode () at ffmpeg.c:3815 #7 main (argc=13, argv=0x7fffffffe5a8) at ffmpeg.c:4022 The command (I've tried all sorts of combinations. If I don't provide a subtitle stream, it does not crash. Otherwise it does. Unpatched can generate a webvtt from the subtitle stream without crashing.) ffmpeg -loglevel debug -f lavfi -i movie=out.ts\[out0+subcc\] -f hls -hls_segment_filename /var/www/html/stream/kota/v.low.%d.ts -hls_subtitle_path /var/www/html/stream/kota/ -y /var/www/html/stream/kota/v.low.m3u8 And uncut output: ffmpeg version N-69996-gac7128a Copyright (c) 2000-2015 the FFmpeg developers built with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1) configuration: --enable-shared --enable-gpl --enable-nonfree --enable-libxvid --enable-libx264 --enable-libmp3lame --enable-libvorbis --enable-libfaac --enable-libopenjpeg --enable-librtmp --enable-libx265 --disable-stripping libavutil 54. 19.100 / 54. 19.100 libavcodec 56. 25.100 / 56. 25.100 libavformat 56. 23.100 / 56. 23.100 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 11.100 / 5. 11.100 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 1.100 / 1. 1.100 libpostproc 53. 3.100 / 53. 3.100 Splitting the commandline. Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument 'debug'. Reading option '-f' ... matched as option 'f' (force format) with argument 'lavfi'. Reading option '-i' ... matched as input file with argument 'movie=out.ts[out0+subcc]'. Reading option '-f' ... matched as option 'f' (force format) with argument 'hls'. Reading option '-hls_segment_filename' ... matched as AVOption 'hls_segment_filename' with argument '/var/www/html/stream/kota/v.low.%d.ts'. Reading option '-hls_subtitle_path' ... matched as AVOption 'hls_subtitle_path' with argument '/var/www/html/stream/kota/'. Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'. Reading option '/var/www/html/stream/kota/v.low.m3u8' ... matched as output file. Finished splitting the commandline. Parsing a group of options: global . Applying option loglevel (set logging level) with argument debug. Applying option y (overwrite output files) with argument 1. Successfully parsed a group of options. Parsing a group of options: input file movie=out.ts[out0+subcc]. Applying option f (force format) with argument lavfi. Successfully parsed a group of options. Opening an input file: movie=out.ts[out0+subcc]. detected 8 logical cores [Parsed_movie_0 @ 0x24a8bc0] Setting 'filename' to value 'out.ts' [mpegts @ 0x24aac60] Format mpegts probed with size=2048 and score=100 [mpegts @ 0x24aac60] stream=0 stream_type=2 pid=100 prog_reg_desc= [mpegts @ 0x24aac60] stream=1 stream_type=81 pid=101 prog_reg_desc= [mpegts @ 0x24aac60] Before avformat_find_stream_info() pos: 0 bytes read:32768 seeks:0 [mpegts @ 0x24aac60] All programs have pmt, headers found [mpegts @ 0x24aac60] All info found rfps: 60.000000 0.000031 Last message repeated 1 times rfps: 120.000000 0.000126 Last message repeated 1 times rfps: 240.000000 0.000504 Last message repeated 1 times rfps: 59.940060 0.000000 Last message repeated 1 times [mpegts @ 0x24aac60] After avformat_find_stream_info() pos: 0 bytes read:905360 seeks:2 frames:53 [Parsed_movie_0 @ 0x24a8bc0] seek_point:0 format_name:(null) file_name:out.ts stream_index:-1 [AVFilterGraph @ 0x24a8a20] query_formats: 2 queried, 1 merged, 0 already done, 0 delayed [lavfi @ 0x24a9320] All info found rfps: 60.000000 0.000032 Last message repeated 1 times rfps: 120.000000 0.000127 Last message repeated 1 times rfps: 240.000000 0.000509 Last message repeated 1 times rfps: 59.940060 0.000000 Last message repeated 1 times [lavfi @ 0x24a9320] Setting avg frame rate based on r frame rate Input #0, lavfi, from 'movie=out.ts[out0+subcc]': Duration: N/A, start: 2.117867, bitrate: N/A Stream #0:0, 21, 1/90000: Video: rawvideo (I420 / 0x30323449), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1/90000, 59.94 fps, 59.94 tbr, 90k tbn, 90k tbc Stream #0:1, 20, 1/90000: Subtitle: eia_608 Successfully opened the file. Parsing a group of options: output file /var/www/html/stream/kota/v.low.m3u8. Applying option f (force format) with argument hls. Successfully parsed a group of options. Opening an output file: /var/www/html/stream/kota/v.low.m3u8. Successfully opened the file. [graph 0 input from stream 0:0 @ 0x2c86d20] Setting 'video_size' to value '1280x720' [graph 0 input from stream 0:0 @ 0x2c86d20] Setting 'pix_fmt' to value '0' [graph 0 input from stream 0:0 @ 0x2c86d20] Setting 'time_base' to value '1/90000' [graph 0 input from stream 0:0 @ 0x2c86d20] Setting 'pixel_aspect' to value '1/1' [graph 0 input from stream 0:0 @ 0x2c86d20] Setting 'sws_param' to value 'flags=2' [graph 0 input from stream 0:0 @ 0x2c86d20] Setting 'frame_rate' to value '60000/1001' [graph 0 input from stream 0:0 @ 0x2c86d20] w:1280 h:720 pixfmt:yuv420p tb:1/90000 fr:60000/1001 sar:1/1 sws_param:flags=2 [format @ 0x249e780] compat: called with args=[yuv420p|yuvj420p|yuv422p|yuvj422p|yuv444p|yuvj444p|nv12|nv16] [format @ 0x249e780] Setting 'pix_fmts' to value 'yuv420p|yuvj420p|yuv422p|yuvj422p|yuv444p|yuvj444p|nv12|nv16' [AVFilterGraph @ 0x2c860e0] query_formats: 4 queried, 3 merged, 0 already done, 0 delayed [libx264 @ 0x2507880] using mv_range_thread = 24 [libx264 @ 0x2507880] using SAR=1/1 [libx264 @ 0x2507880] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX [libx264 @ 0x2507880] profile High, level 3.2 *** Error in `ffmpeg': realloc(): invalid pointer: 0x00007f7b6e2bfba0 *** Aborted (core dumped) Deron
On Sat, Feb 21, 2015 at 08:05:40AM -0700, Deron wrote:
On 2/15/15 5:44 AM, Anshul wrote:
attached another cleaned patch.
-Anshul
Not sure if I should be posting here, privately, or do the user list since it is an unaccepted patch... This patch applies cleanly to
here is fine, knowing of potential problems with patches before they are applied is usefull
ffmpeg git of that day, and with minor adjustment to current git, but either crashes the same for me right away. Here is the back trace from gdb:
Program received signal SIGSEGV, Segmentation fault.
[...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Many things microsoft did are stupid, but not doing something just because microsoft did it is even more stupid. If everything ms did were stupid they would be bankrupt already.
On 2/21/15 8:51 AM, Michael Niedermayer wrote:
On Sat, Feb 21, 2015 at 08:05:40AM -0700, Deron wrote:
On 2/15/15 5:44 AM, Anshul wrote:
attached another cleaned patch.
-Anshul Not sure if I should be posting here, privately, or do the user list since it is an unaccepted patch... This patch applies cleanly to here is fine, knowing of potential problems with patches before they are applied is usefull
Do you have a link to a source file that works for you that I can test against, to see if it is my source material? I can upload mine, but it is huge (19mbs tuner capture). Thanks, Deron
ffmpeg git of that day, and with minor adjustment to current git, but either crashes the same for me right away. Here is the back trace from gdb:
Program received signal SIGSEGV, Segmentation fault. [...]
On 2/21/15 8:05 AM, Deron wrote:
On 2/15/15 5:44 AM, Anshul wrote:
attached another cleaned patch.
-Anshul
Not sure if I should be posting here, privately, or do the user list since it is an unaccepted patch... This patch applies cleanly to ffmpeg git of that day, and with minor adjustment to current git, but either crashes the same for me right away. Here is the back trace from gdb:
Program received signal SIGSEGV, Segmentation fault. __GI___libc_realloc (oldmem=0x70, bytes=8) at malloc.c:2977 2977 malloc.c: No such file or directory. (gdb) bt #0 __GI___libc_realloc (oldmem=0x70, bytes=8) at malloc.c:2977 #1 0x00007ffff7609b99 in avformat_new_stream (s=s@entry=0xe2dbc0, c=c@entry=0x0) at libavformat/utils.c:3655 #2 0x00007ffff75451c4 in hls_mux_init (s=0x6787c0) at libavformat/hlsenc.c:194 #3 hls_write_header (s=0x6787c0) at libavformat/hlsenc.c:490 #4 0x00007ffff75999ec in avformat_write_header (s=s@entry=0x6787c0, options=0x6a9948) at libavformat/mux.c:406 #5 0x0000000000424c00 in transcode_init () at ffmpeg.c:3096 #6 0x0000000000407581 in transcode () at ffmpeg.c:3815 #7 main (argc=13, argv=0x7fffffffe5a8) at ffmpeg.c:4022
The command (I've tried all sorts of combinations. If I don't provide a subtitle stream, it does not crash. Otherwise it does. Unpatched can generate a webvtt from the subtitle stream without crashing.)
ffmpeg -loglevel debug -f lavfi -i movie=out.ts\[out0+subcc\] -f hls -hls_segment_filename /var/www/html/stream/kota/v.low.%d.ts -hls_subtitle_path /var/www/html/stream/kota/ -y /var/www/html/stream/kota/v.low.m3u8
I did find the problem. The patch does not properly initialize hls->vtt_oformat (etc) if you provide the "-hls_segment_filename" parameter as I have done. Deron
On 02/25/2015 10:04 PM, Deron wrote:
On 2/21/15 8:05 AM, Deron wrote:
On 2/15/15 5:44 AM, Anshul wrote:
attached another cleaned patch.
-Anshul
Not sure if I should be posting here, privately, or do the user list since it is an unaccepted patch... This patch applies cleanly to ffmpeg git of that day, and with minor adjustment to current git, but either crashes the same for me right away. Here is the back trace from gdb:
Program received signal SIGSEGV, Segmentation fault. __GI___libc_realloc (oldmem=0x70, bytes=8) at malloc.c:2977 2977 malloc.c: No such file or directory. (gdb) bt #0 __GI___libc_realloc (oldmem=0x70, bytes=8) at malloc.c:2977 #1 0x00007ffff7609b99 in avformat_new_stream (s=s@entry=0xe2dbc0, c=c@entry=0x0) at libavformat/utils.c:3655 #2 0x00007ffff75451c4 in hls_mux_init (s=0x6787c0) at libavformat/hlsenc.c:194 #3 hls_write_header (s=0x6787c0) at libavformat/hlsenc.c:490 #4 0x00007ffff75999ec in avformat_write_header (s=s@entry=0x6787c0, options=0x6a9948) at libavformat/mux.c:406 #5 0x0000000000424c00 in transcode_init () at ffmpeg.c:3096 #6 0x0000000000407581 in transcode () at ffmpeg.c:3815 #7 main (argc=13, argv=0x7fffffffe5a8) at ffmpeg.c:4022
The command (I've tried all sorts of combinations. If I don't provide a subtitle stream, it does not crash. Otherwise it does. Unpatched can generate a webvtt from the subtitle stream without crashing.)
ffmpeg -loglevel debug -f lavfi -i movie=out.ts\[out0+subcc\] -f hls -hls_segment_filename /var/www/html/stream/kota/v.low.%d.ts -hls_subtitle_path /var/www/html/stream/kota/ -y /var/www/html/stream/kota/v.low.m3u8
I did find the problem. The patch does not properly initialize hls->vtt_oformat (etc) if you provide the "-hls_segment_filename" parameter as I have done.
Deron
I have attached new patch with correctly initializing the webvtt, can you please check this patch again. -Anshul
On 2/26/15 4:26 AM, Anshul wrote:
On 02/25/2015 10:04 PM, Deron wrote:
On 2/21/15 8:05 AM, Deron wrote:
On 2/15/15 5:44 AM, Anshul wrote:
attached another cleaned patch.
-Anshul
Not sure if I should be posting here, privately, or do the user list since it is an unaccepted patch... This patch applies cleanly to ffmpeg git of that day, and with minor adjustment to current git, but either crashes the same for me right away. Here is the back trace from gdb:
Program received signal SIGSEGV, Segmentation fault. __GI___libc_realloc (oldmem=0x70, bytes=8) at malloc.c:2977 2977 malloc.c: No such file or directory. (gdb) bt #0 __GI___libc_realloc (oldmem=0x70, bytes=8) at malloc.c:2977 #1 0x00007ffff7609b99 in avformat_new_stream (s=s@entry=0xe2dbc0, c=c@entry=0x0) at libavformat/utils.c:3655 #2 0x00007ffff75451c4 in hls_mux_init (s=0x6787c0) at libavformat/hlsenc.c:194 #3 hls_write_header (s=0x6787c0) at libavformat/hlsenc.c:490 #4 0x00007ffff75999ec in avformat_write_header (s=s@entry=0x6787c0, options=0x6a9948) at libavformat/mux.c:406 #5 0x0000000000424c00 in transcode_init () at ffmpeg.c:3096 #6 0x0000000000407581 in transcode () at ffmpeg.c:3815 #7 main (argc=13, argv=0x7fffffffe5a8) at ffmpeg.c:4022
The command (I've tried all sorts of combinations. If I don't provide a subtitle stream, it does not crash. Otherwise it does. Unpatched can generate a webvtt from the subtitle stream without crashing.)
ffmpeg -loglevel debug -f lavfi -i movie=out.ts\[out0+subcc\] -f hls -hls_segment_filename /var/www/html/stream/kota/v.low.%d.ts -hls_subtitle_path /var/www/html/stream/kota/ -y /var/www/html/stream/kota/v.low.m3u8
I did find the problem. The patch does not properly initialize hls->vtt_oformat (etc) if you provide the "-hls_segment_filename" parameter as I have done.
Deron
I have attached new patch with correctly initializing the webvtt, can you please check this patch again.
-Anshul
Besides needing some minor changes to apply to git head, this works. I'm not sure that the CC is 100% correct, but I have not sat down and compared to any other output yet. Certainly close, it just seems a little off and I can't put my finger on it. Not a timing issue, just seems jumpy and hard to read. Could just be the Apple player, or could be that the segmenter is not duplicating items that span multiple segments. I do have a couple requests, but once this is accepted I think I can make the patch. One is the support m3u8 rename like the mpegts segments do, and the other is to support WebVTT segmenting on a subtitle only stream. I'd like to see/submit an audio only stream segmenter patch as well, but that is well outside this patch :-) Either way, thanks! Deron
On 03/12/2015 08:03 PM, Deron wrote:
On 2/26/15 4:26 AM, Anshul wrote:
On 02/25/2015 10:04 PM, Deron wrote:
On 2/21/15 8:05 AM, Deron wrote:
On 2/15/15 5:44 AM, Anshul wrote:
attached another cleaned patch.
-Anshul
Not sure if I should be posting here, privately, or do the user list since it is an unaccepted patch... This patch applies cleanly to ffmpeg git of that day, and with minor adjustment to current git, but either crashes the same for me right away. Here is the back trace from gdb:
Program received signal SIGSEGV, Segmentation fault. __GI___libc_realloc (oldmem=0x70, bytes=8) at malloc.c:2977 2977 malloc.c: No such file or directory. (gdb) bt #0 __GI___libc_realloc (oldmem=0x70, bytes=8) at malloc.c:2977 #1 0x00007ffff7609b99 in avformat_new_stream (s=s@entry=0xe2dbc0, c=c@entry=0x0) at libavformat/utils.c:3655 #2 0x00007ffff75451c4 in hls_mux_init (s=0x6787c0) at libavformat/hlsenc.c:194 #3 hls_write_header (s=0x6787c0) at libavformat/hlsenc.c:490 #4 0x00007ffff75999ec in avformat_write_header (s=s@entry=0x6787c0, options=0x6a9948) at libavformat/mux.c:406 #5 0x0000000000424c00 in transcode_init () at ffmpeg.c:3096 #6 0x0000000000407581 in transcode () at ffmpeg.c:3815 #7 main (argc=13, argv=0x7fffffffe5a8) at ffmpeg.c:4022
The command (I've tried all sorts of combinations. If I don't provide a subtitle stream, it does not crash. Otherwise it does. Unpatched can generate a webvtt from the subtitle stream without crashing.)
ffmpeg -loglevel debug -f lavfi -i movie=out.ts\[out0+subcc\] -f hls -hls_segment_filename /var/www/html/stream/kota/v.low.%d.ts -hls_subtitle_path /var/www/html/stream/kota/ -y /var/www/html/stream/kota/v.low.m3u8
I did find the problem. The patch does not properly initialize hls->vtt_oformat (etc) if you provide the "-hls_segment_filename" parameter as I have done.
Deron
I have attached new patch with correctly initializing the webvtt, can you please check this patch again.
-Anshul
Besides needing some minor changes to apply to git head, this works. I'm not sure that the CC is 100% correct, but I have not sat down and compared to any other output yet. Certainly close, it just seems a little off and I can't put my finger on it. Not a timing issue, just seems jumpy and hard to read. Could just be the Apple player, or could be that the segmenter is not duplicating items that span multiple segments.
I do have a couple requests, but once this is accepted I think I can make the patch. One is the support m3u8 rename like the mpegts segments do, and the other is to support WebVTT segmenting on a subtitle only stream. I'd like to see/submit an audio only stream segmenter patch as well, but that is well outside this patch :-)
Either way, thanks!
Deron _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel Hello,
This patch is working in my system from months. I have also tested most of the option's of hls with this implementation. I have updated this to most recent git version. Its a big patch, it take time to again merge with latest git version. so i am expecting it to merge it with master. -Please comment Anshul
Hello New patch to remove merge conflicts. -Anshul
On Thu, Jun 04, 2015 at 01:33:35PM +0530, Anshul wrote:
Hello
New patch to remove merge conflicts.
-Anshul
hlsenc.c | 202 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 192 insertions(+), 10 deletions(-) 3bf30e70251b47f644cc999e23c0b237e9952c08 0001-Add-WebVtt-support-in-hls.patch From 4433686fdc62f9aebe23937b51b641febacfa2fe Mon Sep 17 00:00:00 2001 From: Anshul Maheshwari <er.anshul.maheshwari@gmail.com> Date: Thu, 4 Jun 2015 13:25:52 +0530 Subject: [PATCH] Add WebVtt support in hls
Signed-off-by: Anshul Maheshwari <er.anshul.maheshwari@gmail.com>
applied thanks [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Let us carefully observe those good qualities wherein our enemies excel us and endeavor to excel them, by avoiding what is faulty, and imitating what is excellent in them. -- Plutarch
participants (5)
-
Anshul -
Clément Bœsch -
Deron -
Michael Niedermayer -
Michael Niedermayer