Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Streaming the camera to the SRS3.0 server and generating HLS involves a process where the duration (dur) gradually increases over time until the generated ts files no longer contain video information. #1051

Closed
ZiJinMountain opened this issue Jan 22, 2018 · 5 comments
Assignees
Labels
Bug It might be a bug. TransByAI Translated by AI/GPT.
Milestone

Comments

@ZiJinMountain
Copy link

ZiJinMountain commented Jan 22, 2018

The process of generating HLS involves the duration (dur) slowly increasing over time until the generated ts files have no video information. Previously, the hls_fragment was set to 10 seconds and hls_window to 60, but it didn't work. After increasing the values, it was able to generate a segment. However, the dur value is very unstable and doesn't gradually increase as configured (around 20 seconds). When it reaches around 40 seconds, the ts files are generated without video, and eventually, the dur value becomes extremely large, causing the ts files to be dropped. Please help identify the issue with this.

Version: 3.0.25

Configuration file:

listen              1935;
max_connections     1000;
srs_log_tank        file;
srs_log_file        ./objs/srs.log;
http_api {
    enabled         on;
    listen          1985;
}
http_server {
    enabled         on;
    listen          8080;
    dir             /usr/local/nginx/html;
}
stats {
    network         0;
    disk            sda sdb xvda xvdb;
}


vhost __defaultVhost__ {
    gop_cache       off;
    queue_length    1;
    min_latency     on;
    mr {
        enabled     off;
    }
    mw_latency      100;
    tcp_nodelay     on;
    hls {
        enabled         on;
        hls_fragment    20;
        hls_window      600;
        hls_path        /usr/local/nginx/html;
        hls_m3u8_file   [app]/[stream].m3u8;
        hls_ts_file     [app]/[stream]-[seq].ts;
    }
    http_remux {
        enabled     off;
        mount       [vhost]/[app]/[stream].flv;
        hstrs       on;
    }
}
[root@localhost trunk]# 

LOG printing:

[root@localhost trunk]# tail -f  ./objs/srs.log
[2018-01-22 01:47:37.543][Trace][9311][106] source url=/live/livestream, ip=10.43.154.41, cache=0, is_edge=0, source_id=-1[-1]
[2018-01-22 01:47:37.555][Trace][9311][106] hls: win=600.00, frag=20.00, prefix=, path=/usr/local/nginx/html, m3u8=[app]/[stream].m3u8, ts=[app]/[stream]-[seq].ts, aof=2.00, floor=0, clean=1, waitk=1, dispose=0
[2018-01-22 01:47:37.555][Trace][9311][106] ignore disabled exec for vhost=__defaultVhost__
[2018-01-22 01:47:37.555][Trace][9311][106] set TCP_NODELAY 0=>1
[2018-01-22 01:47:37.555][Trace][9311][106] start publish mr=0/350, p1stpt=20000, pnt=5000, tcp_nodelay=1, rtcid=0
[2018-01-22 01:47:37.557][Trace][9311][106] got metadata, width=1280, height=720, vcodec=7, acodec=10
[2018-01-22 01:47:37.558][Trace][9311][106] protocol in.buffer=0, in.ack=0, out.ack=2500000, in.chunk=128, out.chunk=60000
[2018-01-22 01:47:37.558][Trace][9311][106] 43B video sh,  codec(7, profile=Main, level=3.1, 1280x720, 0kbps, 0.0fps, 0.0s)
[2018-01-22 01:47:37.558][Trace][9311][106] 4B audio sh, codec(10, profile=LC, 1channels, 0kbps, 32000HZ), flv(16bits, 2channels, 44100HZ)
[2018-01-22 01:47:46.614][Trace][9311][106] -> HLS time=10000, sno=1, ts=livestream-0.ts, dur=17.75, dva=0p
[2018-01-22 01:47:56.608][Trace][9311][106] -> HLS time=20001, sno=1, ts=livestream-0.ts, dur=27.74, dva=0p
[2018-01-22 01:48:02.555][Trace][9311][106] <- CPB time=19053, okbps=1,0,0, ikbps=1903,0,0, mr=0/350, p1stpt=20000, pnt=5000
[2018-01-22 01:48:06.617][Trace][9311][106] -> HLS time=30001, sno=1, ts=livestream-0.ts, dur=37.77, dva=0p
[2018-01-22 01:48:12.555][Trace][9311][106] <- CPB time=29053, okbps=0,0,0, ikbps=1889,1889,0, mr=0/350, p1stpt=20000, pnt=5000
[2018-01-22 01:48:16.599][Trace][9311][106] -> HLS time=40001, sno=2, ts=livestream-1.ts, dur=24.92, dva=0p
[2018-01-22 01:48:22.555][Trace][9311][106] <- CPB time=39053, okbps=0,0,0, ikbps=1899,1889,0, mr=0/350, p1stpt=20000, pnt=5000
[2018-01-22 01:48:26.615][Trace][9311][106] -> HLS time=50002, sno=2, ts=livestream-1.ts, dur=34.95, dva=0p
[2018-01-22 01:48:32.555][Trace][9311][106] <- CPB time=49054, okbps=0,0,0, ikbps=1890,1889,0, mr=0/350, p1stpt=20000, pnt=5000
[2018-01-22 01:48:36.640][Trace][9311][106] -> HLS time=60002, sno=3, ts=livestream-2.ts, dur=28.31, dva=0p
[2018-01-22 01:48:42.555][Trace][9311][106] <- CPB time=59054, okbps=0,0,0, ikbps=1895,1901,0, mr=0/350, p1stpt=20000, pnt=5000
[2018-01-22 01:48:46.620][Trace][9311][106] -> HLS time=70002, sno=4, ts=livestream-3.ts, dur=31.77, dva=0p
[2018-01-22 01:48:52.555][Trace][9311][106] <- CPB time=69054, okbps=0,0,0, ikbps=1889,1901,0, mr=0/350, p1stpt=20000, pnt=5000
[2018-01-22 01:48:56.608][Trace][9311][106] -> HLS time=80002, sno=5, ts=livestream-4.ts, dur=31.48, dva=0p
[2018-01-22 01:49:02.555][Trace][9311][106] <- CPB time=79054, okbps=0,0,0, ikbps=1892,1901,0, mr=0/350, p1stpt=20000, pnt=5000
[2018-01-22 01:49:06.617][Trace][9311][106] -> HLS time=90002, sno=6, ts=livestream-5.ts, dur=33.99, dva=0p
[2018-01-22 01:49:12.555][Trace][9311][106] <- CPB time=89054, okbps=0,0,0, ikbps=1888,1873,0, mr=0/350, p1stpt=20000, pnt=5000
[2018-01-22 01:49:16.641][Trace][9311][106] -> HLS time=100003, sno=7, ts=livestream-6.ts, dur=38.59, dva=0p
[2018-01-22 01:49:22.555][Trace][9311][106] <- CPB time=99055, okbps=0,0,0, ikbps=1892,1873,0, mr=0/350, p1stpt=20000, pnt=5000
[2018-01-22 01:49:26.619][Trace][9311][106] -> HLS time=110003, sno=11, ts=livestream-10.ts, dur=38.60, dva=0p
[2018-01-22 01:49:32.555][Trace][9311][106] <- CPB time=109055, okbps=0,0,0, ikbps=1889,1873,0, mr=0/350, p1stpt=20000, pnt=5000
[2018-01-22 01:49:36.607][Trace][9311][106] -> HLS time=120003, sno=120, ts=livestream-119.ts, dur=41.23, dva=0p
[2018-01-22 01:49:42.555][Trace][9311][106] <- CPB time=119055, okbps=0,0,0, ikbps=1891,1901,0, mr=0/350, p1stpt=20000, pnt=5000
[2018-01-22 01:49:46.622][Trace][9311][106] -> HLS time=130006, sno=338, ts=livestream-337.ts, dur=43.97, dva=0p

TRANS_BY_GPT3

@Liu-Tommy
Copy link

Liu-Tommy commented Feb 24, 2018

Hello, ZiJinMountain. May I ask where to download SRS3.0?

TRANS_BY_GPT3

@winlinvip
Copy link
Member

winlinvip commented Jul 30, 2018

@Liu-Tommy git checkout 3.0release, please note that SRS3 is currently in the development version.

TRANS_BY_GPT3

@winlinvip
Copy link
Member

winlinvip commented Jul 30, 2018

@ZiJinMountain, can you provide the source file for streaming? It could be an issue with the stream.

TRANS_BY_GPT3

@winlinvip
Copy link
Member

winlinvip commented Aug 25, 2018

This is because the audio is generated based on the number of AAC samples, so it will increase linearly. If the video is not increasing linearly, it will cause a significant difference between the audio and video streams. When receiving an audio and video, the slicing process starts, but if the timestamp difference is too large, the slice is discarded.

Re-push the stream, and the audio continues to increase linearly.

* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 2.1
  * frame #0: 0x00000001003a2620 srs`SrsFragment::append(this=0x0000000100c019b0, dts=210930) at srs_app_fragment.cpp:47
    frame #1: 0x00000001001c7a0c srs`SrsHlsMuxer::flush_audio(this=0x0000000100a01ae0, cache=0x0000000100a01ac0) at srs_app_hls.cpp:582
    frame #2: 0x00000001001cd8da srs`SrsHlsController::reap_segment(this=0x0000000100a01aa0) at srs_app_hls.cpp:1032
    frame #3: 0x00000001001cd4ad srs`SrsHlsController::write_audio(this=0x0000000100a01aa0, frame=0x0000000101809600, pts=18983706) at srs_app_hls.cpp:953
    frame #4: 0x00000001001ce822 srs`SrsHls::on_audio(this=0x0000000100a01a30, shared_audio=0x0000000100b9c988, format=0x0000000100a021d0) at srs_app_hls.cpp:1221
    frame #5: 0x00000001001a0463 srs`SrsOriginHub::on_audio(this=0x0000000100a019c0, shared_audio=0x0000000100b9c988) at srs_app_source.cpp:969
    frame #6: 0x00000001001aff97 srs`SrsSource::on_audio_imp(this=0x0000000100a003a0, msg=0x0000000100b9c988) at srs_app_source.cpp:2139
    frame #7: 0x00000001001afa98 srs`SrsSource::on_audio(this=0x0000000100a003a0, shared_audio=0x0000000100804ca0) at srs_app_source.cpp:2089
    frame #8: 0x000000010019483a srs`SrsRtmpConn::process_publish_message(this=0x0000000100a02e70, source=0x0000000100a003a0, msg=0x0000000100804ca0) at srs_app_rtmp_conn.cpp:1030
    frame #9: 0x00000001001946e4 srs`SrsRtmpConn::handle_publish_message(this=0x0000000100a02e70, source=0x0000000100a003a0, msg=0x0000000100804ca0) at srs_app_rtmp_conn.cpp:1009
    frame #10: 0x000000010032ea4a srs`SrsPublishRecvThread::consume(this=0x0000000100b88c38, msg=0x0000000100804ca0) at srs_app_recv_thread.cpp:387
    frame #11: 0x000000010032c751 srs`SrsRecvThread::do_cycle(this=0x0000000100b88c40) at srs_app_recv_thread.cpp:145
    frame #12: 0x000000010032c5d0 srs`SrsRecvThread::cycle(this=0x0000000100b88c40) at srs_app_recv_thread.cpp:114
    frame #13: 0x00000001001f5408 srs`SrsSTCoroutine::cycle(this=0x0000000100900fb0) at srs_app_st.cpp:190
    frame #14: 0x00000001001f512e srs`SrsSTCoroutine::pfn(arg=0x0000000100900fb0) at srs_app_st.cpp:201
    frame #15: 0x00000001003bf908 srs`_st_thread_main at sched.c:337
    frame #16: 0x00000001003bef9c srs`st_thread_create(start=0x0000000000000000, arg=0x00000001009003e0, joinable=1, stk_size=12093292) at sched.c:616

If the stream is re-pushed, the video timestamp starts from 0.

(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 2.1
  * frame #0: 0x00000001003a2620 srs`SrsFragment::append(this=0x0000000100c019b0, dts=320) at srs_app_fragment.cpp:47
    frame #1: 0x00000001001c7c20 srs`SrsHlsMuxer::flush_video(this=0x0000000100a01ae0, cache=0x0000000100a01ac0) at srs_app_hls.cpp:611
    frame #2: 0x00000001001cd736 srs`SrsHlsController::write_video(this=0x0000000100a01aa0, frame=0x0000000101807c00, dts=28800) at srs_app_hls.cpp:1000
    frame #3: 0x00000001001cec31 srs`SrsHls::on_video(this=0x0000000100a01a30, shared_video=0x0000000100b9c980, format=0x0000000100a021d0) at srs_app_hls.cpp:1265
    frame #4: 0x00000001001a1be2 srs`SrsOriginHub::on_video(this=0x0000000100a019c0, shared_video=0x0000000100b9c980, is_sequence_header=false) at srs_app_source.cpp:1056
    frame #5: 0x00000001001b0939 srs`SrsSource::on_video_imp(this=0x0000000100a003a0, msg=0x0000000100b9c980) at srs_app_source.cpp:2254
    frame #6: 0x00000001001b04a7 srs`SrsSource::on_video(this=0x0000000100a003a0, shared_video=0x0000000100900dd0) at srs_app_source.cpp:2209
    frame #7: 0x00000001001948c3 srs`SrsRtmpConn::process_publish_message(this=0x0000000100a02e70, source=0x0000000100a003a0, msg=0x0000000100900dd0) at srs_app_rtmp_conn.cpp:1037
    frame #8: 0x00000001001946e4 srs`SrsRtmpConn::handle_publish_message(this=0x0000000100a02e70, source=0x0000000100a003a0, msg=0x0000000100900dd0) at srs_app_rtmp_conn.cpp:1009
    frame #9: 0x000000010032ea4a srs`SrsPublishRecvThread::consume(this=0x0000000100b88c38, msg=0x0000000100900dd0) at srs_app_recv_thread.cpp:387
    frame #10: 0x000000010032c751 srs`SrsRecvThread::do_cycle(this=0x0000000100b88c40) at srs_app_recv_thread.cpp:145
    frame #11: 0x000000010032c5d0 srs`SrsRecvThread::cycle(this=0x0000000100b88c40) at srs_app_recv_thread.cpp:114
    frame #12: 0x00000001001f5408 srs`SrsSTCoroutine::cycle(this=0x0000000100900fb0) at srs_app_st.cpp:190
    frame #13: 0x00000001001f512e srs`SrsSTCoroutine::pfn(arg=0x0000000100900fb0) at srs_app_st.cpp:201
    frame #14: 0x00000001003bf908 srs`_st_thread_main at sched.c:337
    frame #15: 0x00000001003bef9c srs`st_thread_create(start=0x0000000000000000, arg=0x00000001009003e0, joinable=1, stk_size=12093292) at sched.c:616

If the duration of a segment exceeds the maximum of 30 seconds specified in the configuration, it will be discarded.

TRANS_BY_GPT3

@winlinvip
Copy link
Member

winlinvip commented Aug 25, 2018

The reason is that previous_audio_dts was not assigned correctly.

TRANS_BY_GPT3

@winlinvip winlinvip added the Bug It might be a bug. label Aug 25, 2018
@winlinvip winlinvip added this to the srs 3.0 release milestone Aug 25, 2018
@winlinvip winlinvip self-assigned this Sep 12, 2021
@winlinvip winlinvip changed the title 摄像头推流给SRS3.0服务器,生成HLS的流程,一段时间后dur时间慢慢变大,直到生成的ts文件没有视频信息。 Streaming the camera to the SRS3.0 server and generating HLS involves a process where the duration (dur) gradually increases over time until the generated ts files no longer contain video information. Jul 28, 2023
@winlinvip winlinvip added the TransByAI Translated by AI/GPT. label Jul 28, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug It might be a bug. TransByAI Translated by AI/GPT.
Projects
None yet
Development

No branches or pull requests

3 participants