<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=iso-8859-2"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:#365F91;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=SK link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span lang=EN-US style='color:#365F91'>Hi developers,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#365F91'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#365F91'>I hope that somebody can help me with problem while seeking in librtmp. I’m working as developer on splitter for OnlineVideos plugin (<a href="http://code.google.com/p/mp-onlinevideos2/">http://code.google.com/p/mp-onlinevideos2</a>) for MediaPortal (<a href="http://www.team-mediaportal.com/">http://www.team-mediaportal.com</a>). While testing seeking in RTMP streams I found problem with handling metadata (error: DECODING ERROR, IGNORING BYTES UNTIL NEXT KNOWN PATTERN!).<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#365F91'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#365F91'>Before I describe the problem with handling metadata I have to write that I changed RTMP_ConnectStream() method to request seek in RTMP stream correctly, because your implementation doesn’t work on any server which I tests.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#365F91'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas;color:blue'>int</span><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>RTMP_ConnectStream(RTMP *r, <span style='color:blue'>int</span> seekTime)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>{<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>  RTMPPacket packet = { 0 };<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>  <span style='color:blue'>int</span> tempSeekTime = 0;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>  <span style='color:green'>/* seekTime was already set by SetupStream / SetupURL.</span><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas;color:green'>   * This is only needed by ReconnectStream.</span><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas;color:green'>   */</span><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>  <span style='color:green'>/*if (seekTime > 0)</span><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas;color:green'>    r->Link.seekTime = seekTime;*/</span><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>  r->m_mediaChannel = 0;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>  tempSeekTime = r->Link.seekTime;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>  r->Link.seekTime = 0;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>  <span style='color:blue'>while</span> (!r->m_bPlaying && RTMP_IsConnected(r) && RTMP_ReadPacket(r, &packet))<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>  {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>    <span style='color:blue'>if</span> (RTMPPacket_IsReady(&packet))<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>    {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>      <span style='color:blue'>if</span> (!packet.m_nBodySize)<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>        <span style='color:blue'>continue</span>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>      <span style='color:blue'>if</span> ((packet.m_packetType == RTMP_PACKET_TYPE_AUDIO) ||<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>        (packet.m_packetType == RTMP_PACKET_TYPE_VIDEO) ||<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>        (packet.m_packetType == RTMP_PACKET_TYPE_INFO))<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>      {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>        RTMP_Log(RTMP_LOGWARNING, <span style='color:#A31515'>"Received FLV packet before play()! Ignoring."</span>);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>        RTMPPacket_Free(r, &packet);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>        <span style='color:blue'>continue</span>;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>      }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>      RTMP_ClientPacket(r, &packet);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>      RTMPPacket_Free(r, &packet);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>    }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>  }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>  r->Link.seekTime = tempSeekTime;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>  <span style='color:blue'>if</span> ((r->Link.seekTime > 0) && (r->m_bPlaying))<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>  {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>   <span style='color:blue'>if</span> (!RTMP_SendSeek(r, r->Link.seekTime))<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>    {<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>      RTMP_Close(r);<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>    }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>  }<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>  <span style='color:blue'>return</span> r->m_bPlaying;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'>}<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:9.5pt;font-family:Consolas'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#365F91;mso-fareast-language:EN-US'>Now back to problem. After requesting seek on RTMP stream I received response with different metadata as librtmp expects. Actually in stream are  two metadata packets, first handled correctly, second not. When I investigated issue I found that in second metadata packet are four extra bytes (positions 0x2788E8 – 0x2788EB in dump file). You can download network dump file with packet sizes from </span><span lang=EN-US style='color:#365F91'><a href="https://rapidshare.com/files/1882268158/rtmp_seek_dump.zip">https://rapidshare.com/files/1882268158/rtmp_seek_dump.zip</a>. In archive are two files rtmp_network.dump – contains each packet received from server and rtmp_network_packet_size.txt – contains sizes of each packet received from server.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#365F91'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#365F91'>Connection string passed to librtmp was (you can’t test video because it’s geo-locked, so I created network dump file):<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#365F91'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#365F91'>rtmp://wcdn1001.nacevi.cz/ct-vod?id=MTQzMzMwNzc0Nnw2MzQ2NTI3ODg4OTcwMzc1MDA=&type=wpl/mp4:ct/iVysilani/2011/11/06/FedCup2011CT4-061111-MP4_576p.mp4 app=ct-vod?id=MTQzMzMwNzc0Nnw2MzQ2NTI3ODg4OTcwMzc1MDA=&type=wpl pageUrl=http://www.ceskatelevize.cz/ivysilani/10321546303-fed-cup-2011/211471290110010-rusko-cesko/ playpath=mp4:ct/iVysilani/2011/11/06/FedCup2011CT4-061111-MP4_576p.mp4 start=21612460 swfUrl=http://img9.ceskatelevize.cz/libraries/player/flashPlayer.swf?version=1.44.6 tcUrl=rtmp://wcdn1001.nacevi.cz/ct-vod?id=MTQzMzMwNzc0Nnw2MzQ2NTI3ODg4OTcwMzc1MDA=&type=wpl<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#365F91'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#365F91'>I hope that somebody of you can help me. Thanks.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#365F91'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#365F91'>Greetings,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#365F91;mso-fareast-language:EN-US'>Juraj Horvath</span><span lang=EN-US><o:p></o:p></span></p></div>
<br>----------<br>

<a href="http://www.zoner.sk">Darujte sebe alebo svojim blizkym Zoner Photo Studio 14.</a><br><br>



Najdite si strateny alebo ukradnuty telefon programom <a href="https://market.android.com/details?id=com.zoner.android.antivirus">Zoner AntiVirus Free pre Android</a><br><br>



<a href="http://www.slovaknet.sk/clanok/domeny-sk/">Domeny .SK len za 12.29 EUR</a><br><br>



<a href="http://www.zonerpress.sk/">Ponuka z vydavatelstva Zoner Press</a>



<br><br>



<a href="http://www.facebook.com/mam.rad.android">Mam rad Android - klikni tu</a>





<br></body></html>