AirenSoft / OvenMediaEngine

OvenMediaEngine (OME) is a Sub-Second Latency Live Streaming Server with Large-Scale and High-Definition. #WebRTC #LLHLS
https://OvenMediaEngine.com/ome
GNU Affero General Public License v3.0
2.52k stars 1.06k forks source link

Origin OVT and LLHLS Publishers do not start if any transcode does not have the Framerate tag set #1582

Closed SceneCityDev closed 5 months ago

SceneCityDev commented 5 months ago

I am sending a transport stream via SRT to an origin.

If any encodes do NOT have the Framerate tag set, the LLHLS publisher is created, but never started. It's enough if any of the transcodes does not list a framerate tag.

This configuration works:

                                                        <Encodes>
                                                                <Video>
                                                                        <Name>video_bypass</Name>
                                                                        <Bypass>true</Bypass>
                                                                </Video>
                                                                <Video>
                                                                        <Name>video_hevc_hq</Name>
                                                                        <Codec>h265</Codec>
                                                                        <Bitrate>6000000</Bitrate>
                                                                        <Framerate>60</Framerate>
                                                                        <Width>1920</Width>
                                                                        <Height>1080</Height>
                                                                        <Preset>faster</Preset>
                                                                </Video>
                                                                <Video>
                                                                        <Name>video_hevc_lq</Name>
                                                                        <Codec>h265</Codec>
                                                                        <Bitrate>2000000</Bitrate>
                                                                        <Framerate>60</Framerate>
                                                                        <Width>1280</Width>
                                                                        <Height>720</Height>
                                                                        <Preset>faster</Preset>
                                                                </Video>
                                                                <Video>
                                                                        <Name>video_avc_hq</Name>
                                                                        <Codec>h264</Codec>
                                                                        <Bitrate>6000000</Bitrate>
                                                                        <Framerate>60</Framerate>
                                                                        <Width>1920</Width>
                                                                        <Height>1080</Height>
                                                                        <Preset>faster</Preset>
                                                                </Video>
                                                                <Video>
                                                                        <Name>video_avc_lq</Name>
                                                                        <Codec>h264</Codec>
                                                                        <Bitrate>2000000</Bitrate>
                                                                        <Framerate>60</Framerate>
                                                                        <Width>1280</Width>
                                                                        <Height>720</Height>
                                                                        <Preset>faster</Preset>
                                                                </Video>
                                                                <Audio>
                                                                        <Name>audio_aac_hq</Name>
                                                                        <Codec>aac</Codec>
                                                                        <Bitrate>192000</Bitrate>
                                                                        <Samplerate>48000</Samplerate>
                                                                        <Channel>2</Channel>
                                                                        <BypassIfMatch>
                                                                                <Codec>eq</Codec>
                                                                        </BypassIfMatch>
                                                                </Audio>
                                                                <Audio>
                                                                        <Name>audio_aac_lq</Name>
                                                                        <Codec>aac</Codec>
                                                                        <Bitrate>96000</Bitrate>
                                                                        <Samplerate>48000</Samplerate>
                                                                        <Channel>2</Channel>
                                                                        <BypassIfMatch>
                                                                                <Codec>eq</Codec>
                                                                        </BypassIfMatch>
                                                                </Audio>
                                                        </Encodes>

And results in the publishers starting:

[2024-04-03 21:42:43.310] I [OutboundWorker:1339986] MediaRouter | mediarouter_application.cpp:477  | [#default#origin2/hevctest50(3501148096)] Stream has been prepared
[Stream Info]
id(3501148096), msid(0), output(hevctest50), SourceType(Transcoder), RepresentationType(Source), Created Time (Wed Apr  3 21:42:41 2024) UUID(e1780136-2e2a-48bc-ae72-4ef7794bb23e/default/#default#origin2/hevctest50/o)
        >> Origin Stream Info
        id(100), output(hevctest50), SourceType(SRT), Created Time (Wed Apr  3 21:42:38 2024)

        Data  Track #0: Public Name(Data_1) Variant Name(Data) Codec(0,Unknown,Passthrough) BSF(Unknown) timebase(1/1000)
        Video Track #1: Public Name(Video_256) Variant Name(video_bypass) Bitrate(9.53Mb) Codec(2,H265,Passthrough:0) BSF(H265_ANNEXB) Resolution(1920x1080) Framerate(51.07) KeyInterval(47/frame) SkipFrames(-1) BFrames(0) timebase(1/90000)
        Video Track #2: Public Name(Video_256) Variant Name(video_hevc_hq) Bitrate(6.00Mb) Codec(2,H265,qsv:0) BSF(H265_ANNEXB) Resolution(1920x1080) Framerate(60.00) KeyInterval(0/frame) SkipFrames(-1) BFrames(0) timebase(1/90000)
        Video Track #3: Public Name(Video_256) Variant Name(video_hevc_lq) Bitrate(2.00Mb) Codec(2,H265,qsv:0) BSF(H265_ANNEXB) Resolution(1280x720) Framerate(60.00) KeyInterval(0/frame) SkipFrames(-1) BFrames(0) timebase(1/90000)
        Video Track #4: Public Name(Video_256) Variant Name(video_avc_hq) Bitrate(6.00Mb) Codec(1,H264,qsv:0) BSF(H264_ANNEXB) Resolution(1920x1080) Framerate(60.00) KeyInterval(0/frame) SkipFrames(-1) BFrames(0) timebase(1/90000)
        Video Track #5: Public Name(Video_256) Variant Name(video_avc_lq) Bitrate(2.00Mb) Codec(1,H264,qsv:0) BSF(H264_ANNEXB) Resolution(1280x720) Framerate(60.00) KeyInterval(0/frame) SkipFrames(-1) BFrames(0) timebase(1/90000)
        Audio Track #6: Public Name(Audio_257) Variant Name(audio_aac_hq) Bitrate(192.00Kb) Codec(6,AAC,Passthrough) BSF(AAC_ADTS) Samplerate(48.0K) Format(none, 0) Channel(stereo, 2) timebase(1/90000)
        Audio Track #7: Public Name(Audio_257) Variant Name(audio_aac_lq) Bitrate(96.00Kb) Codec(6,AAC,Passthrough) BSF(AAC_ADTS) Samplerate(48.0K) Format(none, 0) Channel(stereo, 2) timebase(1/90000)
[2024-04-03 21:42:43.313] I [OutboundWorker:1339986] LLHLS Publisher | llhls_stream.cpp:213  | LLHlsStream has been created : hevctest50/3501148096
OriginMode(true) Chunk Duration(0.50) Segment Duration(6) Segment Count(10) DRM(none)
[2024-04-03 21:42:43.314] I [OutboundWorker:1339986] Publisher | stream.cpp:212  | LLHLS Publisher Application application has started [hevctest50(3501148096)] stream (MSID : 0)
[2024-04-03 21:42:43.315] I [OutboundWorker:1339986] Publisher | stream.cpp:212  | OVTPublisher Application application has started [hevctest50(3501148096)] stream (MSID : 0)

However, if one or more entries do not have a Framerate tag, the transcoder correctly takes the Framerate from the source, but then never starts any publishers:

                                                        <Encodes>
                                                                <Video>
                                                                        <Name>video_bypass</Name>
                                                                        <Bypass>true</Bypass>
                                                                </Video>
                                                                <Video>
                                                                        <Name>video_hevc_hq</Name>
                                                                        <Codec>h265</Codec>
                                                                        <Bitrate>6000000</Bitrate>
                                                                        <Width>1920</Width>
                                                                        <Height>1080</Height>
                                                                        <Preset>faster</Preset>
                                                                </Video>
                                                                <Video>
                                                                        <Name>video_hevc_lq</Name>
                                                                        <Codec>h265</Codec>
                                                                        <Bitrate>2000000</Bitrate>
                                                                        <Width>1280</Width>
                                                                        <Height>720</Height>
                                                                        <Preset>faster</Preset>
                                                                </Video>
                                                                <Video>
                                                                        <Name>video_avc_hq</Name>
                                                                        <Codec>h264</Codec>
                                                                        <Bitrate>6000000</Bitrate>
                                                                        <Width>1920</Width>
                                                                        <Height>1080</Height>
                                                                        <Preset>faster</Preset>
                                                                </Video>
                                                                <Video>
                                                                        <Name>video_avc_lq</Name>
                                                                        <Codec>h264</Codec>
                                                                        <Bitrate>2000000</Bitrate>
                                                                        <Width>1280</Width>
                                                                        <Height>720</Height>
                                                                        <Preset>faster</Preset>
                                                                </Video>
                                                                <Audio>
                                                                        <Name>audio_aac_hq</Name>
                                                                        <Codec>aac</Codec>
                                                                        <Bitrate>192000</Bitrate>
                                                                        <Samplerate>48000</Samplerate>
                                                                        <Channel>2</Channel>
                                                                        <BypassIfMatch>
                                                                                <Codec>eq</Codec>
                                                                        </BypassIfMatch>
                                                                </Audio>
                                                                <Audio>
                                                                        <Name>audio_aac_lq</Name>
                                                                        <Codec>aac</Codec>
                                                                        <Bitrate>96000</Bitrate>
                                                                        <Samplerate>48000</Samplerate>
                                                                        <Channel>2</Channel>
                                                                        <BypassIfMatch>
                                                                                <Codec>eq</Codec>
                                                                        </BypassIfMatch>
                                                                </Audio>
                                                        </Encodes>

Please note that this not only happens if just one encodes does not have the Framerate tag set - as soon as just ONE encode does not have the Framerate tag included, the publishers never start:

[2024-04-03 21:28:15.286] I [SPSRT-s9999:1339440] MediaRouter | mediarouter_application.cpp:340  | [#default#origin2/hevctest50(101)] Trying to create a stream
[2024-04-03 21:28:15.286] I [SPSRT-s9999:1339440] Monitor | application_metrics.cpp:58   | Create StreamMetrics(hevctest50/e1780136-2e2a-48bc-ae72-4ef7794bb23e/default/#default#origin2/hevctest50/i) for monitoring
[2024-04-03 21:28:15.286] I [SPSRT-s9999:1339440] MediaRouter | mediarouter_application.cpp:440  | [#default#origin2/hevctest50(101)] Stream has been created
[2024-04-03 21:28:15.287] I [SPSRT-s9999:1339440] Transcoder | transcoder_stream.cpp:63   | [#default#origin2/hevctest50(101)] Transcoder stream has been started
[2024-04-03 21:28:15.288] I [InboundWorker:1339446] MediaRouter | mediarouter_application.cpp:477  | [#default#origin2/hevctest50(101)] Stream has been prepared
[Stream Info]
id(101), msid(0), output(hevctest50), SourceType(SRT), RepresentationType(Source), Created Time (Wed Apr  3 21:28:12 2024) UUID(e1780136-2e2a-48bc-ae72-4ef7794bb23e/default/#default#origin2/hevctest50/i)

        Data  Track #2: Public Name(Data_2) Variant Name(Data) Codec(0,Unknown,none) BSF(Unknown) timebase(1/1000)
        Video Track #256: Public Name(Video_256) Variant Name(Video) Bitrate(0b) Codec(2,H265,none:0) BSF(H265_ANNEXB) Resolution(1920x1080) Framerate(0.00) KeyInterval(0/frame) SkipFrames(-1) BFrames(0) timebase(1/90000)
        Audio Track #257: Public Name(Audio_257) Variant Name(Audio) Bitrate(0b) Codec(6,AAC,none) BSF(AAC_ADTS) Samplerate(48.0K) Format(none, 0) Channel(stereo, 2) timebase(1/90000)
[2024-04-03 21:28:15.288] I [InboundWorker:1339446] Transcoder | transcoder_stream.cpp:128  | [#default#origin2/hevctest50(101)] Using local output profiles by webhook
[2024-04-03 21:28:15.289] I [InboundWorker:1339446] Transcoder | transcoder_stream.cpp:410  | [#default#origin2/hevctest50(101)] Output stream has been created. [#default#origin2/hevctest50(786234356)]
[2024-04-03 21:28:15.290] W [InboundWorker:1339446] FFmpeg | third_parties.cpp:115  | [AVCodecContext: 0x7f5d4b43e400] Invalid pkt_timebase, passing timestamps as-is.
[2024-04-03 21:28:15.290] I [InboundWorker:1339446] Transcoder | transcoder_decoder.cpp:242  | The decoder has been created successfully. track(#256) codec(H265), module(qsv:0)
[2024-04-03 21:28:15.290] I [InboundWorker:1339446] MediaRouter | mediarouter_application.cpp:340  | [#default#origin2/hevctest50(786234356)] Trying to create a stream
[2024-04-03 21:28:15.291] I [InboundWorker:1339446] Monitor | application_metrics.cpp:58   | Create StreamMetrics(hevctest50/e1780136-2e2a-48bc-ae72-4ef7794bb23e/default/#default#origin2/hevctest50/o) for monitoring
[2024-04-03 21:28:15.291] I [InboundWorker:1339446] MediaRouter | mediarouter_application.cpp:440  | [#default#origin2/hevctest50(786234356)] Stream has been created
[2024-04-03 21:28:15.291] I [InboundWorker:1339446] Transcoder | transcoder_stream.cpp:150  | [#default#origin2/hevctest50(101)] Transcoder stream has been prepared
[2024-04-03 21:28:15.480] I [DechevcQsv:1339517] Transcoder | decoder_hevc_qsv.cpp:200  | [#default#origin2/hevctest50(101)] input stream information: [video] hevc (Main 12.3), nv12, 1920x1080 [SAR 0:1 DAR 16:9], 50 fps, 195 kbps, timebase: 1/50,
[2024-04-03 21:28:15.480] I [DechevcQsv:1339517] Transcoder | transcoder_stream_internal.cpp:613  | Framerate of the output stream is not set. set the estimated framerate from decoded frame duration. 50.00fps
[2024-04-03 21:28:15.480] I [DechevcQsv:1339517] Transcoder | transcoder_stream_internal.cpp:613  | Framerate of the output stream is not set. set the estimated framerate from decoded frame duration. 50.00fps
[2024-04-03 21:28:15.480] I [DechevcQsv:1339517] Transcoder | transcoder_stream_internal.cpp:613  | Framerate of the output stream is not set. set the estimated framerate from decoded frame duration. 50.00fps
[2024-04-03 21:28:15.480] I [DechevcQsv:1339517] Transcoder | transcoder_stream_internal.cpp:613  | Framerate of the output stream is not set. set the estimated framerate from decoded frame duration. 50.00fps
[2024-04-03 21:28:15.495] I [DechevcQsv:1339517] Transcoder | transcoder_encoder.cpp:278  | The encoder has been created successfully. track(#5), codec(H264), module(qsv:0)
[2024-04-03 21:28:15.503] I [DechevcQsv:1339517] Transcoder | transcoder_encoder.cpp:278  | The encoder has been created successfully. track(#4), codec(H264), module(qsv:0)
[2024-04-03 21:28:15.512] I [DechevcQsv:1339517] Transcoder | transcoder_encoder.cpp:278  | The encoder has been created successfully. track(#3), codec(H265), module(qsv:0)
[2024-04-03 21:28:15.515] W [OutboundWorker:1339447] MediaRouter | mediarouter_stream.cpp:858  | [#default#origin2/hevctest50(786234356)] b-frame has been detected in the 1 track of outbound stream
[2024-04-03 21:28:15.522] I [DechevcQsv:1339517] Transcoder | transcoder_encoder.cpp:278  | The encoder has been created successfully. track(#2), codec(H265), module(qsv:0)

From then on edges trying to pull via OVT or trying to get llhls playlists results in:

[2024-04-03 21:36:23.482] W [SPLLHLS-t443:1339596] LLHLS Publisher | llhls_publisher.cpp:396 | (#default#origin2/hevctest50) stream has created but not started yet

....which goes on forever.

Note: Yes, I am aware the the input is coming in at 50fps, and the output framerate in this example is set to 60Hz. That's on purpose as I am trying to see if OME will correctly set the transcoder and publishers to use the source frame rate.

getroot commented 5 months ago

This was resolved in the master branch last week. https://github.com/AirenSoft/OvenMediaEngine/commit/65854e3a76fb5dd1c752298b2c332103426f43bd

getroot commented 5 months ago

If this issue recurs in the master branch or next release, please don't hesitate to reopen the issue.