nareix / joy4

Golang audio/video library and streaming server
MIT License
2.67k stars 499 forks source link

Unable to proxy rtmp (EOF) #4

Closed thesyncim closed 8 years ago

thesyncim commented 8 years ago

test server rtmp://opinion.azorestv.com/clients/57040dd71756e561cece4900

rtmp: handshakeClient: server version 3 0 1 1 rtmp: > connect('clients') host=opinion.azorestv.com:1935 rtmp: write chunk msgdatalen=214 msgsid=0 00000000 02 00 07 63 6f 6e 6e 65 63 74 00 3f f0 00 00 00 |...connect.?....| 00000010 00 00 00 03 00 04 66 70 61 64 01 00 00 0c 63 61 |......fpad....ca| 00000020 70 61 62 69 6c 69 74 69 65 73 00 40 2e 00 00 00 |pabilities.@....| 00000030 00 00 00 00 0b 61 75 64 69 6f 43 6f 64 65 63 73 |.....audioCodecs| 00000040 00 40 af ce 00 00 00 00 00 00 0b 76 69 64 65 6f |.@.........video| 00000050 43 6f 64 65 63 73 00 40 6f 80 00 00 00 00 00 00 |Codecs.@o.......| 00000060 0d 76 69 64 65 6f 46 75 6e 63 74 69 6f 6e 00 3f |.videoFunction.?| 00000070 f0 00 00 00 00 00 00 00 03 61 70 70 02 00 07 63 |.........app...c| 00000080 6c 69 65 6e 74 73 00 08 66 6c 61 73 68 56 65 72 |lients..flashVer| 00000090 02 00 0e 4d 41 43 20 32 32 2c 30 2c 30 2c 31 39 |...MAC 22,0,0,19| 000000a0 32 00 05 74 63 55 72 6c 02 00 28 72 74 6d 70 3a |2..tcUrl..(rtmp:| 000000b0 2f 2f 6f 70 69 6e 69 6f 6e 2e 61 7a 6f 72 65 73 |//opinion.azores| 000000c0 74 76 2e 63 6f 6d 3a 31 39 33 35 2f 63 6c 69 65 |tv.com:1935/clie| 000000d0 6e 74 73 00 00 09 |nts...| rtmp: write chunk msgdatalen=4 msgsid=0 00000000 00 4c 4b 40 |.LK@| rtmp: write chunk msgdatalen=5 msgsid=0 00000000 00 4c 4b 40 02 |.LK@.| rtmp: write chunk msgdatalen=4 msgsid=0 00000000 08 00 00 00 |....| rtmp: chunk msgsid=0 msgtypeid=5 msghdrtype=0 len=4 left=0 rtmp: chunk data 00000000 00 26 25 a0 |.&%.| rtmp: write chunk msgdatalen=4 msgsid=0 00000000 00 26 25 a0 |.&%.| rtmp: chunk msgsid=0 msgtypeid=6 msghdrtype=0 len=5 left=0 rtmp: chunk data 00000000 00 26 25 a0 02 |.&%..| rtmp: chunk msgsid=0 msgtypeid=4 msghdrtype=0 len=6 left=0 rtmp: chunk data 00000000 00 00 00 00 00 00 |......| rtmp: chunk msgsid=0 msgtypeid=1 msghdrtype=0 len=4 left=0 rtmp: chunk data 00000000 00 00 10 00 |....| rtmp: chunk msgsid=0 msgtypeid=20 msghdrtype=0 len=261 left=0 rtmp: chunk data 00000000 02 00 07 5f 72 65 73 75 6c 74 00 3f f0 00 00 00 |..._result.?....| 00000010 00 00 00 03 00 06 66 6d 73 56 65 72 02 00 0e 46 |......fmsVer...F| 00000020 4d 53 2f 33 2c 35 2c 37 2c 37 30 30 39 00 0c 63 |MS/3,5,7,7009..c| 00000030 61 70 61 62 69 6c 69 74 69 65 73 00 40 3f 00 00 |apabilities.@?..| 00000040 00 00 00 00 00 04 6d 6f 64 65 00 3f f0 00 00 00 |......mode.?....| 00000050 00 00 00 00 00 09 03 00 05 6c 65 76 65 6c 02 00 |.........level..| 00000060 06 73 74 61 74 75 73 00 04 63 6f 64 65 02 00 1d |.status..code...| 00000070 4e 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6f |NetConnection.Co| 00000080 6e 6e 65 63 74 2e 53 75 63 63 65 73 73 00 0b 64 |nnect.Success..d| 00000090 65 73 63 72 69 70 74 69 6f 6e 02 00 15 43 6f 6e |escription...Con| 000000a0 6e 65 63 74 69 6f 6e 20 73 75 63 63 65 65 64 65 |nection succeede| 000000b0 64 2e 00 04 64 61 74 61 08 00 00 00 00 00 07 76 |d...data.......v| 000000c0 65 72 73 69 6f 6e 02 00 0a 33 2c 35 2c 37 2c 37 |ersion...3,5,7,7| 000000d0 30 30 39 00 00 09 00 08 63 6c 69 65 6e 74 69 64 |009.....clientid| 000000e0 00 41 d7 75 11 16 c0 00 00 00 0e 6f 62 6a 65 63 |.A.u.......objec| 000000f0 74 45 6e 63 6f 64 69 6e 67 00 00 00 00 00 00 00 |tEncoding.......| 00000100 00 00 00 00 09 |.....| [] rtmp: < _result() of connect rtmp: > createStream() rtmp: write chunk msgdatalen=25 msgsid=0 00000000 02 00 0c 63 72 65 61 74 65 53 74 72 65 61 6d 00 |...createStream.| 00000010 40 00 00 00 00 00 00 00 05 |@........| rtmp: write chunk msgdatalen=10 msgsid=0 00000000 00 03 00 00 00 00 00 00 00 64 |.........d| rtmp: chunk msgsid=0 msgtypeid=20 msghdrtype=0 len=29 left=0 rtmp: chunk data 00000000 02 00 07 5f 72 65 73 75 6c 74 00 40 00 00 00 00 |..._result.@....| 00000010 00 00 00 05 00 3f f0 00 00 00 00 00 00 |.....?.......| rtmp: > play('57040dd71756e561cece4900') rtmp: write chunk msgdatalen=44 msgsid=1 00000000 02 00 04 70 6c 61 79 00 00 00 00 00 00 00 00 00 |...play.........| 00000010 05 02 00 18 35 37 30 34 30 64 64 37 31 37 35 36 |....57040dd71756| 00000020 65 35 36 31 63 65 63 65 34 39 30 30 |e561cece4900| rtmp: chunk msgsid=0 msgtypeid=4 msghdrtype=0 len=6 left=0 rtmp: chunk data 00000000 00 00 00 00 00 01 |......| rtmp: chunk msgsid=1 msgtypeid=20 msghdrtype=0 len=136 left=0 rtmp: chunk data 00000000 02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00 |...onStatus.....| 00000010 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 06 |........level...| 00000020 73 74 61 74 75 73 00 04 63 6f 64 65 02 00 14 4e |status..code...N| 00000030 65 74 53 74 72 65 61 6d 2e 50 6c 61 79 2e 52 65 |etStream.Play.Re| 00000040 73 65 74 00 0b 64 65 73 63 72 69 70 74 69 6f 6e |set..description| 00000050 02 00 1f 50 6c 61 79 69 6e 67 20 61 6e 64 20 72 |...Playing and r| 00000060 65 73 65 74 74 69 6e 67 20 66 61 6b 65 6c 69 76 |esetting fakeliv| 00000070 65 2e 00 08 63 6c 69 65 6e 74 69 64 00 41 d7 75 |e...clientid.A.u| 00000080 11 16 c0 00 00 00 00 09 |........| rtmp: chunk msgsid=1 msgtypeid=20 msghdrtype=0 len=172 left=0 rtmp: chunk data 00000000 02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00 |...onStatus.....| 00000010 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 06 |........level...| 00000020 73 74 61 74 75 73 00 04 63 6f 64 65 02 00 14 4e |status..code...N| 00000030 65 74 53 74 72 65 61 6d 2e 50 6c 61 79 2e 53 74 |etStream.Play.St| 00000040 61 72 74 00 0b 64 65 73 63 72 69 70 74 69 6f 6e |art..description| 00000050 02 00 19 53 74 61 72 74 65 64 20 70 6c 61 79 69 |...Started playi| 00000060 6e 67 20 66 61 6b 65 6c 69 76 65 2e 00 08 63 6c |ng fakelive...cl| 00000070 69 65 6e 74 69 64 00 41 d7 75 11 16 c0 00 00 00 |ientid.A.u......| 00000080 0a 69 73 46 61 73 74 50 6c 61 79 01 00 00 0e 74 |.isFastPlay....t| 00000090 69 6d 65 63 6f 64 65 4f 66 66 73 65 74 02 00 09 |imecodeOffset...| 000000a0 35 37 38 30 33 38 38 32 4c 00 00 09 |57803882L...| rtmp: chunk msgsid=1 msgtypeid=18 msghdrtype=1 len=24 left=0 rtmp: chunk data 00000000 02 00 11 7c 52 74 6d 70 53 61 6d 70 6c 65 41 63 |...|RtmpSampleAc| 00000010 63 65 73 73 01 00 01 00 |cess....| rtmp: chunk msgsid=1 msgtypeid=18 msghdrtype=0 len=44 left=0 rtmp: chunk data 00000000 02 00 08 6f 6e 53 74 61 74 75 73 03 00 04 63 6f |...onStatus...co| 00000010 64 65 02 00 14 4e 65 74 53 74 72 65 61 6d 2e 44 |de...NetStream.D| 00000020 61 74 61 2e 53 74 61 72 74 00 00 09 |ata.Start...| rtmp: chunk msgsid=0 msgtypeid=4 msghdrtype=0 len=6 left=0 rtmp: chunk data 00000000 00 20 00 00 00 01 |. ....| rtmp: chunk msgsid=1 msgtypeid=18 msghdrtype=1 len=581 left=0 rtmp: chunk data 00000000 02 00 0a 6f 6e 4d 65 74 61 44 61 74 61 03 00 09 |...onMetaData...| 00000010 74 72 61 63 6b 69 6e 66 6f 0a 00 00 00 02 03 00 |trackinfo.......| 00000020 08 6c 61 6e 67 75 61 67 65 02 00 03 75 6e 64 00 |.language...und.| 00000030 09 74 69 6d 65 73 63 61 6c 65 00 40 39 00 00 00 |.timescale.@9...| 00000040 00 00 00 00 06 6c 65 6e 67 74 68 00 40 ca 84 00 |.....length.@...| 00000050 00 00 00 00 00 11 73 61 6d 70 6c 65 64 65 73 63 |......sampledesc| 00000060 72 69 70 74 69 6f 6e 0a 00 00 00 01 03 00 0a 73 |ription........s| 00000070 61 6d 70 6c 65 74 79 70 65 02 00 04 61 76 63 31 |ampletype...avc1| 00000080 00 00 09 00 00 09 03 00 08 6c 61 6e 67 75 61 67 |.........languag| 00000090 65 02 00 03 65 6e 67 00 09 74 69 6d 65 73 63 61 |e...eng..timesca| 000000a0 6c 65 00 40 e5 88 80 00 00 00 00 00 06 6c 65 6e |le.@.........len| 000000b0 67 74 68 00 41 76 d6 c0 00 00 00 00 00 11 73 61 |gth.Av........sa| 000000c0 6d 70 6c 65 64 65 73 63 72 69 70 74 69 6f 6e 0a |mpledescription.| 000000d0 00 00 00 01 03 00 0a 73 61 6d 70 6c 65 74 79 70 |.......sampletyp| 000000e0 65 02 00 04 6d 70 34 61 00 00 09 00 00 09 00 0d |e...mp4a........| 000000f0 61 75 64 69 6f 63 68 61 6e 6e 65 6c 73 00 40 00 |audiochannels.@.| 00000100 00 00 00 00 00 00 00 0f 61 75 64 69 6f 73 61 6d |........audiosam| 00000110 70 6c 65 72 61 74 65 00 40 e5 88 80 00 00 00 00 |plerate.@.......| 00000120 00 0e 76 69 64 65 6f 66 72 61 6d 65 72 61 74 65 |..videoframerate| 00000130 00 40 39 00 00 00 00 00 00 00 06 61 61 63 61 6f |.@9........aacao| 00000140 74 00 40 00 00 00 00 00 00 00 00 08 61 76 63 6c |t.@.........avcl| 00000150 65 76 65 6c 00 40 3e 00 00 00 00 00 00 00 0a 61 |evel.@>........a| 00000160 76 63 70 72 6f 66 69 6c 65 00 40 50 80 00 00 00 |vcprofile.@P....| 00000170 00 00 00 0c 61 75 64 69 6f 63 6f 64 65 63 69 64 |....audiocodecid| 00000180 02 00 04 6d 70 34 61 00 0c 76 69 64 65 6f 63 6f |...mp4a..videoco| 00000190 64 65 63 69 64 02 00 04 61 76 63 31 00 05 77 69 |decid...avc1..wi| 000001a0 64 74 68 00 40 84 00 00 00 00 00 00 00 06 68 65 |dth.@.........he| 000001b0 69 67 68 74 00 40 76 80 00 00 00 00 00 00 0a 66 |ight.@v........f| 000001c0 72 61 6d 65 57 69 64 74 68 00 40 84 00 00 00 00 |rameWidth.@.....| 000001d0 00 00 00 0b 66 72 61 6d 65 48 65 69 67 68 74 00 |....frameHeight.| 000001e0 40 76 80 00 00 00 00 00 00 0c 64 69 73 70 6c 61 |@v........displa| 000001f0 79 57 69 64 74 68 00 40 84 00 00 00 00 00 00 00 |yWidth.@........| 00000200 0d 64 69 73 70 6c 61 79 48 65 69 67 68 74 00 40 |.displayHeight.@| 00000210 76 80 00 00 00 00 00 00 09 66 72 61 6d 65 72 61 |v........framera| 00000220 74 65 00 40 39 00 00 00 00 00 00 00 0c 6d 6f 6f |te.@9........moo| 00000230 76 70 6f 73 69 74 69 6f 6e 00 40 40 00 00 00 00 |vposition.@@....| 00000240 00 00 00 00 09 |.....| rtmp: chunk msgsid=1 msgtypeid=9 msghdrtype=0 len=45 left=0 rtmp: chunk data 00000000 17 00 00 00 00 01 42 c0 1e ff e1 00 19 67 42 c0 |......B......gB.| 00000010 1e da 02 80 bf e5 c0 44 00 00 03 00 04 00 00 03 |.......D........| 00000020 00 c8 3c 58 ba 80 01 00 04 68 ce 3c 80 |..<X.....h.<.| rtmp: chunk msgsid=1 msgtypeid=9 msghdrtype=1 len=2 left=0 rtmp: chunk data 00000000 57 00 |W.|

thesyncim commented 8 years ago

to reproduce the error

conn, err := rtmp.Dial("rtmp://localhost:1935/live")
if err != nil {
    log.Fatal(err)
}
livestream, err := avutil.Open("rtmp://opinion.azorestv.com/clients/57040dd71756e561cece4900")
if err != nil {
    log.Fatal("error connecting live", err)
}
defer livestream.Close()

err = avutil.CopyFile(conn, livestream)
if err != nil {
    log.Fatal(err)
}
nareix commented 8 years ago

thanks for report, checking now

nareix commented 8 years ago

if possible, could you provide wireshark captured file? thanks

thesyncim commented 8 years ago
package main

import (
    "github.com/nareix/joy4/format/rtmp"
    "github.com/nareix/joy4/av/avutil"
    "log"
)

func main() {

    rtmp.Debug=true
    conn, err := rtmp.Dial("rtmp://176.9.64.136:1935/live/live")
    if err != nil {
        log.Fatal(err)
    }
    livestream, err := rtmp.Dial("rtmp://cast.streamingconnect.tv:1935/tves2/tves2")
    if err != nil {
        log.Fatal("error connecting live", err)
    }
    defer livestream.Close()

    err = avutil.CopyFile(conn, livestream)
    if err != nil {
        log.Fatal(err)
    }

}

[issue4.zip](https://github.com/nareix/joy4/files/375510/issue4.zip)
nareix commented 8 years ago

thanks, I'll check it

nareix commented 8 years ago

fixed in https://github.com/nareix/joy4/commit/3902e48bdb3c506f9660d1823e41be2450baae09