xbmc / xbmc/inputstream.ffmpegdirect

How to open a video file?

Open
#149 75 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C++
Stars
101
Forks
56
PR merge metrics
No merged PRs in 30d

Description

Hi,

I've spend some time trying to figure out how this library works. From what i get it's very much tailored towards receiving data that is streaming in. Specifically for formats like HLS and DASH.

What i want to do is play a normal file (no stream). So for example, i have this playlist file

#EXTM3U
#KODIPROP:inputstream=inputstream.ffmpegdirect
#KODIPROP:mimetype=application/x-mpegURL
#KODIPROP:inputstream.ffmpegdirect.is_realtime_stream=false
#KODIPROP:inputstream.ffmpegdirect.open_mode=ffmpeg
https://dweb.link/ipfs/bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi

If you save that as bla.m3u and click it, it will play Big Buck Bunny.

If you open it in KODI it will show the information of the file. Like duration, container, speaker setup, etc... So it can definitely read it like this. But it doesn't play it.
The logging looks as follows:

2021-10-11 22:09:15.105 T:454469    INFO <general>: VideoPlayer::OpenFile: /home/mark/Downloads/kodi_test/test.m3u
2021-10-11 22:09:15.105 T:454585    INFO <general>: Creating InputStream
2021-10-11 22:09:15.107 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: inputstream.ffmpegdirect: OpenStream() - Num Props: 2
2021-10-11 22:09:15.107 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: inputstream.ffmpegdirect property: inputstream.ffmpegdirect.is_realtime_stream = false
2021-10-11 22:09:15.107 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: inputstream.ffmpegdirect property: inputstream.ffmpegdirect.open_mode = ffmpeg
2021-10-11 22:09:15.107 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: Stream mimetype: application/x-mpegURL
2021-10-11 22:09:15.107 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: OpenWithFFmpeg - IO handled by FFmpeg's AVFormat
2021-10-11 22:09:15.219 T:454549    INFO <general>: CPythonInvoker(1, /home/mark/GitProjects/kodi_build/kodi_data/addons/service.xbmc.versioncheck/resources/lib/runner.py): script successfully run
2021-10-11 22:09:15.227 T:454549    INFO <general>: Python interpreter stopped
2021-10-11 22:09:15.330 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]: Input #0, matroska,webm, from 'https://dweb.link/ipfs/bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi':
2021-10-11 22:09:15.330 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:   Metadata:
2021-10-11 22:09:15.330 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     title           : Big Buck Bunny, Sunflower version
2021-10-11 22:09:15.330 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     COMMENT         : Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net
2021-10-11 22:09:15.330 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     MAJOR_BRAND     : isom
2021-10-11 22:09:15.330 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     MINOR_VERSION   : 512
2021-10-11 22:09:15.330 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     COMPATIBLE_BRANDS: isomiso2avc1mp41
2021-10-11 22:09:15.330 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     ARTIST          : Blender Foundation 2008, Janus Bager Kristensen 2013
2021-10-11 22:09:15.330 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     COMPOSER        : Sacha Goedegebure
2021-10-11 22:09:15.330 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     GENRE           : Animation
2021-10-11 22:09:15.330 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     ENCODER         : Lavf58.76.100
2021-10-11 22:09:15.330 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:   Duration: 00:10:34.65, start: -0.007000, bitrate: 2109 kb/s
2021-10-11 22:09:15.330 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:   Stream #0:0: Video: vp8, yuv420p(progressive), 1920x1080, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     Metadata:
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:       HANDLER_NAME    : GPAC ISO Video Handler
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:       VENDOR_ID       : [0][0][0][0]
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:       ENCODER         : Lavc58.134.100 libvpx
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:       DURATION        : 00:10:34.647000000
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:   Stream #0:1: Audio: opus, 48000 Hz, stereo, fltp (default)
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     Metadata:
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:       HANDLER_NAME    : GPAC ISO Audio Handler
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:       VENDOR_ID       : [0][0][0][0]
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:       ENCODER         : Lavc58.134.100 libopus
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:       DURATION        : 00:10:34.208000000
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]: Input #0, matroska,webm, from 'https://dweb.link/ipfs/bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi':
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:   Metadata:
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     title           : Big Buck Bunny, Sunflower version
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     COMMENT         : Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     MAJOR_BRAND     : isom
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     MINOR_VERSION   : 512
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     COMPATIBLE_BRANDS: isomiso2avc1mp41
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     ARTIST          : Blender Foundation 2008, Janus Bager Kristensen 2013
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     COMPOSER        : Sacha Goedegebure
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     GENRE           : Animation
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     ENCODER         : Lavf58.76.100
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:   Duration: 00:10:34.65, start: -0.007000, bitrate: 2109 kb/s
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:   Stream #0:0: Video: vp8, yuv420p(progressive), 1920x1080, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     Metadata:
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:       HANDLER_NAME    : GPAC ISO Video Handler
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:       VENDOR_ID       : [0][0][0][0]
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:       ENCODER         : Lavc58.134.100 libvpx
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:       DURATION        : 00:10:34.647000000
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:   Stream #0:1: Audio: opus, 48000 Hz, stereo, fltp (default)
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:     Metadata:
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:       HANDLER_NAME    : GPAC ISO Audio Handler
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:       VENDOR_ID       : [0][0][0][0]
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:       ENCODER         : Lavc58.134.100 libopus
2021-10-11 22:09:15.331 T:454585    INFO <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[733469A0]:       DURATION        : 00:10:34.208000000
2021-10-11 22:09:15.637 T:454585    INFO <general>: Creating Demuxer
2021-10-11 22:09:15.637 T:454585    INFO <general>: Opening stream: 0 source: 256
2021-10-11 22:09:15.637 T:454585    INFO <general>: Creating video codec with codec id: 139
2021-10-11 22:09:15.637 T:454585    INFO <general>: CDVDVideoCodecFFmpeg::Open() Using codec: On2 VP8
2021-10-11 22:09:15.637 T:454585    INFO <general>: Creating video thread
2021-10-11 22:09:15.638 T:454588    INFO <general>: running thread: video_thread
2021-10-11 22:09:15.638 T:454585    INFO <general>: Opening stream: 1 source: 256
2021-10-11 22:09:15.638 T:454585    INFO <general>: Finding audio codec for: 86076
2021-10-11 22:09:15.639 T:454585    INFO <general>: CDVDAudioCodecFFmpeg::Open() Successful opened audio decoder opus
2021-10-11 22:09:15.639 T:454585    INFO <general>: Creating audio thread
2021-10-11 22:09:15.639 T:454589    INFO <general>: running thread: CVideoPlayerAudio::Process()
2021-10-11 22:09:30.585 T:454585    INFO <general>: Process - eof reading from demuxer
2021-10-11 22:09:30.585 T:454585    INFO <general>: CVideoPlayer::OnExit()
2021-10-11 22:09:30.585 T:454585    INFO <general>: VideoPlayer: eof, waiting for queues to empty
2021-10-11 22:09:30.585 T:454585    INFO <general>: Closing stream player 1
2021-10-11 22:09:30.585 T:454585    INFO <general>: Waiting for audio thread to exit
2021-10-11 22:09:30.593 T:454589    INFO <general>: thread end: CVideoPlayerAudio::OnExit()
2021-10-11 22:09:30.593 T:454585    INFO <general>: Closing audio device
2021-10-11 22:09:30.593 T:454585    INFO <general>: Deleting audio codec
2021-10-11 22:09:30.593 T:454585    INFO <general>: Closing stream player 2
2021-10-11 22:09:30.593 T:454585    INFO <general>: waiting for video thread to exit
2021-10-11 22:09:30.593 T:454588   ERROR <general>: Got MSGQ_ABORT or MSGO_IS_ERROR return true
2021-10-11 22:09:30.593 T:454588    INFO <general>: thread end: video_thread
2021-10-11 22:09:30.593 T:454585    INFO <general>: deleting video codec
2021-10-11 22:09:30.595 T:454540    INFO <general>: Deleting settings information for files /home/mark/Downloads/kodi_test/test.m3u
2021-10-11 22:09:30.595 T:454585    INFO <general>: ADDON: Dll Destroyed - Inputstream FFmpeg Direct
2021-10-11 22:09:30.633 T:454469    INFO <general>: CVideoPlayer::CloseFile()

I'm guessing i'm missing just one single property to make things work, but i can't quite figure out which one.

Also, to be clear. I want to play a file over web but eventually want to go a step further. I want to add support for the ffmpeg crypto protocol which requires setting the decryption_key and decryption_iv properties on ffmpeg. And the easiest way to get that working in KODI seems to be through this addon. The URL that the M3U file contains would change to:
crypto+https://dweb.link/ipfs/bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi

That is the real goal here. I'm also happy to hear your thought on that idea!

Best regards,
Mark

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the reported bla.m3u case and trace the OpenStream and OpenWithFFmpeg paths named in the log. Check how the is_realtime_stream, open_mode, and mimetype properties are handled for a non-streaming file. Done means the supported configuration or required code change is established and verified against the example.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.