Choppy playback with Beamr encoder and decoder

Hello,
We’ve upgraded our Wowza Streaming Engine from 4.7.7 to 4.8.17. This includes changing encoder and decoder from MainConcept to Beamr.

After this upgrade the transcoded video plyback (via Apple HLS) is choppy. If I play the original stream via Apple HLS the video is smooth. This looks like an issue in the Transcoder.

Here is a part of our Transcoder template for 1080p:

<Encode>
	<Name>1080p</Name>
	<Enable>true</Enable>
	<Description></Description>
	<StreamName>mp4:${SourceStreamName}_1080p</StreamName>
	<Video>
		<Codec>H.264</Codec>
		<Implementation>Beamr</Implementation>
		<GPUID>-1</GPUID>
		<Profile>high</Profile>
		<Bitrate>4500000</Bitrate>
		<KeyFrameInterval>
			<FollowSource>false</FollowSource>
			<Interval>50</Interval>
		</KeyFrameInterval>
		<FrameSize>
			<FitMode>fit-height</FitMode>
			<Width>0</Width>
			<Height>1080</Height>
			<Crop>0,0,0,0</Crop>
			<SourceRectangle></SourceRectangle>
		</FrameSize>
		<Parameters>
		</Parameters>
	</Video>
	<Audio>
		<Codec>PassThru</Codec>
		<Bitrate>${SourceAudioBitrate}</Bitrate>
		<Parameters>
		</Parameters>
	</Audio>
	<Properties>
		<Property>
			<Name>logVideoEncodingParameters</Name>
			<Value>true</Value>
			<Type>Boolean</Type>
		</Property>
	</Properties>
</Encode>

Here is a recording of the original stream: https://drbohlav.org:8443/original.mp4
Here is a recording of the transcoded 1080p stream: https://drbohlav.org:8443/1080p.mp4

We run Wowza Stream Engine on Amazon EC2. We use c5.9xlarge instances and this was the only stream being streams. CPU usage was below 10%, load was below 3.

We have nDVR recording enabled. Recorded streams are choppy the same way transcoded streams are.

Do you have any idea what could be causing this, please?

Thanks!

Hello @Vojta_Drbohlav1, thank you for sharing all of that information with us. I’m happy to hear you upgraded from 4.7.7 to 4.8.17 because of all the improvements and fixes available. But because there were several breaking changes made along the way in the 11 or 12 versions we’ve released since 4,7,7, you may need to go through each of the release notes or save yourself a ton of time and submit a support ticket.

Just as one example:

  • A. With Wowza Streaming Engine 4.8.14, we upgraded CUDA support to CUDA 11 for NVIDIA GPU-accelerated live stream transcoding. This upgrade supports using the latest NVIDIA drivers for transcoding at greater scale and speed. The NVIDIA microarchitecture of your hardware must support CUDA 11, and using NVIDIA driver version 460.00 or later is required.

  • B. Another topic to examine in the release notes is that there are some known issues with Beamr and loss depending on the GPU being enabled in the transcoder default settings (you can try disabling it and see if that helps) and what your local environment looks like.

My best advice to you because we have a long list of release notes with some “known issues” is send the ticket in to support. They can save you time by quickly identifying what needs to be done since they’ve helped so many people upgrade their Engine version since 4.7.7.

If you want to take a peek at the breaking changes and known issues since 4.7.7 and also what are still known issues in 4.8.17, you can go here, but like I said it’s a lot.

https://www.wowza.com/docs/wowza-streaming-engine-release-history

Hello @Rose_Power-Wowza_Com,
Thanks for the response. I’ve submitted the support ticket as you mentioned.

We have no GPU in the server we are using. We only use Beamr and all encoding and decoding should be done on CPU.

I also went through all the changes since 4.7.7 and I didn’t find anything what could cause any issues for us. I will wait for a response from the support team.

Hello @Vojta_Drbohlav1
I faced the same problem
I updated wowza engine from 4.8.9 to 4.8.17. And video after transcoder became bad quality like some frames were droped.
And in logs I found error “Ending the current a+v chunk although the chunk does not start with a video keyframe”
I think that it’s a reason. but I don’t know how to solve it. It seems, that On old version of wowza engine transcoder worked better.
@Vojta_Drbohlav1 look at the wowza logs from main menu, plaese, Answer if you would find the same error.

This looks like a Problem with B-Frames. Wowza-Team has modified Transcoder B-Frames Default Settings. We had near the same Problem with our 720p50 Source Stream and the transcoded Renderings. Add the following lines in your Transcoder XML-File for each Transcoding in the -Video- -> -Parameters- Block:

					<Parameter>
						<Name>beamr4.bframes</Name>
						<Value>0</Value>
						<Type>Integer</Type>
					</Parameter>

This should fix the choppy Playback of your transcoded Output.

We’re facing te same problem with low definition HLS streams (360, 480p).
HD and full HD streams are ok.

I leave mp4 wowza output on this link, which shows the jerks observed on the 480p stream.
the problems are more or less visible depending on the video player used: Quicktime player >> Firefox >> Chrome. No problem on VLC.

Metadata seems ok on this file. But ffprobe seems to show too many B-frames (2 per second). Deeper analysis in progress.

Surprised to see there is no known issue on this problem: https://www.wowza.com/docs/known-issues-with-wowza-streaming-engine

<?xml version="1.0" encoding="UTF-8"?>
<Root>
    <Transcode>
        <Description></Description>
        <Decode>
            <Video>
                <Implementation>default</Implementation>
                <Deinterlace>false</Deinterlace>
            </Video>
        </Decode>
        <Encodes>
            <Encode>
                <Name>360p</Name>
                <Enable>true</Enable>
                <Description></Description>
                <StreamName>mp4:360p</StreamName>
                <Video>
                    <Codec>H.264</Codec>
                    <Implementation>default</Implementation>
                    <GPUID>-1</GPUID>
                    <Profile>baseline</Profile>
                    <Bitrate>250000</Bitrate>
                    <KeyFrameInterval>
                        <FollowSource>false</FollowSource>
                        <Interval>15</Interval>
                    </KeyFrameInterval>
                    <FrameSize>
                        <FitMode>fit-height</FitMode>
                        <Width>0</Width>
                        <Height>360</Height>
                        <Crop>0,0,0,0</Crop>
                        <SourceRectangle></SourceRectangle>
                    </FrameSize>
                </Video>
                <Audio>
                    <Codec>AAC</Codec>
                    <Bitrate>32000</Bitrate>
                </Audio>
            </Encode>
            <Encode>
                <Name>480p</Name>
                <Enable>true</Enable>
                <Description></Description>
                <StreamName>mp4:480p</StreamName>
                <Video>
                    <Codec>H.264</Codec>
                    <Implementation>default</Implementation>
                    <GPUID>-1</GPUID>
                    <Profile>baseline</Profile>
                    <Bitrate>600000</Bitrate>
                    <KeyFrameInterval>
                        <FollowSource>false</FollowSource>
                        <Interval>15</Interval>
                    </KeyFrameInterval>
                    <FrameSize>
                        <FitMode>fit-height</FitMode>
                        <Width>0</Width>
                        <Height>480</Height>
                        <Crop>0,0,0,0</Crop>
                        <SourceRectangle></SourceRectangle>
                    </FrameSize>
                </Video>
                <Audio>
                    <Codec>AAC</Codec>
                    <Bitrate>64000</Bitrate>
                </Audio>
            </Encode>
            <Encode>
                <Name>720p</Name>
                <Enable>true</Enable>
                <Description></Description>
                <StreamName>mp4:720p</StreamName>
                <Video>
                    <Codec>H.264</Codec>
                    <Implementation>default</Implementation>
                    <GPUID>-1</GPUID>
                    <Profile>main</Profile>
                    <Bitrate>1500000</Bitrate>
                    <KeyFrameInterval>
                        <FollowSource>false</FollowSource>
                        <Interval>15</Interval>
                    </KeyFrameInterval>
                    <FrameSize>
                        <FitMode>fit-height</FitMode>
                        <Width>0</Width>
                        <Height>720</Height>
                        <Crop>0,0,0,0</Crop>
                        <SourceRectangle></SourceRectangle>
                    </FrameSize>
                </Video>
                <Audio>
                    <Codec>AAC</Codec>
                    <Bitrate>128000</Bitrate>
                </Audio>
            </Encode>
            <Encode>
                <Name>1080p</Name>
                <Enable>true</Enable>
                <Description></Description>
                <StreamName>mp4:1080p</StreamName>
                <Video>
                    <Codec>H.264</Codec>
                    <Implementation>default</Implementation>
                    <GPUID>-1</GPUID>
                    <Profile>high</Profile>
                    <Bitrate>4200000</Bitrate>
                    <KeyFrameInterval>
                        <FollowSource>false</FollowSource>
                        <Interval>15</Interval>
                    </KeyFrameInterval>
                    <FrameSize>
                        <FitMode>fit-height</FitMode>
                        <Width>0</Width>
                        <Height>1080</Height>
                        <Crop>0,0,0,0</Crop>
                        <SourceRectangle></SourceRectangle>
                    </FrameSize>
                </Video>
                <Audio>
                    <Codec>AAC</Codec>
                    <Bitrate>192000</Bitrate>
                </Audio>
            </Encode>
        </Encodes>
        <StreamNameGroups>
            <StreamNameGroup>
                <Name>1080p</Name>
                <Description></Description>
                <StreamName>fullhd</StreamName>
                <Members>
                    <Member>
                        <MemberName>360p</MemberName>
                        <EncodeName>360p</EncodeName>
                        <MediaListRendition>
                            <WowzaVideoOnly>false</WowzaVideoOnly>
                            <WowzaAudioOnly>false</WowzaAudioOnly>
                        </MediaListRendition>
                    </Member>
                    <Member>
                        <MemberName>480p</MemberName>
                        <EncodeName>480p</EncodeName>
                        <MediaListRendition>
                            <WowzaVideoOnly>false</WowzaVideoOnly>
                            <WowzaAudioOnly>false</WowzaAudioOnly>
                        </MediaListRendition>
                    </Member>
                    <Member>
                        <MemberName>720p</MemberName>
                        <EncodeName>720p</EncodeName>
                        <MediaListRendition>
                            <WowzaVideoOnly>false</WowzaVideoOnly>
                            <WowzaAudioOnly>false</WowzaAudioOnly>
                        </MediaListRendition>
                    </Member>
                    <Member>
                        <MemberName>1080p</MemberName>
                        <EncodeName>1080p</EncodeName>
                        <MediaListRendition>
                            <WowzaVideoOnly>false</WowzaVideoOnly>
                            <WowzaAudioOnly>false</WowzaAudioOnly>
                        </MediaListRendition>
                    </Member>
                </Members>
            </StreamNameGroup>
            <StreamNameGroup>
                <Name>720p</Name>
                <Description></Description>
                <StreamName>hd</StreamName>
                <Members>
                    <Member>
                        <MemberName>360p</MemberName>
                        <EncodeName>360p</EncodeName>
                        <MediaListRendition>
                            <WowzaVideoOnly>false</WowzaVideoOnly>
                            <WowzaAudioOnly>false</WowzaAudioOnly>
                        </MediaListRendition>
                    </Member>
                    <Member>
                        <MemberName>480p</MemberName>
                        <EncodeName>480p</EncodeName>
                        <MediaListRendition>
                            <WowzaVideoOnly>false</WowzaVideoOnly>
                            <WowzaAudioOnly>false</WowzaAudioOnly>
                        </MediaListRendition>
                    </Member>
                    <Member>
                        <MemberName>720p</MemberName>
                        <EncodeName>720p</EncodeName>
                        <MediaListRendition>
                            <WowzaVideoOnly>false</WowzaVideoOnly>
                            <WowzaAudioOnly>false</WowzaAudioOnly>
                        </MediaListRendition>
                    </Member>
                </Members>
            </StreamNameGroup>
            <StreamNameGroup>
                <Name>480p</Name>
                <Description></Description>
                <StreamName>480p</StreamName>
                <Members>
                    <Member>
                        <MemberName>360p</MemberName>
                        <EncodeName>360p</EncodeName>
                        <MediaListRendition>
                            <WowzaVideoOnly>false</WowzaVideoOnly>
                            <WowzaAudioOnly>false</WowzaAudioOnly>
                        </MediaListRendition>
                    </Member>
                    <Member>
                        <MemberName>480p</MemberName>
                        <EncodeName>480p</EncodeName>
                        <MediaListRendition>
                            <WowzaVideoOnly>false</WowzaVideoOnly>
                            <WowzaAudioOnly>false</WowzaAudioOnly>
                        </MediaListRendition>
                    </Member>
                </Members>
            </StreamNameGroup>
            <StreamNameGroup>
                <Name>360p</Name>
                <Description></Description>
                <StreamName>360p</StreamName>
                <Members>
                    <Member>
                        <MemberName>360p</MemberName>
                        <EncodeName>360p</EncodeName>
                        <MediaListRendition>
                            <WowzaVideoOnly>false</WowzaVideoOnly>
                            <WowzaAudioOnly>false</WowzaAudioOnly>
                        </MediaListRendition>
                    </Member>
                </Members>
            </StreamNameGroup>
        </StreamNameGroups>
    </Transcode>
</Root>

I made a mistake in my previous post, video only contains I & P frames, and no B-frames.

@Marcel_Linke : where can we find any wowza trace about this modification please?

@Antony_Simonneau
The Wowza Team has posted the B-Frame Fix here -> Problems with Beamr Transcoding WSE 4.8.14+9

But i dont think that you have a Problem with B-Frames. Take a look into your transcode.xml. Why did you set the Keyframe-Interval to 15? Has your Source Stream only 7,5 FPS? I dont think so. At the Moment the Transcoder set a Keyframe every 0,5 Seconds, if your Source has 30 Frames / Sec. Set the Keyframe-Interval to 60. This adjusts your Keyframe-Interval to 2 Seconds and is a good Setting for Livestreaming.

1 Like

Thanks for your reply Marcel.

Now remembering what did my team. Lowering KF interval was a way to lower latency on our lives (-1.5s) with no effect on user experience.
No problem before switching to 4.8.17 a few.weeks ago (we were in 4.8.10 for month). Now we experience these problems on low resolution streams.

I opened an incident on wowza support.

1 Like