Mercurial > libavformat.hg
annotate flvenc.c @ 3754:8d267b43eaba libavformat
Move malloc() down until after all initializations, so that the resource is
only allocated if initialization worked. This means that on failure, we
don't have to deallocate it.
author | rbultje |
---|---|
date | Sat, 23 Aug 2008 18:46:30 +0000 |
parents | 7a0230981402 |
children | f062deeedb8d |
rev | line source |
---|---|
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
1 /* |
1415
3b00fb8ef8e4
replace coder/decoder file description in libavformat by muxer/demuxer
aurel
parents:
1358
diff
changeset
|
2 * FLV muxer |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
3 * Copyright (c) 2003 The FFmpeg Project. |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
4 * |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1233
diff
changeset
|
5 * This file is part of FFmpeg. |
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1233
diff
changeset
|
6 * |
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1233
diff
changeset
|
7 * FFmpeg is free software; you can redistribute it and/or |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
8 * modify it under the terms of the GNU Lesser General Public |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
9 * License as published by the Free Software Foundation; either |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1233
diff
changeset
|
10 * version 2.1 of the License, or (at your option) any later version. |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
11 * |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1233
diff
changeset
|
12 * FFmpeg is distributed in the hope that it will be useful, |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
15 * Lesser General Public License for more details. |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
16 * |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
17 * You should have received a copy of the GNU Lesser General Public |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1233
diff
changeset
|
18 * License along with FFmpeg; if not, write to the Free Software |
896
edbe5c3717f9
Update licensing information: The FSF changed postal address.
diego
parents:
887
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
20 */ |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
21 #include "avformat.h" |
1553
504ceaa50e31
Defines various common FLV format values between the FLV muxer and demuxer
aurel
parents:
1547
diff
changeset
|
22 #include "flv.h" |
1606
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
23 #include "riff.h" |
3363 | 24 #include "avc.h" |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
25 |
445 | 26 #undef NDEBUG |
27 #include <assert.h> | |
28 | |
1677
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1622
diff
changeset
|
29 static const AVCodecTag flv_video_codec_ids[] = { |
1606
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
30 {CODEC_ID_FLV1, FLV_CODECID_H263 }, |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
31 {CODEC_ID_FLASHSV, FLV_CODECID_SCREEN}, |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
32 {CODEC_ID_VP6F, FLV_CODECID_VP6 }, |
1615 | 33 {CODEC_ID_VP6, FLV_CODECID_VP6 }, |
3363 | 34 {CODEC_ID_H264, FLV_CODECID_H264 }, |
1606
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
35 {CODEC_ID_NONE, 0} |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
36 }; |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
37 |
1677
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1622
diff
changeset
|
38 static const AVCodecTag flv_audio_codec_ids[] = { |
1606
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
39 {CODEC_ID_MP3, FLV_CODECID_MP3 >> FLV_AUDIO_CODECID_OFFSET}, |
3061
8ae0431d7f43
flv/swf do not have a big endian codec id, they only support
michael
parents:
2771
diff
changeset
|
40 {CODEC_ID_PCM_S8, FLV_CODECID_PCM >> FLV_AUDIO_CODECID_OFFSET}, |
8ae0431d7f43
flv/swf do not have a big endian codec id, they only support
michael
parents:
2771
diff
changeset
|
41 {CODEC_ID_PCM_S16BE, FLV_CODECID_PCM >> FLV_AUDIO_CODECID_OFFSET}, |
1606
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
42 {CODEC_ID_PCM_S16LE, FLV_CODECID_PCM_LE >> FLV_AUDIO_CODECID_OFFSET}, |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
43 {CODEC_ID_ADPCM_SWF, FLV_CODECID_ADPCM >> FLV_AUDIO_CODECID_OFFSET}, |
3363 | 44 {CODEC_ID_AAC, FLV_CODECID_AAC >> FLV_AUDIO_CODECID_OFFSET}, |
3273 | 45 {CODEC_ID_NELLYMOSER, FLV_CODECID_NELLYMOSER >> FLV_AUDIO_CODECID_OFFSET}, |
1606
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
46 {CODEC_ID_NONE, 0} |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
47 }; |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
48 |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
49 typedef struct FLVContext { |
446 | 50 int reserved; |
1233
99a34915d15a
always write duration and file size, fix seeking, progress bar is now active
bcoudurier
parents:
1179
diff
changeset
|
51 offset_t duration_offset; |
99a34915d15a
always write duration and file size, fix seeking, progress bar is now active
bcoudurier
parents:
1179
diff
changeset
|
52 offset_t filesize_offset; |
99a34915d15a
always write duration and file size, fix seeking, progress bar is now active
bcoudurier
parents:
1179
diff
changeset
|
53 int64_t duration; |
3363 | 54 int delay; ///< first dts delay for AVC |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
55 } FLVContext; |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
56 |
490 | 57 static int get_audio_flags(AVCodecContext *enc){ |
1553
504ceaa50e31
Defines various common FLV format values between the FLV muxer and demuxer
aurel
parents:
1547
diff
changeset
|
58 int flags = (enc->bits_per_sample == 16) ? FLV_SAMPLESSIZE_16BIT : FLV_SAMPLESSIZE_8BIT; |
490 | 59 |
3363 | 60 if (enc->codec_id == CODEC_ID_AAC) // specs force these parameters |
61 return FLV_CODECID_AAC | FLV_SAMPLERATE_44100HZ | FLV_SAMPLESSIZE_16BIT | FLV_STEREO; | |
62 else { | |
490 | 63 switch (enc->sample_rate) { |
64 case 44100: | |
1553
504ceaa50e31
Defines various common FLV format values between the FLV muxer and demuxer
aurel
parents:
1547
diff
changeset
|
65 flags |= FLV_SAMPLERATE_44100HZ; |
490 | 66 break; |
67 case 22050: | |
1553
504ceaa50e31
Defines various common FLV format values between the FLV muxer and demuxer
aurel
parents:
1547
diff
changeset
|
68 flags |= FLV_SAMPLERATE_22050HZ; |
490 | 69 break; |
70 case 11025: | |
1553
504ceaa50e31
Defines various common FLV format values between the FLV muxer and demuxer
aurel
parents:
1547
diff
changeset
|
71 flags |= FLV_SAMPLERATE_11025HZ; |
490 | 72 break; |
73 case 8000: //nellymoser only | |
74 case 5512: //not mp3 | |
2590 | 75 if(enc->codec_id != CODEC_ID_MP3){ |
2591 | 76 flags |= FLV_SAMPLERATE_SPECIAL; |
77 break; | |
2590 | 78 } |
490 | 79 default: |
2164 | 80 av_log(enc, AV_LOG_ERROR, "flv does not support that sample rate, choose from (44100, 22050, 11025).\n"); |
490 | 81 return -1; |
82 } | |
3363 | 83 } |
490 | 84 |
85 if (enc->channels > 1) { | |
1553
504ceaa50e31
Defines various common FLV format values between the FLV muxer and demuxer
aurel
parents:
1547
diff
changeset
|
86 flags |= FLV_STEREO; |
490 | 87 } |
885 | 88 |
490 | 89 switch(enc->codec_id){ |
90 case CODEC_ID_MP3: | |
1553
504ceaa50e31
Defines various common FLV format values between the FLV muxer and demuxer
aurel
parents:
1547
diff
changeset
|
91 flags |= FLV_CODECID_MP3 | FLV_SAMPLESSIZE_16BIT; |
490 | 92 break; |
679 | 93 case CODEC_ID_PCM_S8: |
3061
8ae0431d7f43
flv/swf do not have a big endian codec id, they only support
michael
parents:
2771
diff
changeset
|
94 flags |= FLV_CODECID_PCM | FLV_SAMPLESSIZE_8BIT; |
887 | 95 break; |
679 | 96 case CODEC_ID_PCM_S16BE: |
3061
8ae0431d7f43
flv/swf do not have a big endian codec id, they only support
michael
parents:
2771
diff
changeset
|
97 flags |= FLV_CODECID_PCM | FLV_SAMPLESSIZE_16BIT; |
887 | 98 break; |
679 | 99 case CODEC_ID_PCM_S16LE: |
1553
504ceaa50e31
Defines various common FLV format values between the FLV muxer and demuxer
aurel
parents:
1547
diff
changeset
|
100 flags |= FLV_CODECID_PCM_LE | FLV_SAMPLESSIZE_16BIT; |
887 | 101 break; |
872 | 102 case CODEC_ID_ADPCM_SWF: |
1839 | 103 flags |= FLV_CODECID_ADPCM | FLV_SAMPLESSIZE_16BIT; |
887 | 104 break; |
3273 | 105 case CODEC_ID_NELLYMOSER: |
106 flags |= FLV_CODECID_NELLYMOSER | FLV_SAMPLESSIZE_16BIT; | |
107 break; | |
490 | 108 case 0: |
109 flags |= enc->codec_tag<<4; | |
110 break; | |
111 default: | |
822 | 112 av_log(enc, AV_LOG_ERROR, "codec not compatible with flv\n"); |
490 | 113 return -1; |
114 } | |
885 | 115 |
490 | 116 return flags; |
117 } | |
118 | |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
119 static void put_amf_string(ByteIOContext *pb, const char *str) |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
120 { |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
121 size_t len = strlen(str); |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
122 put_be16(pb, len); |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
123 put_buffer(pb, str, len); |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
124 } |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
125 |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
126 static void put_amf_double(ByteIOContext *pb, double d) |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
127 { |
1553
504ceaa50e31
Defines various common FLV format values between the FLV muxer and demuxer
aurel
parents:
1547
diff
changeset
|
128 put_byte(pb, AMF_DATA_TYPE_NUMBER); |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
129 put_be64(pb, av_dbl2int(d)); |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
130 } |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
131 |
1606
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
132 static void put_amf_bool(ByteIOContext *pb, int b) { |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
133 put_byte(pb, AMF_DATA_TYPE_BOOL); |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
134 put_byte(pb, !!b); |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
135 } |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
136 |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
137 static int flv_write_header(AVFormatContext *s) |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
138 { |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2756
diff
changeset
|
139 ByteIOContext *pb = s->pb; |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
140 FLVContext *flv = s->priv_data; |
3338 | 141 AVCodecContext *audio_enc = NULL, *video_enc = NULL; |
142 int i; | |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
143 double framerate = 0.0; |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
144 int metadata_size_pos, data_size; |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
145 |
446 | 146 for(i=0; i<s->nb_streams; i++){ |
820
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
759
diff
changeset
|
147 AVCodecContext *enc = s->streams[i]->codec; |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
148 if (enc->codec_type == CODEC_TYPE_VIDEO) { |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
149 if (s->streams[i]->r_frame_rate.den && s->streams[i]->r_frame_rate.num) { |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
150 framerate = av_q2d(s->streams[i]->r_frame_rate); |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
151 } else { |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
152 framerate = 1/av_q2d(s->streams[i]->codec->time_base); |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
153 } |
3338 | 154 video_enc = enc; |
155 if(enc->codec_tag == 0) { | |
1606
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
156 av_log(enc, AV_LOG_ERROR, "video codec not compatible with flv\n"); |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
157 return -1; |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
158 } |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
159 } else { |
3338 | 160 audio_enc = enc; |
1558
24f6e902d77a
set flags correctly in write header instead of seeking back and fixing it in write_trailer()
michael
parents:
1553
diff
changeset
|
161 if(get_audio_flags(enc)<0) |
24f6e902d77a
set flags correctly in write header instead of seeking back and fixing it in write_trailer()
michael
parents:
1553
diff
changeset
|
162 return -1; |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
163 } |
3250 | 164 av_set_pts_info(s->streams[i], 32, 1, 1000); /* 32 bit pts in ms */ |
1558
24f6e902d77a
set flags correctly in write header instead of seeking back and fixing it in write_trailer()
michael
parents:
1553
diff
changeset
|
165 } |
24f6e902d77a
set flags correctly in write header instead of seeking back and fixing it in write_trailer()
michael
parents:
1553
diff
changeset
|
166 put_tag(pb,"FLV"); |
24f6e902d77a
set flags correctly in write header instead of seeking back and fixing it in write_trailer()
michael
parents:
1553
diff
changeset
|
167 put_byte(pb,1); |
3338 | 168 put_byte(pb, FLV_HEADER_FLAG_HASAUDIO * !!audio_enc |
169 + FLV_HEADER_FLAG_HASVIDEO * !!video_enc); | |
1558
24f6e902d77a
set flags correctly in write header instead of seeking back and fixing it in write_trailer()
michael
parents:
1553
diff
changeset
|
170 put_be32(pb,9); |
24f6e902d77a
set flags correctly in write header instead of seeking back and fixing it in write_trailer()
michael
parents:
1553
diff
changeset
|
171 put_be32(pb,0); |
24f6e902d77a
set flags correctly in write header instead of seeking back and fixing it in write_trailer()
michael
parents:
1553
diff
changeset
|
172 |
24f6e902d77a
set flags correctly in write header instead of seeking back and fixing it in write_trailer()
michael
parents:
1553
diff
changeset
|
173 for(i=0; i<s->nb_streams; i++){ |
24f6e902d77a
set flags correctly in write header instead of seeking back and fixing it in write_trailer()
michael
parents:
1553
diff
changeset
|
174 if(s->streams[i]->codec->codec_tag == 5){ |
446 | 175 put_byte(pb,8); // message type |
176 put_be24(pb,0); // include flags | |
177 put_be24(pb,0); // time stamp | |
178 put_be32(pb,0); // reserved | |
179 put_be32(pb,11); // size | |
180 flv->reserved=5; | |
181 } | |
182 } | |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
183 |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
184 /* write meta_tag */ |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
185 put_byte(pb, 18); // tag type META |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
186 metadata_size_pos= url_ftell(pb); |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
187 put_be24(pb, 0); // size of data part (sum of all parts below) |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
188 put_be24(pb, 0); // time stamp |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
189 put_be32(pb, 0); // reserved |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
190 |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
191 /* now data of data_size size */ |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
192 |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
193 /* first event name as a string */ |
1553
504ceaa50e31
Defines various common FLV format values between the FLV muxer and demuxer
aurel
parents:
1547
diff
changeset
|
194 put_byte(pb, AMF_DATA_TYPE_STRING); |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
195 put_amf_string(pb, "onMetaData"); // 12 bytes |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
196 |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
197 /* mixed array (hash) with size and string/type/data tuples */ |
1553
504ceaa50e31
Defines various common FLV format values between the FLV muxer and demuxer
aurel
parents:
1547
diff
changeset
|
198 put_byte(pb, AMF_DATA_TYPE_MIXEDARRAY); |
3338 | 199 put_be32(pb, 5*!!video_enc + 4*!!audio_enc + 2); // +2 for duration and file size |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
200 |
1233
99a34915d15a
always write duration and file size, fix seeking, progress bar is now active
bcoudurier
parents:
1179
diff
changeset
|
201 put_amf_string(pb, "duration"); |
99a34915d15a
always write duration and file size, fix seeking, progress bar is now active
bcoudurier
parents:
1179
diff
changeset
|
202 flv->duration_offset= url_ftell(pb); |
99a34915d15a
always write duration and file size, fix seeking, progress bar is now active
bcoudurier
parents:
1179
diff
changeset
|
203 put_amf_double(pb, 0); // delayed write |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
204 |
3338 | 205 if(video_enc){ |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
206 put_amf_string(pb, "width"); |
3338 | 207 put_amf_double(pb, video_enc->width); |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
208 |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
209 put_amf_string(pb, "height"); |
3338 | 210 put_amf_double(pb, video_enc->height); |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
211 |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
212 put_amf_string(pb, "videodatarate"); |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
213 put_amf_double(pb, s->bit_rate / 1024.0); |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
214 |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
215 put_amf_string(pb, "framerate"); |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
216 put_amf_double(pb, framerate); |
1606
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
217 |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
218 put_amf_string(pb, "videocodecid"); |
3338 | 219 put_amf_double(pb, video_enc->codec_tag); |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
220 } |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
221 |
3338 | 222 if(audio_enc){ |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
223 put_amf_string(pb, "audiosamplerate"); |
3338 | 224 put_amf_double(pb, audio_enc->sample_rate); |
1606
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
225 |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
226 put_amf_string(pb, "audiosamplesize"); |
3338 | 227 put_amf_double(pb, audio_enc->codec_id == CODEC_ID_PCM_S8 ? 8 : 16); |
1606
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
228 |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
229 put_amf_string(pb, "stereo"); |
3338 | 230 put_amf_bool(pb, audio_enc->channels == 2); |
1606
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
231 |
8813741f7196
Patch for the FLV muxer to supply more complete metadata
banan
parents:
1558
diff
changeset
|
232 put_amf_string(pb, "audiocodecid"); |
3338 | 233 put_amf_double(pb, audio_enc->codec_tag); |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
234 } |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
235 |
1233
99a34915d15a
always write duration and file size, fix seeking, progress bar is now active
bcoudurier
parents:
1179
diff
changeset
|
236 put_amf_string(pb, "filesize"); |
99a34915d15a
always write duration and file size, fix seeking, progress bar is now active
bcoudurier
parents:
1179
diff
changeset
|
237 flv->filesize_offset= url_ftell(pb); |
99a34915d15a
always write duration and file size, fix seeking, progress bar is now active
bcoudurier
parents:
1179
diff
changeset
|
238 put_amf_double(pb, 0); // delayed write |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
239 |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
240 put_amf_string(pb, ""); |
1553
504ceaa50e31
Defines various common FLV format values between the FLV muxer and demuxer
aurel
parents:
1547
diff
changeset
|
241 put_byte(pb, AMF_END_OF_OBJECT); |
1179
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
242 |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
243 /* write total size of tag */ |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
244 data_size= url_ftell(pb) - metadata_size_pos - 10; |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
245 url_fseek(pb, metadata_size_pos, SEEK_SET); |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
246 put_be24(pb, data_size); |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
247 url_fseek(pb, data_size + 10 - 3, SEEK_CUR); |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
248 put_be32(pb, data_size + 11); |
6b79be0860e3
add header info to flv format based on a patch by (Philipp Klaus >ffmpegdevel ad pylonsoft mot ch )
michael
parents:
1169
diff
changeset
|
249 |
3363 | 250 for (i = 0; i < s->nb_streams; i++) { |
251 AVCodecContext *enc = s->streams[i]->codec; | |
252 if (enc->codec_id == CODEC_ID_AAC || enc->codec_id == CODEC_ID_H264) { | |
253 offset_t pos; | |
254 put_byte(pb, enc->codec_type == CODEC_TYPE_VIDEO ? | |
255 FLV_TAG_TYPE_VIDEO : FLV_TAG_TYPE_AUDIO); | |
256 put_be24(pb, 0); // size patched later | |
257 put_be24(pb, 0); // ts | |
258 put_byte(pb, 0); // ts ext | |
259 put_be24(pb, 0); // streamid | |
260 pos = url_ftell(pb); | |
261 if (enc->codec_id == CODEC_ID_AAC) { | |
262 put_byte(pb, get_audio_flags(enc)); | |
263 put_byte(pb, 0); // AAC sequence header | |
264 put_buffer(pb, enc->extradata, enc->extradata_size); | |
265 } else { | |
266 put_byte(pb, enc->codec_tag | FLV_FRAME_KEY); // flags | |
267 put_byte(pb, 0); // AVC sequence header | |
268 put_be24(pb, 0); // composition time | |
269 ff_isom_write_avcc(pb, enc->extradata, enc->extradata_size); | |
270 } | |
271 data_size = url_ftell(pb) - pos; | |
272 url_fseek(pb, -data_size - 10, SEEK_CUR); | |
273 put_be24(pb, data_size); | |
274 url_fseek(pb, data_size + 10 - 3, SEEK_CUR); | |
275 put_be32(pb, data_size + 11); // previous tag size | |
276 } | |
277 } | |
278 | |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
279 return 0; |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
280 } |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
281 |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
282 static int flv_write_trailer(AVFormatContext *s) |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
283 { |
166
2271829b6f7e
Building ffmpeg with gcc-2.95.3 encountered a problem due to C99 initialization fix by ("Steven M. Schultz" <sms at 2BSD dot COM>)
michaelni
parents:
164
diff
changeset
|
284 int64_t file_size; |
2271829b6f7e
Building ffmpeg with gcc-2.95.3 encountered a problem due to C99 initialization fix by ("Steven M. Schultz" <sms at 2BSD dot COM>)
michaelni
parents:
164
diff
changeset
|
285 |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2756
diff
changeset
|
286 ByteIOContext *pb = s->pb; |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
287 FLVContext *flv = s->priv_data; |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
288 |
166
2271829b6f7e
Building ffmpeg with gcc-2.95.3 encountered a problem due to C99 initialization fix by ("Steven M. Schultz" <sms at 2BSD dot COM>)
michaelni
parents:
164
diff
changeset
|
289 file_size = url_ftell(pb); |
1233
99a34915d15a
always write duration and file size, fix seeking, progress bar is now active
bcoudurier
parents:
1179
diff
changeset
|
290 |
99a34915d15a
always write duration and file size, fix seeking, progress bar is now active
bcoudurier
parents:
1179
diff
changeset
|
291 /* update informations */ |
99a34915d15a
always write duration and file size, fix seeking, progress bar is now active
bcoudurier
parents:
1179
diff
changeset
|
292 url_fseek(pb, flv->duration_offset, SEEK_SET); |
99a34915d15a
always write duration and file size, fix seeking, progress bar is now active
bcoudurier
parents:
1179
diff
changeset
|
293 put_amf_double(pb, flv->duration / (double)1000); |
99a34915d15a
always write duration and file size, fix seeking, progress bar is now active
bcoudurier
parents:
1179
diff
changeset
|
294 url_fseek(pb, flv->filesize_offset, SEEK_SET); |
99a34915d15a
always write duration and file size, fix seeking, progress bar is now active
bcoudurier
parents:
1179
diff
changeset
|
295 put_amf_double(pb, file_size); |
99a34915d15a
always write duration and file size, fix seeking, progress bar is now active
bcoudurier
parents:
1179
diff
changeset
|
296 |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
297 url_fseek(pb, file_size, SEEK_SET); |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
298 return 0; |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
299 } |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
300 |
468 | 301 static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
302 { |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2756
diff
changeset
|
303 ByteIOContext *pb = s->pb; |
820
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
759
diff
changeset
|
304 AVCodecContext *enc = s->streams[pkt->stream_index]->codec; |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
305 FLVContext *flv = s->priv_data; |
3363 | 306 unsigned ts; |
468 | 307 int size= pkt->size; |
2302 | 308 int flags, flags_size; |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
309 |
1443
404048ea11bc
Replace most of the %lld and %llx by their (cleaner) PRI*64 counterparts.
diego
parents:
1415
diff
changeset
|
310 // av_log(s, AV_LOG_DEBUG, "type:%d pts: %"PRId64" size:%d\n", enc->codec_type, timestamp, size); |
885 | 311 |
3363 | 312 if(enc->codec_id == CODEC_ID_VP6 || enc->codec_id == CODEC_ID_VP6F || |
313 enc->codec_id == CODEC_ID_AAC) | |
2302 | 314 flags_size= 2; |
3363 | 315 else if(enc->codec_id == CODEC_ID_H264) |
316 flags_size= 5; | |
2302 | 317 else |
318 flags_size= 1; | |
319 | |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
320 if (enc->codec_type == CODEC_TYPE_VIDEO) { |
1553
504ceaa50e31
Defines various common FLV format values between the FLV muxer and demuxer
aurel
parents:
1547
diff
changeset
|
321 put_byte(pb, FLV_TAG_TYPE_VIDEO); |
1615 | 322 |
1683
8b062c65fe0d
remove now useless codec_tag setting code in muxers
michael
parents:
1679
diff
changeset
|
323 flags = enc->codec_tag; |
1615 | 324 if(flags == 0) { |
325 av_log(enc, AV_LOG_ERROR, "video codec %X not compatible with flv\n",enc->codec_id); | |
326 return -1; | |
327 } | |
328 | |
1553
504ceaa50e31
Defines various common FLV format values between the FLV muxer and demuxer
aurel
parents:
1547
diff
changeset
|
329 flags |= pkt->flags & PKT_FLAG_KEY ? FLV_FRAME_KEY : FLV_FRAME_INTER; |
487 | 330 } else { |
331 assert(enc->codec_type == CODEC_TYPE_AUDIO); | |
490 | 332 flags = get_audio_flags(enc); |
885 | 333 |
445 | 334 assert(size); |
335 | |
1553
504ceaa50e31
Defines various common FLV format values between the FLV muxer and demuxer
aurel
parents:
1547
diff
changeset
|
336 put_byte(pb, FLV_TAG_TYPE_AUDIO); |
487 | 337 } |
338 | |
3394
02efb6e3eefa
check if extradata comes from mp4 and assume bitsteam is already formated, should fix streamcopy
bcoudurier
parents:
3363
diff
changeset
|
339 if (enc->codec_id == CODEC_ID_H264 && |
02efb6e3eefa
check if extradata comes from mp4 and assume bitsteam is already formated, should fix streamcopy
bcoudurier
parents:
3363
diff
changeset
|
340 /* check if extradata looks like mp4 formated */ |
02efb6e3eefa
check if extradata comes from mp4 and assume bitsteam is already formated, should fix streamcopy
bcoudurier
parents:
3363
diff
changeset
|
341 enc->extradata_size > 0 && *(uint8_t*)enc->extradata != 1) { |
3363 | 342 if (ff_avc_parse_nal_units(pkt->data, &pkt->data, &pkt->size) < 0) |
343 return -1; | |
344 assert(pkt->size); | |
345 size = pkt->size; | |
346 /* cast needed to get negative value */ | |
347 if (!flv->delay && (int32_t)pkt->dts < 0) | |
348 flv->delay = -(int32_t)pkt->dts; | |
349 } | |
350 | |
351 ts = pkt->dts + flv->delay; // add delay to force positive dts | |
2302 | 352 put_be24(pb,size + flags_size); |
3363 | 353 put_be24(pb,ts); |
354 put_byte(pb,ts >> 24); | |
2756
8258fb5a6aa0
Honor the 8bit extension (now 32bit instaed 24bit) of the pts field introduced in FLV specification v9.
alex
parents:
2755
diff
changeset
|
355 put_be24(pb,flv->reserved); |
487 | 356 put_byte(pb,flags); |
1615 | 357 if (enc->codec_id == CODEC_ID_VP6) |
358 put_byte(pb,0); | |
359 if (enc->codec_id == CODEC_ID_VP6F) | |
360 put_byte(pb, enc->extradata_size ? enc->extradata[0] : 0); | |
3363 | 361 else if (enc->codec_id == CODEC_ID_AAC) |
362 put_byte(pb,1); // AAC raw | |
363 else if (enc->codec_id == CODEC_ID_H264) { | |
364 put_byte(pb,1); // AVC NALU | |
365 put_be24(pb,pkt->pts - (int32_t)pkt->dts); | |
366 } | |
487 | 367 put_buffer(pb, pkt->data, size); |
2302 | 368 put_be32(pb,size+flags_size+11); // previous tag size |
3363 | 369 flv->duration = FFMAX(flv->duration, pkt->pts + flv->delay + pkt->duration); |
885 | 370 |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
371 put_flush_packet(pb); |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
372 return 0; |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
373 } |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
374 |
1169 | 375 AVOutputFormat flv_muxer = { |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
376 "flv", |
3424
7a0230981402
Make long_names in lavf/lavdev optional depending on CONFIG_SMALL.
diego
parents:
3394
diff
changeset
|
377 NULL_IF_CONFIG_SMALL("FLV format"), |
759 | 378 "video/x-flv", |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
379 "flv", |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
380 sizeof(FLVContext), |
1622 | 381 #ifdef CONFIG_LIBMP3LAME |
232 | 382 CODEC_ID_MP3, |
1622 | 383 #else // CONFIG_LIBMP3LAME |
2755
bb9c77d499dd
Prefer ADPM_SWF instead NONE if no MP3 encoding is compiled in.
alex
parents:
2591
diff
changeset
|
384 CODEC_ID_ADPCM_SWF, |
1622 | 385 #endif // CONFIG_LIBMP3LAME |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
386 CODEC_ID_FLV1, |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
387 flv_write_header, |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
388 flv_write_packet, |
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
389 flv_write_trailer, |
1679 | 390 .codec_tag= (const AVCodecTag*[]){flv_video_codec_ids, flv_audio_codec_ids, 0}, |
3363 | 391 .flags= AVFMT_GLOBALHEADER, |
164
99fbacf0f764
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
diff
changeset
|
392 }; |