I've had a similar problem and also needed the geometries of the output for further calculations. I tryed the above solutions, but whatWhat worked best for me in the end was the extraction of line segments using buffer zones.
- Open "Buffer" from Processing Toolbox and choose a distance of 5000 m:
- Go to Vector->Processing->Intersection and select your river layer as Input Layer and the created Buffer layer as overlay layer:
- This will create a layer with the described line segments of 10 km each around the midpoint. This output layer is also useful for further geometry calculations (length, sinuosity,...). I mention this because the above "Service Area (From Layer)"-solution didn't return the correct length in my case.