inputstream.ffmpegdirect icon indicating copy to clipboard operation
inputstream.ffmpegdirect copied to clipboard

FFmpeg HTTP proxy port not applied correctly

Open arman1371 opened this issue 9 months ago • 12 comments

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.

arman1371 avatar May 03 '25 21:05 arman1371

Are you running kodi omega or piers?

phunkyfish avatar May 04 '25 05:05 phunkyfish

It is on Kodi Omega. From here: https://kodi.tv/download/webos/

arman1371 avatar May 04 '25 08:05 arman1371

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.

phunkyfish avatar May 04 '25 10:05 phunkyfish

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>

arman1371 avatar May 04 '25 10:05 arman1371

Ok, that looks fine. Do you get the same behaviour on a different os? Like Mac or windows?

phunkyfish avatar May 04 '25 10:05 phunkyfish

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.

arman1371 avatar May 04 '25 11:05 arman1371

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.

phunkyfish avatar May 04 '25 15:05 phunkyfish

I checked the provided file from here, and it does not include the inputstream.ffmpegdirect, it provides inputstream.adaptive.

arman1371 avatar May 04 '25 17:05 arman1371

@sundermann can we include ffmpegdirect in the webos builds?

phunkyfish avatar May 04 '25 17:05 phunkyfish

The nightly builds have it. Omega/Piers https://jenkins.kodi.tv/job/webos-docker/8359/

sundermann avatar May 04 '25 18:05 sundermann

Is there any plan to create build step for WebOS here?

If not, maybe I can start it.

arman1371 avatar May 04 '25 18:05 arman1371

No. Buildsteps are a legacy CI thing. Webos does not need one as it's baked into a Jenkins pipeline already.

fuzzard avatar May 04 '25 19:05 fuzzard