Play RAR files without extract them on SMB/NFS (RAR2FS?)

This is general talk area for things that NOT RELATED WITH TV! Instead, about internal works like web site, forum, wiki, or talking, etc...

User avatar
juusso
SamyGO Moderator
Posts: 10129
Joined: Sun Mar 07, 2010 6:20 pm

Re: Play RAR files without extract them on SMB/NFS (RAR2FS?)

Post by juusso »

Code: Select all

# rar2fs --exclude=.lock --fake-iso --seek-length=2 -o allow_other ./Shrek.3D.rar ./test -f
rar2_init()
rar2_getattr2()   /
MISS    /   (collision: no)
STAT retrieved for /dtv/usb/sda/TV/rar/
rar2_getattr2()   /
MISS    /   (collision: no)
STAT retrieved for /dtv/usb/sda/TV/rar/
rar2_getattr2()   /
MISS    /   (collision: no)
STAT retrieved for /dtv/usb/sda/TV/rar/
rar2_readdir2()   /
listrar()   /   arch=/dtv/usb/sda/TV/rar/Shrek.3D.rar
Looking up /Shrek.3D.avi in cache
Adding /Shrek.3D.avi to cache
rar2_getattr2()   /Shrek.3D.avi
rar2_getattr2()   /
MISS    /   (collision: no)
STAT retrieved for /dtv/usb/sda/TV/rar/
rar2_getattr2()   /
MISS    /   (collision: no)
STAT retrieved for /dtv/usb/sda/TV/rar/
rar2_getattr2()   /Shrek.3D.avi
rar2_getattr2()   /Shrek.3D.trp
MISS    /Shrek.3D.trp   (collision: no)
rar2_open()   /Shrek.3D.avi
(00566) OPEN    /Shrek.3D.avi [0x0][called from 00276]
(00566) ALLOC   /Shrek.3D.avi [0xa86d0         ]
PIPE 0xa8740 created towards child 607
Reader thread started, fp=0xa8740
preload_index()   /Shrek.3D.avi
Preloading index for /dtv/usb/sda/TV/rar/Shrek.3D.r2i
Reader thread wakeup, select()=1
rar2_read()   /Shrek.3D.avi   size=16384, offset=0, fh=689872
PID 00566 calling lread_rar(), seq = 1, size=16384, offset=0/0
Reader thread wakeup, select()=1
Reader thread acknowledge
1083434128 thread wakeup (1, 1)
lread_rar: RETURN 16384
Reader thread wakeup, select()=1
rar2_flush()   /Shrek.3D.avi
(00566) FLUSH   /Shrek.3D.avi [0xa86d0         ][called from 00276]
lflush()   /Shrek.3D.avi
rar2_release()   /Shrek.3D.avi
(00566) RELEASE /Shrek.3D.avi [0xa86d0         ]
Reader thread wakeup, select()=1
Reader thread stopped
PIPE 0xa8740 closed towards child 00607
(00566) FREE    /Shrek.3D.avi [0xa86d0         ]
rar2_getattr2()   /Shrek.3D.smi
MISS    /Shrek.3D.smi   (collision: no)
rar2_getattr2()   /Shrek.3D.SMI
MISS    /Shrek.3D.SMI   (collision: no)
rar2_getattr2()   /Shrek.3D.srt
MISS    /Shrek.3D.srt   (collision: no)
rar2_getattr2()   /Shrek.3D.SRT
MISS    /Shrek.3D.SRT   (collision: no)
rar2_getattr2()   /Shrek.3D.sub
MISS    /Shrek.3D.sub   (collision: no)
rar2_getattr2()   /Shrek.3D.SUB
MISS    /Shrek.3D.SUB   (collision: no)
rar2_getattr2()   /Shrek.3D.ttxt
MISS    /Shrek.3D.ttxt   (collision: no)
rar2_getattr2()   /Shrek.3D.TTXT
MISS    /Shrek.3D.TTXT   (collision: no)
rar2_getattr2()   /Shrek.3D.txt
MISS    /Shrek.3D.txt   (collision: no)
rar2_getattr2()   /Shrek.3D.TXT
MISS    /Shrek.3D.TXT   (collision: no)
rar2_getattr2()   /Shrek.3D.avi
rar2_open()   /Shrek.3D.avi
(00566) OPEN    /Shrek.3D.avi [0x0][called from 00276]
(00566) ALLOC   /Shrek.3D.avi [0xa86d0         ]
PIPE 0xa8740 created towards child 610
Reader thread started, fp=0xa8740
preload_index()   /Shrek.3D.avi
Preloading index for /dtv/usb/sda/TV/rar/Shrek.3D.r2i
rar2_flush()   /Shrek.3D.avi
(00566) FLUSH   /Shrek.3D.avi [0xa86d0         ][called from 00276]
lflush()   /Shrek.3D.avi
rar2_release()   /Shrek.3D.avi
(00566) RELEASE /Shrek.3D.avi [0xa86d0         ]
Reader thread wakeup, select()=1
Reader thread stopped
PIPE 0xa8740 closed towards child 00610
(00566) FREE    /Shrek.3D.avi [0xa86d0         ]
rar2_open()   /Shrek.3D.avi
(00566) OPEN    /Shrek.3D.avi [0x0][called from 00276]
(00566) ALLOC   /Shrek.3D.avi [0xa86d0         ]
PIPE 0xa8740 created towards child 613
Reader thread started, fp=0xa8740
preload_index()   /Shrek.3D.avi
Preloading index for /dtv/usb/sda/TV/rar/Shrek.3D.r2i
rar2_read()   /Shrek.3D.avi   size=49152, offset=16384, fh=689872
PID 00566 calling lread_rar(), seq = 1, size=49152, offset=16384/0
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread acknowledge
1083434128 thread wakeup (1, 1)
lread_rar: RETURN 49152
rar2_getattr2()   /Shrek.3D.avi
rar2_read()   /Shrek.3D.avi   size=36864, offset=182042624, fh=689872
PID 00566 calling lread_rar(), seq = 2, size=36864, offset=182042624/65536
lread_rar: RETURN 36864
rar2_read()   /Shrek.3D.avi   size=65536, offset=182079488, fh=689872
PID 00566 calling lread_rar(), seq = 2, size=65536, offset=182079488/65536
lread_rar: RETURN 65536
rar2_read()   /Shrek.3D.avi   size=131072, offset=182145024, fh=689872
PID 00566 calling lread_rar(), seq = 2, size=131072, offset=182145024/65536
lread_rar: RETURN 131072
rar2_read()   /Shrek.3D.avi   size=131072, offset=182276096, fh=689872
PID 00566 calling lread_rar(), seq = 2, size=131072, offset=182276096/65536
lread_rar: RETURN 131072
rar2_read()   /Shrek.3D.avi   size=131072, offset=182407168, fh=689872
PID 00566 calling lread_rar(), seq = 2, size=131072, offset=182407168/65536
lread_rar: RETURN 131072
rar2_read()   /Shrek.3D.avi   size=131072, offset=182538240, fh=689872
PID 00566 calling lread_rar(), seq = 2, size=131072, offset=182538240/65536
lread_rar: RETURN 131072
rar2_read()   /Shrek.3D.avi   size=131072, offset=182669312, fh=689872
PID 00566 calling lread_rar(), seq = 2, size=131072, offset=182669312/65536
lread_rar: RETURN 131072
rar2_read()   /Shrek.3D.avi   size=131072, offset=182800384, fh=689872
PID 00566 calling lread_rar(), seq = 2, size=131072, offset=182800384/65536
lread_rar: RETURN 131072
rar2_read()   /Shrek.3D.avi   size=73728, offset=182931456, fh=689872
PID 00566 calling lread_rar(), seq = 2, size=73728, offset=182931456/65536
lread_rar: RETURN 73728
rar2_getattr2()   /Shrek.3D.avi
rar2_flush()   /Shrek.3D.avi
(00566) FLUSH   /Shrek.3D.avi [0xa86d0         ][called from 00276]
lflush()   /Shrek.3D.avi
rar2_release()   /Shrek.3D.avi
(00566) RELEASE /Shrek.3D.avi [0xa86d0         ]
Reader thread wakeup, select()=1
Reader thread stopped
PIPE 0xa8740 closed towards child 00613
(00566) FREE    /Shrek.3D.avi [0xa86d0         ]
rar2_getattr2()   /Shrek.3D.avi
rar2_open()   /Shrek.3D.avi
(00566) OPEN    /Shrek.3D.avi [0x0][called from 00276]
(00566) ALLOC   /Shrek.3D.avi [0xa86d0         ]
PIPE 0xa8740 created towards child 619
Reader thread started, fp=0xa8740
preload_index()   /Shrek.3D.avi
Preloading index for /dtv/usb/sda/TV/rar/Shrek.3D.r2i
rar2_read()   /Shrek.3D.avi   size=4096, offset=0, fh=689872
PID 00566 calling lread_rar(), seq = 1, size=4096, offset=0/0
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread acknowledge
1083434128 thread wakeup (1, 1)
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=4096, fh=689872
PID 00566 calling lread_rar(), seq = 2, size=4096, offset=4096/4096
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=8192, fh=689872
PID 00566 calling lread_rar(), seq = 3, size=4096, offset=8192/8192
lread_rar: RETURN 4096
rar2_getattr2()   /Shrek.3D.avi
rar2_read()   /Shrek.3D.avi   size=4096, offset=0, fh=689872
PID 00566 calling lread_rar(), seq = 4, size=4096, offset=0/12288
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=8192, fh=689872
PID 00566 calling lread_rar(), seq = 5, size=4096, offset=8192/12288
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=182042624, fh=689872
PID 00566 calling lread_rar(), seq = 6, size=4096, offset=182042624/12288
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=0, fh=689872
PID 00566 calling lread_rar(), seq = 6, size=4096, offset=0/12288
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=8192, fh=689872
PID 00566 calling lread_rar(), seq = 7, size=4096, offset=8192/12288
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=12288, fh=689872
PID 00566 calling lread_rar(), seq = 8, size=4096, offset=12288/12288
lread_rar: RETURN 4096
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
rar2_read()   /Shrek.3D.avi   size=4096, offset=8192, fh=689872
PID 00566 calling lread_rar(), seq = 9, size=4096, offset=8192/16384
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=12288, fh=689872
PID 00566 calling lread_rar(), seq = 10, size=4096, offset=12288/16384
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=16384, fh=689872
PID 00566 calling lread_rar(), seq = 11, size=4096, offset=16384/16384
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=12288, fh=689872
PID 00566 calling lread_rar(), seq = 12, size=4096, offset=12288/20480
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=16384, fh=689872
PID 00566 calling lread_rar(), seq = 13, size=4096, offset=16384/20480
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=20480, fh=689872
PID 00566 calling lread_rar(), seq = 14, size=4096, offset=20480/20480
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=16384, fh=689872
PID 00566 calling lread_rar(), seq = 15, size=4096, offset=16384/24576
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=20480, fh=689872
PID 00566 calling lread_rar(), seq = 16, size=4096, offset=20480/24576
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=24576, fh=689872
PID 00566 calling lread_rar(), seq = 17, size=4096, offset=24576/24576
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=20480, fh=689872
PID 00566 calling lread_rar(), seq = 18, size=4096, offset=20480/28672
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=24576, fh=689872
PID 00566 calling lread_rar(), seq = 19, size=4096, offset=24576/28672
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=28672, fh=689872
PID 00566 calling lread_rar(), seq = 20, size=4096, offset=28672/28672
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=24576, fh=689872
PID 00566 calling lread_rar(), seq = 21, size=4096, offset=24576/32768
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=28672, fh=689872
PID 00566 calling lread_rar(), seq = 22, size=4096, offset=28672/32768
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=32768, fh=689872
PID 00566 calling lread_rar(), seq = 23, size=4096, offset=32768/32768
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=28672, fh=689872
PID 00566 calling lread_rar(), seq = 24, size=4096, offset=28672/36864
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=32768, fh=689872
PID 00566 calling lread_rar(), seq = 25, size=4096, offset=32768/36864
lread_rar: RETURN 4096
Reader thread wakeup, select()=1
rar2_read()   /Shrek.3D.avi   size=4096, offset=36864, fh=689872
PID 00566 calling lread_rar(), seq = 26, size=4096, offset=36864/36864
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=32768, fh=689872
PID 00566 calling lread_rar(), seq = 27, size=4096, offset=32768/40960
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=36864, fh=689872
PID 00566 calling lread_rar(), seq = 28, size=4096, offset=36864/40960
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=40960, fh=689872
PID 00566 calling lread_rar(), seq = 29, size=4096, offset=40960/40960
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=36864, fh=689872
PID 00566 calling lread_rar(), seq = 30, size=4096, offset=36864/45056
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=40960, fh=689872
PID 00566 calling lread_rar(), seq = 31, size=4096, offset=40960/45056
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=45056, fh=689872
PID 00566 calling lread_rar(), seq = 32, size=4096, offset=45056/45056
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=40960, fh=689872
PID 00566 calling lread_rar(), seq = 33, size=4096, offset=40960/49152
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=45056, fh=689872
PID 00566 calling lread_rar(), seq = 34, size=4096, offset=45056/49152
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=49152, fh=689872
PID 00566 calling lread_rar(), seq = 35, size=4096, offset=49152/49152
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=45056, fh=689872
PID 00566 calling lread_rar(), seq = 36, size=4096, offset=45056/53248
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=49152, fh=689872
PID 00566 calling lread_rar(), seq = 37, size=4096, offset=49152/53248
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=53248, fh=689872
PID 00566 calling lread_rar(), seq = 38, size=4096, offset=53248/53248
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=49152, fh=689872
PID 00566 calling lread_rar(), seq = 39, size=4096, offset=49152/57344
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=53248, fh=689872
PID 00566 calling lread_rar(), seq = 40, size=4096, offset=53248/57344
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=57344, fh=689872
PID 00566 calling lread_rar(), seq = 41, size=4096, offset=57344/57344
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=53248, fh=689872
PID 00566 calling lread_rar(), seq = 42, size=4096, offset=53248/61440
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=57344, fh=689872
PID 00566 calling lread_rar(), seq = 43, size=4096, offset=57344/61440
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=61440, fh=689872
PID 00566 calling lread_rar(), seq = 44, size=4096, offset=61440/61440
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=57344, fh=689872
PID 00566 calling lread_rar(), seq = 45, size=4096, offset=57344/65536
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=61440, fh=689872
PID 00566 calling lread_rar(), seq = 46, size=4096, offset=61440/65536
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=65536, fh=689872
PID 00566 calling lread_rar(), seq = 47, size=4096, offset=65536/65536
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=61440, fh=689872
PID 00566 calling lread_rar(), seq = 48, size=4096, offset=61440/69632
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=65536, fh=689872
PID 00566 calling lread_rar(), seq = 49, size=4096, offset=65536/69632
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=69632, fh=689872
PID 00566 calling lread_rar(), seq = 50, size=4096, offset=69632/69632
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=65536, fh=689872
PID 00566 calling lread_rar(), seq = 51, size=4096, offset=65536/73728
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=69632, fh=689872
PID 00566 calling lread_rar(), seq = 52, size=4096, offset=69632/73728
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=73728, fh=689872
PID 00566 calling lread_rar(), seq = 53, size=4096, offset=73728/73728
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=69632, fh=689872
PID 00566 calling lread_rar(), seq = 54, size=4096, offset=69632/77824
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=73728, fh=689872
PID 00566 calling lread_rar(), seq = 55, size=4096, offset=73728/77824
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=77824, fh=689872
PID 00566 calling lread_rar(), seq = 56, size=4096, offset=77824/77824
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=73728, fh=689872
PID 00566 calling lread_rar(), seq = 57, size=4096, offset=73728/81920
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=77824, fh=689872
PID 00566 calling lread_rar(), seq = 58, size=4096, offset=77824/81920
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=90112, fh=689872
PID 00566 calling lread_rar(), seq = 59, size=4096, offset=90112/81920
lread_rar: RETURN 4096
rar2_read()   /Shrek.3D.avi   size=4096, offset=77824, fh=689872
PID 00566 calling lread_rar(), seq = 60, size=4096, offset=77824/94208
lread_rar: RETURN 4096
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
Reader thread wakeup, select()=1
rar2_flush()   /Shrek.3D.avi
(00566) FLUSH   /Shrek.3D.avi [0xa86d0         ][called from 00276]
lflush()   /Shrek.3D.avi
rar2_release()   /Shrek.3D.avi
(00566) RELEASE /Shrek.3D.avi [0xa86d0         ]
Reader thread wakeup, select()=1
Reader thread stopped
PIPE 0xa8740 closed towards child 00619
(00566) FREE    /Shrek.3D.avi [0xa86d0         ]
rar2_getattr2()   /
MISS    /   (collision: no)
STAT retrieved for /dtv/usb/sda/TV/rar/
rar2_getattr2()   /
MISS    /   (collision: no)
STAT retrieved for /dtv/usb/sda/TV/rar/
rar2_getattr2()   /
MISS    /   (collision: no)
STAT retrieved for /dtv/usb/sda/TV/rar/
rar2_readdir2()   /
listrar()   /   arch=/dtv/usb/sda/TV/rar/Shrek.3D.rar
Looking up /Shrek.3D.avi in cache
rar2_getattr2()   /Shrek.3D.avi
rar2_getattr2()   /
MISS    /   (collision: no)
STAT retrieved for /dtv/usb/sda/TV/rar/
Only few seconds played and then stopped by mediaplayer.
LE40B653T5W,UE40D6750,UE65Q8C
Have questions? Read SamyGO Wiki, Search on forum first!
FFB (v0.8), FFB for CI+ . Get root on: C series, D series, E series, F series, H series. rooting K series, exeDSP/exeTV patches[C/D/E/F/H]

DO NOT EVER INSTALL FIRMWARE UPGRADE
hasse69
Posts: 66
Joined: Fri Feb 10, 2012 8:09 pm

Re: Play RAR files without extract them on SMB/NFS (RAR2FS?)

Post by hasse69 »

Ok, this problem however is somewhat out of my hands :( The support for playback of compressed RARs is limited very much to how the MediaPlayer is trying to access the file in question and what tricks it is willing to accept :P
As you can see from the log, early access goes from start of file to end of file (trying to access the index at the end), since that is not possible without extracting the entire file first rar2fs fakes the result and returns a zero filled buffer. Some players accept this and just continue, but some do not like it. What you can try is to start rar2fs with the --save-eof flag. It will post-process the file and create a meta-data entry that will be used in case end-of-file is accessed by the player. Hence though that it will then take some time before the file is play-backed, but this is only the first time. This provided of course that your file system is writable.

In any case, the reason for the crash is the calls to pthread_exit(). I do not know why you experiencing this problem on you platfrom but something is not healthy in your pthreads implementation.
pthread_exit() is the recommended way to end a thread, and is the only way if you wish to return a result code that can be picked up by pthread_join(). It should plain work! I will think about this, but I really can not see that this change can be committed. Unless there is some simple way to differentiate your system from others...

EDIT: Also note that just because one compressed RAR fails to play-back properly does not mean that all does. Most files I have tried work just fine (but you can not seek), but then there are some new multi-part AVI 2.0 files I stumbled into lately that is really causing problems.

EDIT2: And I hope I interpreted you correctly when you said "self" you ment that playback stopped by the *mediaplayer* and not yourself?
User avatar
juusso
SamyGO Moderator
Posts: 10129
Joined: Sun Mar 07, 2010 6:20 pm

Re: Play RAR files without extract them on SMB/NFS (RAR2FS?)

Post by juusso »

--save-eof flag:

Seems it works! yes, buffering time was quite long, but only for first time. Tested one minute, no stops, no freezing or extra buffering. :)

Yes, last post i ment, playback stopped by mediaplayer :oops:

But now everything is almost fine.
You do not have the required permissions to view the files attached to this post.
LE40B653T5W,UE40D6750,UE65Q8C
Have questions? Read SamyGO Wiki, Search on forum first!
FFB (v0.8), FFB for CI+ . Get root on: C series, D series, E series, F series, H series. rooting K series, exeDSP/exeTV patches[C/D/E/F/H]

DO NOT EVER INSTALL FIRMWARE UPGRADE
hasse69
Posts: 66
Joined: Fri Feb 10, 2012 8:09 pm

Re: Play RAR files without extract them on SMB/NFS (RAR2FS?)

Post by hasse69 »

juuso wrote:--save-eof flag:

Seems it works! yes, buffering time was quite long, but only for first time. Tested one minute, no stops, no freezing or extra buffering. :)
Good! Be aware though. This was in comparison a rather small .avi ;) If you have large .avi files in the gigabyte range, first time you try to playback the file it will take a very loooong time :o
This since post-processing means extraction of the entire file to memory (split in chunks). The RAR algorithm does not allow decompression from a given offset, you have to extract from the beginning.
I would try to stay away from the --save-eof option if possible. Try with some other files. Maybe this was a bad example :roll:
But then, uncompressed RARs is really what this filesystem initially was targeting. Support was added for compressed/encrypted archives simply because many subtitles comes in that format.

EDIT: And...reconfigure now without the --enable-debug. It consumes some CPU cycles ;)
Last edited by hasse69 on Tue Feb 21, 2012 9:36 pm, edited 1 time in total.
arris69
Official SamyGO Developer
Posts: 1700
Joined: Fri Oct 02, 2009 8:52 am
Location: Austria/Vienna (no Kangaroos here)
Contact:

Re: Play RAR files without extract them on SMB/NFS (RAR2FS?)

Post by arris69 »

hasse69 wrote:...
So, the only way I can see that you can end up with this problem is if a mix of code is being used from different versions of unrar source.
How did you build this? Did you verify that -DRARDLL was set for each file being built? This is the output from a clean build

Code: Select all

[/share/Public/project/rar2fs/unrar] # make -f makefile.unix clean
[/share/Public/project/rar2fs/unrar] # make -f makefile.unix lib
...
so in the makefile.unix a

Code: Select all

rm -f *.o
is missing in the lib: section, then it's not really logical to call clean after make to build the library so the unrar cmd-line tool gets deleted (whats make clean normaly should do)...
don't like to know what author of unrar smokes...

marked as SOLVED
thnx
arris
User avatar
juusso
SamyGO Moderator
Posts: 10129
Joined: Sun Mar 07, 2010 6:20 pm

Re: Play RAR files without extract them on SMB/NFS (RAR2FS?)

Post by juusso »

hasse69 wrote: I would try to stay away from the --save-eof option if possible.
i see. Then might here is another solution for that?
LE40B653T5W,UE40D6750,UE65Q8C
Have questions? Read SamyGO Wiki, Search on forum first!
FFB (v0.8), FFB for CI+ . Get root on: C series, D series, E series, F series, H series. rooting K series, exeDSP/exeTV patches[C/D/E/F/H]

DO NOT EVER INSTALL FIRMWARE UPGRADE
hasse69
Posts: 66
Joined: Fri Feb 10, 2012 8:09 pm

Re: Play RAR files without extract them on SMB/NFS (RAR2FS?)

Post by hasse69 »

arris69 wrote:
so in the makefile.unix a

Code: Select all

rm -f *.o
is missing in the lib: section, then it's not really logical to call clean after make to build the library so the unrar cmd-line tool gets deleted (whats make clean normaly should do)...
Good observation. I will forward this to the maintainer at rarlabs. I might also add a section about this in the rar2fs Wiki/FAQ. I have never really thought about this problem since I rarely (if ever) build the unrar command line tool ;) Point though is, unrar source at rarlabs is not really an officially maintained project of its own. Simply put it is just automated extraction and massage of the source files used to build WinRAR. But that still does not mean it should not work as expected.
hasse69
Posts: 66
Joined: Fri Feb 10, 2012 8:09 pm

Re: Play RAR files without extract them on SMB/NFS (RAR2FS?)

Post by hasse69 »

juuso wrote: i see. Then might here is another solution for that?
Depends what you are after. Together with rar2fs there is also a command line tool built named mkr2i. Its purpose is similar to what the --save-eof does but you choose which files needs extra post-processing.
It also supports .mkv files which --save-eof does not.
But it is cumbersome and requires a Windows based tool for post-processing and you also need to extract the file in its whole somewhere. It can be removed after the creation of the .r2i file but the whole point of not having to extract the file is sort of lost :roll: You can read more about it on the rar2fs Wiki.
There is no real issue with using --save-eof, it is just that there are still no guarantees and the extra initial load time and the requirement that the fs has to be writable puts more requirement on the user. That is why it has not officially been mentioned in any docs. I have started to sketch on something much more powerful and seamless. But this work is far from complete and currently I do not even know if it is possible.
hasse69
Posts: 66
Joined: Fri Feb 10, 2012 8:09 pm

Re: Play RAR files without extract them on SMB/NFS (RAR2FS?)

Post by hasse69 »

There are some more things that puzzles me.
I went through the log file from you successful run and this was something not expected

Code: Select all

preload_index()   /Shrek.3D.avi

Preloading index for /dtv/usb/sda/TV/rar/Shrek.3D.r2i

Copying 36864 bytes from preloaded offset @ 182042624

lread_rar: RETURN -25
I think I see the reason for the error, it is most likely because pread() is accessing outside EOF. This looks like a bug in rar2fs. Can you provide a config.log and config.h file from your *cross-compiled* build of rar2fs? This code should never be reached if mmap() is properly supported!

Also, something seems somewhat fishy in the scheduler. After each read, rar2fs tries to wake-up the reader thread, but it does not wake-up until after a long time and then there are several queued wake-up requests processed all at once!? To me this looks like the time-slice offered to each process/thread is too long.
The effect of this is that you may get starvation of the I/O buffer :( I could try a patch to raise the priority of the reader thread, or you could try to start rar2fs using a negative nice level, eg. 'nice --20 ./rar2fs ....', and then send me a new playback log. But this is only if your are interested in troubleshooting this further of course ;) But I really appreciate all the help I can get since the goal is to have rar2fs run on as many platforms as possible.


EDIT: The error is due to misuse of errno, Nothing serious but it is fixed now. Regarding the scheduling I can see similar behavior on another Linux box. I think it simply is a small glitch and that the main process sometimes gets more CPU than normal. I have never seen any buffer under-runs because of this. However, if this is growing into a problem I might need to play with the thread scheduling policies, but for now it should be ok.
Still interested in the config.log and config.h file from the cross-compiled build. Even though it was a small bug in rar2fs you should not have reached this erroneous code fragment in the first place :(
User avatar
juusso
SamyGO Moderator
Posts: 10129
Joined: Sun Mar 07, 2010 6:20 pm

Re: Play RAR files without extract them on SMB/NFS (RAR2FS?)

Post by juusso »

Yes sure, my goal is rar2fs running well on our Samy`s and glad to hear you`re willing to help us!
The config.log i gave you already here (download), powering the vmware to get other requested files.
LE40B653T5W,UE40D6750,UE65Q8C
Have questions? Read SamyGO Wiki, Search on forum first!
FFB (v0.8), FFB for CI+ . Get root on: C series, D series, E series, F series, H series. rooting K series, exeDSP/exeTV patches[C/D/E/F/H]

DO NOT EVER INSTALL FIRMWARE UPGRADE

Post Reply

Return to “General”