Skip to content

Commit 913f98b

Browse files
committed
for bug ossrs#293, http ts stream, move the avc codec from app to kernel.
1 parent dc62991 commit 913f98b

17 files changed

+309
-134
lines changed

trunk/configure

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,8 @@ MODULE_DEPENDS=("CORE")
365365
ModuleLibIncs=(${SRS_OBJS_DIR})
366366
MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_stream"
367367
"srs_kernel_utility" "srs_kernel_flv" "srs_kernel_codec" "srs_kernel_file"
368-
"srs_kernel_consts" "srs_kernel_aac" "srs_kernel_mp3")
368+
"srs_kernel_consts" "srs_kernel_aac" "srs_kernel_mp3" "srs_kernel_ts"
369+
"srs_kernel_avc")
369370
KERNEL_INCS="src/kernel"; MODULE_DIR=${KERNEL_INCS} . auto/modules.sh
370371
KERNEL_OBJS="${MODULE_OBJS[@]}"
371372
#
@@ -388,7 +389,7 @@ if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
388389
"srs_app_thread" "srs_app_bandwidth" "srs_app_st" "srs_app_log" "srs_app_config"
389390
"srs_app_pithy_print" "srs_app_reload" "srs_app_http_api" "srs_app_http_conn" "srs_app_http_hooks"
390391
"srs_app_json" "srs_app_ingest" "srs_app_ffmpeg" "srs_app_utility" "srs_app_dvr" "srs_app_edge"
391-
"srs_app_kbps" "srs_app_heartbeat" "srs_app_empty" "srs_app_http_client" "srs_app_avc_aac"
392+
"srs_app_kbps" "srs_app_heartbeat" "srs_app_empty" "srs_app_http_client"
392393
"srs_app_recv_thread" "srs_app_security" "srs_app_statistic")
393394
APP_INCS="src/app"; MODULE_DIR=${APP_INCS} . auto/modules.sh
394395
APP_OBJS="${MODULE_OBJS[@]}"

trunk/ide/srs_upp/srs_upp.upp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ file
2020
kernel readonly separator,
2121
../../src/kernel/srs_kernel_aac.hpp,
2222
../../src/kernel/srs_kernel_aac.cpp,
23+
../../src/kernel/srs_kernel_avc.hpp,
24+
../../src/kernel/srs_kernel_avc.cpp,
2325
../../src/kernel/srs_kernel_codec.hpp,
2426
../../src/kernel/srs_kernel_codec.cpp,
2527
../../src/kernel/srs_kernel_consts.hpp,
@@ -36,6 +38,8 @@ file
3638
../../src/kernel/srs_kernel_mp3.cpp,
3739
../../src/kernel/srs_kernel_stream.hpp,
3840
../../src/kernel/srs_kernel_stream.cpp,
41+
../../src/kernel/srs_kernel_ts.cpp,
42+
../../src/kernel/srs_kernel_ts.hpp,
3943
../../src/kernel/srs_kernel_utility.hpp,
4044
../../src/kernel/srs_kernel_utility.cpp,
4145
rtmp-protocol readonly separator,
@@ -56,8 +60,6 @@ file
5660
../../src/rtmp/srs_protocol_utility.hpp,
5761
../../src/rtmp/srs_protocol_utility.cpp,
5862
app readonly separator,
59-
../../src/app/srs_app_avc_aac.hpp,
60-
../../src/app/srs_app_avc_aac.cpp,
6163
../../src/app/srs_app_bandwidth.hpp,
6264
../../src/app/srs_app_bandwidth.cpp,
6365
../../src/app/srs_app_conn.hpp,

trunk/ide/srs_vs2010/srs.vcxproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@
109109
<ClInclude Include="..\..\src\kernel\srs_kernel_log.hpp" />
110110
<ClInclude Include="..\..\src\kernel\srs_kernel_mp3.hpp" />
111111
<ClInclude Include="..\..\src\kernel\srs_kernel_stream.hpp" />
112+
<ClInclude Include="..\..\src\kernel\srs_kernel_ts.hpp" />
112113
<ClInclude Include="..\..\src\kernel\srs_kernel_utility.hpp" />
113114
<ClInclude Include="..\..\src\libs\srs_librtmp.hpp" />
114115
<ClInclude Include="..\..\src\libs\srs_lib_bandwidth.hpp" />
@@ -182,6 +183,7 @@
182183
<ClCompile Include="..\..\src\kernel\srs_kernel_log.cpp" />
183184
<ClCompile Include="..\..\src\kernel\srs_kernel_mp3.cpp" />
184185
<ClCompile Include="..\..\src\kernel\srs_kernel_stream.cpp" />
186+
<ClCompile Include="..\..\src\kernel\srs_kernel_ts.cpp" />
185187
<ClCompile Include="..\..\src\kernel\srs_kernel_utility.cpp" />
186188
<ClCompile Include="..\..\src\libs\srs_librtmp.cpp" />
187189
<ClCompile Include="..\..\src\libs\srs_lib_bandwidth.cpp" />

trunk/ide/srs_vs2010/srs.vcxproj.filters

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,9 @@
217217
<ClCompile Include="..\..\research\librtmp\srs_aac_raw_publish.c">
218218
<Filter>librtmp</Filter>
219219
</ClCompile>
220+
<ClCompile Include="..\..\src\kernel\srs_kernel_ts.cpp">
221+
<Filter>srs</Filter>
222+
</ClCompile>
220223
</ItemGroup>
221224
<ItemGroup>
222225
<ClInclude Include="..\..\src\app\srs_app_avc_aac.hpp">
@@ -396,6 +399,9 @@
396399
<ClInclude Include="..\..\src\libs\srs_lib_simple_socket.hpp">
397400
<Filter>librtmp</Filter>
398401
</ClInclude>
402+
<ClInclude Include="..\..\src\kernel\srs_kernel_ts.hpp">
403+
<Filter>srs</Filter>
404+
</ClInclude>
399405
</ItemGroup>
400406
<ItemGroup>
401407
<Filter Include="research">

trunk/src/app/srs_app_hls.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ using namespace std;
6666
#include <srs_protocol_rtmp.hpp>
6767
#include <srs_app_pithy_print.hpp>
6868
#include <srs_kernel_utility.hpp>
69-
#include <srs_app_avc_aac.hpp>
69+
#include <srs_kernel_avc.hpp>
7070
#include <srs_kernel_file.hpp>
7171
#include <srs_protocol_buffer.hpp>
7272

@@ -1424,10 +1424,6 @@ int SrsHls::on_meta_data(SrsAmf0Object* metadata)
14241424
return ret;
14251425
}
14261426

1427-
if ((ret = codec->metadata_demux(metadata)) != ERROR_SUCCESS) {
1428-
return ret;
1429-
}
1430-
14311427
return ret;
14321428
}
14331429

trunk/src/app/srs_app_http.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,8 +275,6 @@ SrsGoHttpFileServer::~SrsGoHttpFileServer()
275275

276276
int SrsGoHttpFileServer::serve_http(ISrsGoHttpResponseWriter* w, SrsHttpMessage* r)
277277
{
278-
int ret = ERROR_SUCCESS;
279-
280278
string upath = r->path();
281279

282280
// add default pages.
@@ -760,6 +758,9 @@ int SrsGoHttpResponseWriter::send_header(char* data, int size)
760758
if (content_length == -1) {
761759
hdr->set("Transfer-Encoding", "chunked");
762760
}
761+
762+
// keep alive to make vlc happy.
763+
hdr->set("Connection", "Keep-Alive");
763764

764765
// write headers
765766
hdr->write(ss);

trunk/src/app/srs_app_http_conn.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ using namespace std;
4646
#include <srs_protocol_msg_array.hpp>
4747
#include <srs_kernel_aac.hpp>
4848
#include <srs_kernel_mp3.hpp>
49+
#include <srs_kernel_ts.hpp>
4950

5051
SrsVodStream::SrsVodStream(string root_dir)
5152
: SrsGoHttpFileServer(root_dir)
@@ -246,6 +247,54 @@ ISrsStreamEncoder::~ISrsStreamEncoder()
246247
{
247248
}
248249

250+
SrsTsStreamEncoder::SrsTsStreamEncoder()
251+
{
252+
enc = new SrsTsEncoder();
253+
}
254+
255+
SrsTsStreamEncoder::~SrsTsStreamEncoder()
256+
{
257+
srs_freep(enc);
258+
}
259+
260+
int SrsTsStreamEncoder::initialize(SrsFileWriter* w, SrsStreamCache* /*c*/)
261+
{
262+
int ret = ERROR_SUCCESS;
263+
264+
if ((ret = enc->initialize(w)) != ERROR_SUCCESS) {
265+
return ret;
266+
}
267+
268+
return ret;
269+
}
270+
271+
int SrsTsStreamEncoder::write_audio(int64_t timestamp, char* data, int size)
272+
{
273+
return enc->write_audio(timestamp, data, size);
274+
}
275+
276+
int SrsTsStreamEncoder::write_video(int64_t timestamp, char* data, int size)
277+
{
278+
return enc->write_video(timestamp, data, size);
279+
}
280+
281+
int SrsTsStreamEncoder::write_metadata(int64_t /*timestamp*/, char* /*data*/, int /*size*/)
282+
{
283+
return ERROR_SUCCESS;
284+
}
285+
286+
bool SrsTsStreamEncoder::has_cache()
287+
{
288+
// for ts stream, use gop cache of SrsSource is ok.
289+
return false;
290+
}
291+
292+
int SrsTsStreamEncoder::dump_cache(SrsConsumer* /*consumer*/)
293+
{
294+
// for ts stream, ignore cache.
295+
return ERROR_SUCCESS;
296+
}
297+
249298
SrsFlvStreamEncoder::SrsFlvStreamEncoder()
250299
{
251300
enc = new SrsFlvEncoder();
@@ -471,6 +520,9 @@ int SrsLiveStream::serve_http(ISrsGoHttpResponseWriter* w, SrsHttpMessage* r)
471520
} else if (srs_string_ends_with(entry->pattern, ".mp3")) {
472521
w->header()->set_content_type("audio/mpeg");
473522
enc = new SrsMp3StreamEncoder();
523+
} else if (srs_string_ends_with(entry->pattern, ".ts")) {
524+
w->header()->set_content_type("video/MP2T");
525+
enc = new SrsTsStreamEncoder();
474526
} else {
475527
ret = ERROR_HTTP_LIVE_STREAM_EXT;
476528
srs_error("http: unsupported pattern %s", entry->pattern.c_str());

trunk/src/app/srs_app_http_conn.hpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class SrsSource;
4343
class SrsRequest;
4444
class SrsConsumer;
4545
class SrsStSocket;
46+
class SrsTsEncoder;
4647
class SrsAacEncoder;
4748
class SrsMp3Encoder;
4849
class SrsFlvEncoder;
@@ -144,6 +145,26 @@ class SrsFlvStreamEncoder : public ISrsStreamEncoder
144145
virtual int dump_cache(SrsConsumer* consumer);
145146
};
146147

148+
/**
149+
* the ts stream encoder, remux rtmp stream to ts stream.
150+
*/
151+
class SrsTsStreamEncoder : public ISrsStreamEncoder
152+
{
153+
private:
154+
SrsTsEncoder* enc;
155+
public:
156+
SrsTsStreamEncoder();
157+
virtual ~SrsTsStreamEncoder();
158+
public:
159+
virtual int initialize(SrsFileWriter* w, SrsStreamCache* c);
160+
virtual int write_audio(int64_t timestamp, char* data, int size);
161+
virtual int write_video(int64_t timestamp, char* data, int size);
162+
virtual int write_metadata(int64_t timestamp, char* data, int size);
163+
public:
164+
virtual bool has_cache();
165+
virtual int dump_cache(SrsConsumer* consumer);
166+
};
167+
147168
/**
148169
* the aac stream encoder, remux rtmp stream to aac stream.
149170
*/

trunk/src/app/srs_app_source.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ using namespace std;
4040
#include <srs_kernel_stream.hpp>
4141
#include <srs_app_edge.hpp>
4242
#include <srs_kernel_utility.hpp>
43-
#include <srs_app_avc_aac.hpp>
43+
#include <srs_kernel_avc.hpp>
4444
#include <srs_protocol_msg_array.hpp>
4545

4646
#define CONST_MAX_JITTER_MS 500

trunk/src/app/srs_app_avc_aac.cpp renamed to trunk/src/kernel/srs_kernel_avc.cpp

Lines changed: 2 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,12 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
2121
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2222
*/
2323

24-
#include <srs_app_avc_aac.hpp>
24+
#include <srs_kernel_avc.hpp>
2525

2626
#include <srs_kernel_error.hpp>
2727
#include <srs_kernel_log.hpp>
2828
#include <srs_kernel_stream.hpp>
29-
#include <srs_protocol_amf0.hpp>
30-
#include <srs_app_utility.hpp>
31-
#include <srs_protocol_utility.hpp>
29+
#include <srs_kernel_utility.hpp>
3230

3331
SrsCodecSampleUnit::SrsCodecSampleUnit()
3432
{
@@ -120,51 +118,6 @@ SrsAvcAacCodec::~SrsAvcAacCodec()
120118
srs_freep(pictureParameterSetNALUnit);
121119
}
122120

123-
int SrsAvcAacCodec::metadata_demux(SrsAmf0Object* metadata)
124-
{
125-
int ret = ERROR_SUCCESS;
126-
127-
srs_assert(metadata);
128-
129-
SrsAmf0Object* obj = metadata;
130-
131-
// finger out the codec info from metadata if possible.
132-
SrsAmf0Any* prop = NULL;
133-
134-
if ((prop = obj->get_property("duration")) != NULL && prop->is_number()) {
135-
duration = (int)prop->to_number();
136-
}
137-
if ((prop = obj->get_property("width")) != NULL && prop->is_number()) {
138-
width = (int)prop->to_number();
139-
}
140-
if ((prop = obj->get_property("height")) != NULL && prop->is_number()) {
141-
height = (int)prop->to_number();
142-
}
143-
if ((prop = obj->get_property("framerate")) != NULL && prop->is_number()) {
144-
frame_rate = (int)prop->to_number();
145-
}
146-
if ((prop = obj->get_property("videocodecid")) != NULL && prop->is_number()) {
147-
video_codec_id = (int)prop->to_number();
148-
}
149-
if ((prop = obj->get_property("videodatarate")) != NULL && prop->is_number()) {
150-
video_data_rate = (int)(1000 * prop->to_number());
151-
}
152-
153-
if ((prop = obj->get_property("audiocodecid")) != NULL && prop->is_number()) {
154-
audio_codec_id = (int)prop->to_number();
155-
}
156-
if ((prop = obj->get_property("audiodatarate")) != NULL && prop->is_number()) {
157-
audio_data_rate = (int)(1000 * prop->to_number());
158-
}
159-
160-
// ignore the following, for each flv/rtmp packet contains them:
161-
// audiosamplerate, sample->sound_rate
162-
// audiosamplesize, sample->sound_size
163-
// stereo, sample->sound_type
164-
165-
return ret;
166-
}
167-
168121
int SrsAvcAacCodec::audio_aac_demux(char* data, int size, SrsCodecSample* sample)
169122
{
170123
int ret = ERROR_SUCCESS;

0 commit comments

Comments
 (0)