FFmpeg HTTP proxy port not applied correctly
Branch: Omega Target: WebOS
I've configured the proxy settings as follows:
host: 192.168.0.200
port: 1090
However, with this configuration, Kodi fails to apply the proxy correctly, and I encounter an error in the kodi.log:
2025-05-03 21:18:16.892 T:27111 info <general>: VideoPlayer::OpenFile: pvr://channels/tv/IRIB@453935575/[email protected]_2073801549.pvr
2025-05-03 21:18:16.893 T:30487 info <general>: Creating InputStream
2025-05-03 21:18:16.898 T:30487 info <general>: AddOnLog: inputstream.ffmpegdirect: inputstream.ffmpegdirect: OpenStream() - Num Props: 2
2025-05-03 21:18:16.899 T:30487 info <general>: AddOnLog: inputstream.ffmpegdirect: inputstream.ffmpegdirect property: inputstream.ffmpegdirect.is_realtime_stream = true
2025-05-03 21:18:16.899 T:30487 info <general>: AddOnLog: inputstream.ffmpegdirect: inputstream.ffmpegdirect property: inputstream.ffmpegdirect.manifest_type = hls
2025-05-03 21:18:16.899 T:30487 info <general>: AddOnLog: inputstream.ffmpegdirect: Stream mimetype: application/x-mpegURL
2025-05-03 21:18:16.900 T:30487 info <general>: AddOnLog: inputstream.ffmpegdirect: HttpProxy host set: '192.168.0.200'
2025-05-03 21:18:16.900 T:30487 info <general>: AddOnLog: inputstream.ffmpegdirect: HttpProxy port set: 1090
2025-05-03 21:18:16.900 T:30487 info <general>: AddOnLog: inputstream.ffmpegdirect: HttpProxy user set: ''
2025-05-03 21:18:16.900 T:30487 info <general>: AddOnLog: inputstream.ffmpegdirect: OpenWithFFmpeg - IO handled by FFmpeg's AVFormat
2025-05-03 21:18:16.902 T:30487 error <general>: AddOnLog: inputstream.ffmpegdirect: ffmpeg[52899C32]: [tcp] Port missing in uri
2025-05-03 21:18:16.902 T:30487 error <general>: CVideoPlayer::OpenInputStream - error opening [pvr://channels/tv/IRIB@453935575/[email protected]_2073801549.pvr]
2025-05-03 21:18:16.902 T:30487 info <general>: CVideoPlayer::OnExit()
2025-05-03 21:18:16.903 T:30487 info <general>: ADDON: Dll Destroyed - Inputstream FFmpeg Direct
2025-05-03 21:18:17.099 T:27111 info <general>: CVideoPlayer::CloseFile()
2025-05-03 21:18:17.099 T:27111 info <general>: VideoPlayer: waiting for threads to exit
2025-05-03 21:18:17.099 T:27111 info <general>: VideoPlayer: finished waiting
If I instead include the port directly in the host value like this:
host: 192.168.0.200:1090
port: 1090
Kodi.log:
2025-05-03 22:46:58.076 T:4474 info <general>: VideoPlayer::OpenFile: pvr://channels/tv/All%20channels@-1/[email protected]_507349789.pvr
2025-05-03 22:46:58.077 T:5484 info <general>: Creating InputStream
2025-05-03 22:46:58.088 T:5484 info <general>: AddOnLog: inputstream.ffmpegdirect: inputstream.ffmpegdirect: OpenStream() - Num Props: 2
2025-05-03 22:46:58.088 T:5484 info <general>: AddOnLog: inputstream.ffmpegdirect: inputstream.ffmpegdirect property: inputstream.ffmpegdirect.is_realtime_stream = true
2025-05-03 22:46:58.088 T:5484 info <general>: AddOnLog: inputstream.ffmpegdirect: inputstream.ffmpegdirect property: inputstream.ffmpegdirect.manifest_type = hls
2025-05-03 22:46:58.088 T:5484 info <general>: AddOnLog: inputstream.ffmpegdirect: Stream mimetype: application/x-mpegURL
2025-05-03 22:46:58.092 T:5484 info <general>: AddOnLog: inputstream.ffmpegdirect: HttpProxy host set: '192.168.0.200:1090'
2025-05-03 22:46:58.092 T:5484 info <general>: AddOnLog: inputstream.ffmpegdirect: HttpProxy port set: 1090
2025-05-03 22:46:58.092 T:5484 info <general>: AddOnLog: inputstream.ffmpegdirect: HttpProxy user set: ''
2025-05-03 22:46:58.093 T:5484 info <general>: AddOnLog: inputstream.ffmpegdirect: OpenWithFFmpeg - IO handled by FFmpeg's AVFormat
then everything works as expected.
It seems the port value is not being passed properly to FFmpeg unless it's explicitly included in the host string.
Are you running kodi omega or piers?
It is on Kodi Omega. From here: https://kodi.tv/download/webos/
Can you post the setting.xml from the addon?
It’s either that the port is not being set, or read incorrectly. Not sure how you can get that from web os.
It will be in the userdata folder.
From org.xbmc.kodi/.kodi/userdata/addon_data/inputstream.ffmpegdirect/settings.xml
<settings version="2">
<setting id="timeshiftBufferPath" default="true">special://userdata/addon_data/inputstream.ffmpegdirect/timeshift</setting>
<setting id="timeshiftEnableLimit" default="true">true</setting>
<setting id="timeshiftOnDiskLength" default="true">1</setting>
<setting id="useHttpProxy">true</setting>
<setting id="httpProxyHost">192.168.0.200:1090</setting>
<setting id="httpProxyPort">1090</setting>
<setting id="httpProxyUser" default="true" />
<setting id="httpProxyPassword" default="true" />
<setting id="streamBandwidth" default="true">0</setting>
<setting id="allowFFmpegLogging" default="true">false</setting>
<setting id="probeForFps" default="true">true</setting>
<setting id="enableTeletext" default="true">true</setting>
<setting id="useFastOpenForManifestStreams" default="true">true</setting>
<setting id="forceRealtimeOffCatchup" default="true">false</setting>
</settings>
Ok, that looks fine. Do you get the same behaviour on a different os? Like Mac or windows?
Now tested it on Android with official play store version. It is working fine without appending port to proxy host.
Could it be related to my build? I built inputstream.ffmpegdirect with cross compiling on Linux.
These are my build process: Dockerfile:
FROM ubuntu:22.04
RUN apt-get update && \
apt-get install -y cmake libtool yasm automake vim git wget
WORKDIR /root
RUN mkdir kodi-dev && \
wget --no-verbose "https://github.com/openlgtv/buildroot-nc4/releases/download/webos-b17b4cc/arm-webos-linux-gnueabi_sdk-buildroot.tar.gz" && \
tar xzvf arm-webos-linux-gnueabi_sdk-buildroot.tar.gz -C kodi-dev
RUN git clone -b "21.0-Omega" --depth 1 https://github.com/xbmc/xbmc.git &&\
git clone -b "Omega" --depth 1 https://github.com/xbmc/inputstream.ffmpegdirect.git &&\
mkdir inputstream.ffmpegdirect/build
WORKDIR /root/inputstream.ffmpegdirect/build
RUN apt-get install -y pkg-config autopoint
ADD Toolchain-webos.cmake /root/inputstream.ffmpegdirect/Toolchain-webos.cmake
ADD config.site build/depends/share/config.site
Toolchain:
set(CMAKE_SYSTEM_NAME Linux)
set(CORE_PLATFORM_NAME webos)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CPU "armeabi-v7a")
set(CMAKE_C_COMPILER /root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-gcc)
set(CMAKE_CXX_COMPILER /root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-g++)
set(CMAKE_AR /root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-ar CACHE FILEPATH "Archiver")
set(CMAKE_AS /root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-as CACHE FILEPATH "Assembler")
set(CMAKE_LINKER /root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-ld CACHE FILEPATH "Linker")
set(CMAKE_NM /root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-nm CACHE FILEPATH "Nm")
set(CMAKE_STRIP /root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-strip CACHE PATH "strip binary" FORCE)
set(CMAKE_OBJDUMP /root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-objdump CACHE FILEPATH "Objdump")
set(CMAKE_RANLIB /root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-ranlib CACHE FILEPATH "Ranlib")
set(CMAKE_C_FLAGS "-fPIC -DPIC -mcpu=cortex-a9 -mtune=cortex-a53 -mfloat-abi=softfp -DNDEBUG=1 -Os")
set(CMAKE_CXX_FLAGS "-fPIC -DPIC -mcpu=cortex-a9 -mtune=cortex-a53 -mfloat-abi=softfp -static-libstdc++ -DNDEBUG=1 -Os -std=c++17")
set(CMAKE_CPP_FLAGS "-fPIC -DPIC -mcpu=cortex-a9 -mtune=cortex-a53 -mfloat-abi=softfp -DNDEBUG=1 -Os")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_FRAMEWORK LAST)
config.site:
cross_compiling=yes
host=arm-webos-linux-gnueabi
host_alias=arm-webos-linux-gnueabi
LD="/root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-ld"
CC=" /root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-gcc"
CXX=" /root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-g++"
CPP=" /root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-gcc -E"
AR="/root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-ar"
AS="/root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-as"
NM="/root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-nm"
STRIP="/root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-strip"
RANLIB="/root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-ranlib"
OBJDUMP="/root/kodi-dev/arm-webos-linux-gnueabi_sdk-buildroot/usr/bin/arm-webos-linux-gnueabi-objdump"
CFLAGS="-fPIC -DPIC -mcpu=cortex-a9 -mtune=cortex-a53 -mfloat-abi=softfp -DNDEBUG=1 -Os $CFLAGS"
CXXFLAGS="-fPIC -DPIC -mcpu=cortex-a9 -mtune=cortex-a53 -mfloat-abi=softfp -static-libstdc++ -DNDEBUG=1 -Os -std=c++17 $CXXFLAGS"
CPPFLAGS="-fPIC -DPIC -mcpu=cortex-a9 -mtune=cortex-a53 -mfloat-abi=softfp -DNDEBUG=1 -Os $CPPFLAGS"
I found that my TV CPU is: Cortex-A55. Because I used pre-build Kodi (32 bit), I used same flags for building inputstream.ffmpegdirect.
How come you need to build ffmpegdirect? As far as I’m aware webos builds ship with ffmpegdirect?
If it works on android maybe it’s some networking api on webos misbehaving. I also tested and mac and it works as expected.
I checked the provided file from here, and it does not include the inputstream.ffmpegdirect, it provides inputstream.adaptive.
@sundermann can we include ffmpegdirect in the webos builds?
The nightly builds have it. Omega/Piers https://jenkins.kodi.tv/job/webos-docker/8359/
No. Buildsteps are a legacy CI thing. Webos does not need one as it's baked into a Jenkins pipeline already.