@@ -243,7 +243,10 @@ WebRTCMediaSource::WebRTCMediaSource()
243243 m_pitch(0 ),
244244 m_rtcp_feedback(nullptr ),
245245 m_parserRWPKHandle(nullptr ),
246- m_ready(false ) {
246+ m_ready(false ),
247+ m_enableBsDump(false ),
248+ m_bsDumpfp(nullptr ) {
249+
247250 LOG (INFO) << __FUNCTION__ << std::endl;
248251
249252 s_CurObj = this ;
@@ -260,6 +263,11 @@ WebRTCMediaSource::~WebRTCMediaSource() {
260263 I360SCVP_unInit (m_parserRWPKHandle);
261264 m_parserRWPKHandle = nullptr ;
262265 }
266+
267+ if (m_bsDumpfp) {
268+ fclose (m_bsDumpfp);
269+ m_bsDumpfp = nullptr ;
270+ }
263271}
264272
265273void WebRTCMediaSource::parseOptions () {
@@ -284,6 +292,11 @@ void WebRTCMediaSource::parseOptions() {
284292 exit (-1 );
285293 }
286294 m_serverAddress = std::string (server_url);
295+
296+ if (!strcmp (info->FirstChildElement (" enableDump" )->GetText (), " true" )) {
297+ m_enableBsDump = true ;
298+ }
299+
287300}
288301
289302void WebRTCMediaSource::setMediaInfo () {
@@ -336,10 +349,31 @@ void WebRTCMediaSource::setMediaInfo() {
336349 }
337350}
338351
352+ void WebRTCMediaSource::initDump () {
353+ if (m_enableBsDump) {
354+ char dumpFileName[128 ];
355+ snprintf (dumpFileName, 128 , " /tmp/webrtcsource-%p.%s" , this , " hevc" );
356+ m_bsDumpfp = fopen (dumpFileName, " wb" );
357+ if (m_bsDumpfp) {
358+ LOG (INFO) << " Enable bitstream dump " << dumpFileName << std::endl;
359+ } else {
360+ LOG (ERROR) << " Can not open dump file " << dumpFileName << std::endl;
361+ }
362+ }
363+ }
364+
365+ void WebRTCMediaSource::dump (const uint8_t * buf, int len, FILE* fp) {
366+ if (fp) {
367+ fwrite (buf, 1 , len, fp);
368+ fflush (fp);
369+ }
370+ }
371+
339372RenderStatus WebRTCMediaSource::Initialize (struct RenderConfig renderConfig,
340373 RenderSourceFactory* rsFactory) {
341374 m_rsFactory = rsFactory;
342375 setMediaInfo ();
376+ initDump ();
343377
344378 m_DecoderManager = std::make_shared<DecoderManager>();
345379 RenderStatus ret = m_DecoderManager->Initialize (rsFactory);
@@ -466,6 +500,9 @@ bool WebRTCMediaSource::OnVideoPacket(
466500 std::shared_ptr<SimpleBuffer> bitstream_buf =
467501 std::make_shared<SimpleBuffer>();
468502 bitstream_buf->insert (frame->buffer , frame->length );
503+ if (m_enableBsDump) {
504+ dump (frame->buffer , frame->length , m_bsDumpfp);
505+ }
469506
470507 std::shared_ptr<SimpleBuffer> sei_buf = std::make_shared<SimpleBuffer>();
471508 filter_RWPK_SEI (bitstream_buf, sei_buf);
0 commit comments