LinkedIn Live fails to process: use Baseline, not High or Main
LinkedIn says a Live stream that fails to process may need the Baseline H.264 profile, because High and Main add B-frames. Which a Sume render sets.

If a LinkedIn Live stream fails to process, LinkedIn tells you to check the encoder's video profile and use Baseline instead of High or Main. Its stated reason is that higher profiles can introduce B-frames and timestamp issues that prevent a successful ingest. Sume's Timeline sets the frame size and frame rate of a pre-rendered MP4 but not the H.264 profile, so the profile is set in the encoder that sends the stream.
The settings
The values are LinkedIn's recommendations for cloud services (Restream, Vimeo Live, Easy Live and Switchboard), updated about a year before this read. LinkedIn also asks for at least 10 Mbps of upload speed. The last column is checked against the Timeline docs.
| Setting | LinkedIn value | Set in a Timeline request? |
|---|---|---|
| Aspect ratio | 16:9 | yes, through output width and height |
| Resolution | 720p recommended, 1080p maximum | yes, 1280x720 or 1920x1080 |
| Frame rate | 30 fps | yes, output.fps 30 |
| Key frame | every 2 seconds (60 frames at 30 fps) | not a documented field |
| Video bitrate | 3.5 Mbps recommended, 6 Mbps maximum | no |
| Audio bitrate and sample rate | 128 Kbps, 48 KHz | no |
| Encoding | H.264 video, AAC audio | no, codec keys return 400 |
| Protocol | RTMP or RTMPS | no, Timeline returns an MP4 file |
What a Timeline request can set
Timeline 1.0 documents output width and height as even integers from 256 to 2160, and output.fps as 24, 25, 30 or 60. It rejects codec, crf, ffmpeg_args and similar keys with a 400. The result is an MP4 URL you can fetch, not a stream endpoint.
curl -X POST https://api.sume.com/v1/timeline-1.0/render \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: live-segment-001" \
-d '{
"audio": {
"url": "https://media.sume.com/artifacts/artf_demo/voice.wav",
"duration_seconds": 24
},
"video": [
{
"source_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4",
"start": 0,
"duration": 24
}
],
"output": { "width": 1280, "height": 720, "fps": 30 }
}'Where the profile gets chosen
Sume does not broadcast. If you stream a pre-recorded segment, play or ingest the MP4 in your own encoder or cloud service and set bitrate, key frame interval and profile there. If the stream still fails to process, change the profile first, as LinkedIn advises, before touching the file.
Troubleshooting order
- Confirm at least 10 Mbps upload speed.
- Match 720p, 30 fps and a 2-second key frame interval.
- Switch the encoder's H.264 profile to Baseline.
- Only then look at the source MP4.
Sources
Related posts
More in Developers
- List your failed TTS and STT jobs with the Sume jobs filters
GET /v1/jobs filters by status and type and pages 100 at a time with starting_after. A short loop to find every failed audio job.
- Sume docs for a coding assistant: llms.txt, llms-full.txt, .md
docs.sume.com serves a 73-link llms.txt index, one llms-full.txt file and any page as markdown by adding .md. Which to hand to a coding assistant, and when.
- Luma callback_url or polling: which Sume job mode matches
Luma's API docs list keyframes, loop and callback_url for ray-2. On Sume the equivalent choice is job mode: async, sync up to 30 s, subscribe or webhook.
- Luma API callback_url vs Sume callback_url: signing and retries
Luma's video API takes a callback_url, and so does Sume's /v1/videos. What Sume's callback is signed with, how often it retries, and a Python verifier.
Written by Sume