IPad / iPod / iPhone рд╕реЗ рдмреИрд╢ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╡реАрдбрд┐рдпреЛ - рд╕рд╕реНрддреЗ рдФрд░ рд╣рдВрд╕рдореБрдЦ

рд╣реИрд▓реЛ, рдкреНрд░рд┐рдп habrozhitel!

рдЗрд╕ рд▓рдШреБ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ "рдПрдХ рдлрд▓ рдХрдВрдкрдиреА" :) рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдирд▓рд╛рдЗрди рдкреНрд░рд╕рд╛рд░рдг рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред




рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╡реАрдбрд┐рдпреЛ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдРрдкреНрдкрд▓ рдиреЗ рдПрдХ рд╕рд░рд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ - рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ рдЦреЗрд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡реАрдбрд┐рдпреЛ рдирд┐рд░рдВрддрд░рддрд╛ рдХрд╛ рднреНрд░рдо рд╣реЛрддрд╛ рд╣реИред

рд╡реАрдбрд┐рдпреЛ рдХреНрд▓рд┐рдк рд╕реНрд╡рдпрдВ рдХреЛ HTTP рдФрд░ HTTPS рджреЛрдиреЛрдВ рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдпрд╣ рд╕рдордп рдкрд░ рдХрд┐рд╕реА рднреА рд╡реЗрдм рд╕рд░реНрд╡рд░ рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рд╡реАрдбрд┐рдпреЛ рдХреНрд▓рд┐рдк рдХреЛ рдЦреБрдж рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╡реАрдбрд┐рдпреЛ рдХреНрд▓рд┐рдк рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдбреЗрдЯрд╛ рдкреНрд░рдмрдВрдзрди (рдЙрд╕реА RTSP / RTP / RTMP рдХреА рддрд░рд╣) рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ - рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╕реНрдХреВрд▓реА рдЫрд╛рддреНрд░ рднреА рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рдФрд░ (рдореЗрд░реА рд░рд╛рдп рдореЗрдВ) рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛) рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ NAT / рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреИрдореНрдмреЛрд░рд┐рди рдХреЗ рд╕рд╛рде рдиреГрддреНрдп рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдЯ рдкрд░ Apple рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдПрдХ рддрд╕реНрд╡реАрд░ рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдИрдкреИрдб рдЦреБрдж рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рд╣реИ):

рдЫрд╡рд┐

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЬреЛ рд╕рд░реНрд╡рд░ рдкрд╣рд▓реЗ рд╡реАрдбрд┐рдпреЛ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЙрд╕реЗ 25 рдлреНрд░реЗрдо рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЧрддрд┐ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЗрд╕рдореЗрдВ рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдФрд░ рд╕реНрдерд┐рд░ рд╕рдВрдмрдВрдз рд╣реИ рдЬреЛ рд╕реНрдереИрддрд┐рдХ рд╕рд╛рдордЧреНрд░реА рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЬрдм рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ (рдореЛрд▓реНрджреЛрд╡рд╛ рдФрд░ рд░реЛрдорд╛рдирд┐рдпрд╛ рдореЗрдВ рдкреНрд░рд╕рд┐рджреНрдз рдЯреЗрд▓реАрд╡рд┐рдЬрди рдЪреИрдирд▓ - рдЬрд░реНрдирд▓ рдЯреАрд╡реА) рдиреЗ рд╣рдореЗрдВ рдПрдордбреАрдПрдХреНрд╕ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ iPhone / iPad / iPod рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдкреНрд░рд╕рд╛рд░рдг рдкреНрд░рдгрд╛рд▓реА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ (рджреЗрд╢ рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╣рд╛рдИ-рд╕реНрдкреАрдб рдиреЗрдЯрд╡рд░реНрдХ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдкреНрд░рджрд╛рддрд╛ рдФрд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рдЬрд┐рд╕рдореЗрдВ рдЕрд╕реАрдорд┐рдд) рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдерд╛:
  1. рд░реЗрдбреА-рдореЗрдб рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдореИрдВ NDA рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рд▓реВрдВрдЧрд╛) - рдПрдХ рд╕рд░реНрд╡рд░ рдФрд░ рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░-рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕, рдЬрд┐рд╕рдореЗрдВ рд╕реАрдЯреА рдФрд░ рдЭрдЧрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдХреЗ рд▓рд┐рдП 10,000 рдпреВрд░реЛ рдХреА рд▓рд╛рдЧрдд рдФрд░ рдХреНрд╖рд┐рддрд┐рдЬ рддрдХ (рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░)ред рдЖрдкрдХреЛ рдЕрдВрдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рдиреЛрдбреНрд╕ (рдПрдЬ рд╕рд░реНрд╡рд░, рдЕрдВрдЧреНрд░реЗрдЬреА рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдПрдЬ рд╕рд░реНрд╡рд░) рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореВрд▓реНрдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред
  2. рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдХрдИ рдореБрдлреНрдд рдбрд┐рд╕реНрдХ рд░рд╣рд┐рдд рд╕рд░реНрд╡рд░ рдереЗ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдмрдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ (рд╡реАрдПрд▓рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╡реИрд╕реЗ - рдЕрдЧрд░ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛) - рдмрд╣реБрдд рддреЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ рд░реИрдо рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ ред
  3. рдЪреВрдВрдХрд┐ рд╣рдо рдЖрд╕рд╛рди рддрд░реАрдХреЛрдВ рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдирдИ рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдмрд╣реБрдд рдкреИрд╕рд╛ рдЦрд░реНрдЪ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛ред


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рдерд╛:
  1. рдХрд┐рд╕реА рднреА рд░реВрдк рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рд╕рд┐рдЧреНрдирд▓ рддрдХ рдЕрд╕реАрдорд┐рдд рдкрд╣реБрдВрдЪ, рд╣рдордиреЗ рдПрд╕рдбреАрдЖрдИ рдХреЛ рдЪреБрдирд╛
  2. рдХрдирд╡рд░реНрдЯрд░ sdi-> DV, рдЬрд┐рд╕реЗ рд╣рдо рдЖрдо рддреМрд░ рдкрд░ IEE1394 рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддреЗ рдереЗ, рдЬрд┐рд╕реЗ "рдлрд╛рдпрд░ рд╡рд╛рдпрд░" рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
  3. рдЙрдмрдВрдЯреВ рдореЗрд╡рд░рд┐рдХ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдмреЛрд░реНрдб рдкрд░ 4-рдХреЛрд░ Xeon рдХреЗ рд╕рд╛рде рдПрдХ рдбрд┐рд╕реНрдХ рд░рд╣рд┐рдд рд╕рд░реНрд╡рд░ред


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
  1. 10 рд╕реЗрдХрдВрдб рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рд╡реАрдбрд┐рдпреЛ рдХреНрд▓рд┐рдк рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (Apple рд╕реЗ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░)ред
  2. рдЗрд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓реЗрдВ (MPEG2 рд╕реЗ рдкрд░рд┐рд╡рд╣рди рдХрдВрдЯреЗрдирд░ рдореЗрдВ MPEG-4)
  3. рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ
  4. рдЖрдЗрдЯрдо 1 рдкрд░ рд▓реМрдЯреЗрдВ


рдЕрдм, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЗрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╣рдордиреЗ DVgrab рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╡рдзрд┐ рдХреЗ рд╡реАрдбрд┐рдпреЛ рдХреНрд▓рд┐рдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ - рдпрд╣ рдЙрд╕реА рдЯреЗрд▓реАрд╡рд┐рдЬрди рдХреЗ рд╡реАрдбрд┐рдпреЛ рд╕рдВрдЧреНрд░рд╣ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдШрдбрд╝реА рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЦреБрдж рдХреЛ рдЕрдЪреНрдЫрд╛ рд╕рд╛рдмрд┐рдд рд╣реБрдЖред рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рд░реИрдо рдкрд░ рд╕реАрдзреЗ 10-рд╕реЗрдХрдВрдб рдХреЗ рд╡реАрдбрд┐рдпреЛ рдХреНрд▓рд┐рдк рдХреЛ рд░реИрдо рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рд╣реЛрдЧрд╛ред 10 рд╕реЗрдХрдВрдб рдХреЗ рдЕрд╕рдореНрдкреАрдбрд┐рдд рд╡реАрдбрд┐рдпреЛ рдореЗрдВ 35 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд▓рдЧрддреЗ рд╣реИрдВред рд╕рдВрдХреБрдЪрд┐рдд рдЯреБрдХрдбрд╝рд╛ 800kbps рдХреА рдПрдХ рдмрд┐рдЯрд░реЗрдЯ рдкрд░ рд▓рдЧрднрдЧ 1.2 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд▓реЗрддрд╛ рд╣реИред

рд╡реАрдбрд┐рдпреЛ рдХреНрд▓рд┐рдк рдХреЛ ffmpeg рдХреА рдорджрдж рд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рд╡рд╣ рднреА рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдФрд░ рдЕрдкрдиреА рдмрд╣реБрдореБрдЦреА рдкреНрд░рддрд┐рднрд╛ рдХреЗ рдХрд╛рд░рдг рдЯреЗрд▓реАрд╡рд┐рдЬрди рдХреЗ рдЙрд╕реА рд╡реАрдбрд┐рдпреЛ рд╕рдВрдЧреНрд░рд╣ рдХреА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдордЬрдмреВрддреА рд╕реЗ рдмрд╕ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдХреЛрдбреЗрдХ рдХреЗ рд░реВрдк рдореЗрдВ, H264 - x264 рдХрд╛ рдПрдХ рдореБрдлреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рд┐рд╕реНрдЯрдо рд╕реНрд╡рдпрдВ, рдЬреЛ рдирдП рд╡реАрдбрд┐рдпреЛ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдЖрдЧрдорди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ, рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ (рдЙрд╕реА рд╕рдордп, рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдЯреБрдХрдбрд╝реЗ рддрдерд╛рдХрдерд┐рдд "рд╡рд┐рдВрдбреЛ" рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ - рдХреЗрд╡рд▓ 3 рдЯреБрдХрдбрд╝реЗ рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, 10 рдбрд┐рд╕реНрдХ рдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛) ред

рджрд░рдЕрд╕рд▓, рдпрд╣рд╛рдВ рдпрд╣ рдХреЛрдб рд╣реИ:

#!/bin/bash
#set -x

VIDEO_FILES=( ); # array to store all available *.ts files at the moment
VIDEO_FILES_MAX=10; # how many elements can be stored in $VIDEO_FILES array
LIST_LEN=0; #*.ts list length

VIDEO_WINDOW=""; # array to store current video files window
VIDEO_WINDOW_LEN=3; # how many files we are storing in the window

LAST_CONVERTED=0; # ID of last converted video slice

RAW_SLICES_PATH="/tmp/DV/"; # where to look for raw video slices
MP4_SLICES_PATH="/tmp/MP4/"; # where to place converted chunks
MP4_SLICES_WEBPATH="http://istream.jurnaltv.md/live/"; # web path from the user`s POV
SLICE_DURATION=10; # seconds, 10-15 seconds recomended by Apple
M3U_FILE_NAME="/tmp/MP4/live.m3u"; # full path to the m3u index file

FFMPEG_CMD="/usr/local/bin/ffmpeg -y -i ";

update_m3u() {
# updating number of elements
LIST_LEN=${#VIDEO_FILES[@]};
echo "Number of elements in array is: $LIST_LEN ";
echo -n "(";
for slice in ${VIDEO_FILES[@]}
do
echo -n "${slice} ";
done
echo ")";
echo;
# getting last $VIDEO_WINDOW_LEN files from array
let LAST_IDX=LIST_LEN-VIDEO_WINDOW_LEN;
if [ $LAST_IDX -le 0 ]
then
LAST_IDX=0;
fi
echo "Last index we must use is $LAST_IDX";
# recreating m3u file
# getting slice id from $LAST_CONVERTED
SLICE_ID=0;
let SLICE_ID=LAST_CONVERTED-VIDEO_WINDOW_LEN;
if [ $SLICE_ID -le 0 ]
then
SLICE_ID=0;
fi
echo "------------- DUMP START ------------- ";
echo "#EXTM3U">$M3U_FILE_NAME;
echo "#EXT-X-TARGETDURATION:$SLICE_DURATION">>$M3U_FILE_NAME;
echo "#EXT-X-MEDIA-SEQUENCE:$SLICE_ID">>$M3U_FILE_NAME;
i=$LAST_IDX;
while [ $i -lt $LIST_LEN ]; do
echo "#EXTINF:${SLICE_DURATION},">>$M3U_FILE_NAME;
echo "${MP4_SLICES_WEBPATH}${VIDEO_FILES[${i}]}">>$M3U_FILE_NAME;
let i++;
done
echo "------------- DUMP END ------------- ";

# if array length is greater than $VIDEO_FILES_MAX - remove first element and compact array: array=( "${array[@]}" )
if [ $LIST_LEN -ge $VIDEO_FILES_MAX ]
then
echo "Packing array by removing first element";
echo ${MP4_SLICES_PATH}${VIDEO_FILES[0]};
rm -f ${MP4_SLICES_PATH}${VIDEO_FILES[0]};
unset VIDEO_FILES[0];
VIDEO_FILES=( "${VIDEO_FILES[@]}" );
fi
echo "-------";
}

# gracefly handle SIG_TERM
on_sigterm() {
echo "Got sigterm, exiting!";
RUN="0";
}

trap 'on_sigterm' TERM

# cleanup source and converted folders
rm -f ${RAW_SLICES_PATH}*.dv;
rm -f ${MP4_SLICES_PATH}*.dv;

# forever do
# convert video
# move to MP4
# erase original
# add converted to the tail of array
# update live.m3u file for $VIDEO_WINDOW_LEN files
# if array len>$VIDEO_FILES_MAX
# then remove first element from array and compact array it
# forever end

RUN="1";
raw_slice="";

while [ $RUN -eq "1" ]; do
#getting oldest file from the list of slices
raw_slice=`ls -tr ${RAW_SLICES_PATH}|head -1`;
if [ "$raw_slice" != "" ];
then
OPEN_FLAG=`lsof|grep $raw_slice|wc -l`;
if [ $OPEN_FLAG -eq 0 ];
then
#converting video
echo "Converting ${raw_slice}">>/tmp/istream.txt
#sleep 6; # simulating transcoding delay
mp4_slice="live-${LAST_CONVERTED}.ts";
$FFMPEG_CMD ${RAW_SLICES_PATH}${raw_slice} -acodec libfaac -ac 1 -ar 48000 -ab 96k -vcodec libx264 -vpre baseline -vpre fast -vpre ipod640 -b 800k -g 5 -async 25 -keyint_min 5 -s 512x256 -aspect 16:9 -bt 100k -maxrate 800k -bufsize 800k -deinterlace -f mpegts ${MP4_SLICES_PATH}${mp4_slice}
rm -f ${RAW_SLICES_PATH}$raw_slice
LIST_LEN=${#VIDEO_FILES[@]};
VIDEO_FILES[${LIST_LEN}]=$mp4_slice;
#generating m3u file
let LAST_CONVERTED++;
update_m3u;
else
sleep 1; # sleep one second
echo "Waiting for file to be closed!";
fi
else
sleep 1; # sleep one second
echo "Sleeping!";
fi



рдХреЛрдб рдХреБрдЫ рд╣рдж рддрдХ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдиреБрдХреВрд▓рди рдФрд░ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд┐рдЯреНрд░реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде 2-3 рдзрд╛рд░рд╛рдПрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдФрд░ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдПрдХ рд╡рд┐рднрд╛рдЬрди рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ рдЬреЛ MDX рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ - рдЕрд░реНрдерд╛рдд рдХреЗрд╡рд▓ рдореЛрд▓реНрджреЛрд╡рд╛ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдПрдХ рдЯрдЯреНрдЯреВ рдХреЗ рд╕рд╛рде рд╣рдЬрд╛рд░ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╡реЗ "рдЙрдирдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯрд╛ рдЯреАрд╡реА рд▓реЗ рдЬрд╛рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред"

рдореБрдЭреЗ рд╕рдореБрджрд╛рдп рд╕реЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдкреБрдирд╢реНрдЪ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рд▓рдп рдкреНрд░рдмрдВрдзрдХ рддрд╛рддреНрдпрд╛рдирд╛ рдХреЛ рдЯреИрдмрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдореБрджреНрд░рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдФрд░ рдПрдХ рдлреЛрдЯреЛрдЧреНрд░рд╛рдлрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдкрдгрди рдирд┐рджреЗрд╢рдХ :)ред

Source: https://habr.com/ru/post/In114848/


All Articles