Eyevinn / srt-whep

SRT to WHEP (WebRTC)
Apache License 2.0
69 stars 9 forks source link

Support H.265 / HEVC #26

Closed birme closed 1 year ago

Wkkkkk commented 1 year ago

While adding support for h265, it is noticed that Chrome seems to reject h265 video (media line exists in answer but is not included in BUNDLE) and ice candidates exchange will time out.

Same results apply to different video profile parameters.

Wkkkkk commented 1 year ago

Updates on this problem:

  1. While testing on different platforms (with various tools), it is noticed that all web browsers (chrome/safari/edge) reject HEVC/H.265 stream. SDP offer generated from such streams will not be parsed correctly when browsers set local descriptions. In addition, if browsers are asked to generate an offer themselves, no H265 payload will be generated (only H264 or VP8).

  2. To find out the cause / verify the assumption, a discussion was found. Here it experiences the same issues for WebRTC codecs and indicates that Safari is the only browser at the moment that supports H265 for WebRTC. To enable that, one has to turn on Develop-Experimental Features-WebRTC H265 codec in Safari. However, it seems that WebKit (Apple's browser engine for Safari and other iOS apps) has its own RTP payload format and differs from the standard (RFC 7798). So it does not work directly out of box. There is a PR available for fixing this H265 packetization issue in WebKit project but no one is viewing it for the moment.

  3. A quick test was run with FFmpeg/srt-whep/Safari (with WebRTC HEVC enabled). It is noticed that this stream generated by FFmpeg is rather unstable and disconnects itself with srtsrc from time to time. On the other hand, Safari can accept the SDP offer, and the WebRTC connection state becomes 'connected' eventually. However, no video is played out.

With all we find so far, it seems rather challenging to support H.265 / HEVC right now.