ស្ទ្រីម 24/7 ដែលមិនភ្ជាប់ឡើងវិញរវាងវីដេអូ៖ ffmpeg មួយត្រូវបានបញ្ចូលតាមរយៈបំពង់ (pipe)

វីដេអូ

ឆានែលផ្សាយបន្តផ្ទាល់ដែលលេងវីដេអូដែលបានបញ្ចប់ការកែសម្រួលជុំវិញម៉ោងមានការរចនាងាយស្រួលពីរ ហើយទាំងពីរមានការបាត់បង់អ្វីមួយ។ ការចាប់ផ្តើម ffmpeg ឡើងវិញសម្រាប់វីដេអូនីមួយៗធ្វើឱ្យបាត់បង់ការតភ្ជាប់ RTMP នៅពេលប្តូរ។ បញ្ជីលេងជាប់គ្នា (concat playlist) ត្រូវបានអានម្តងនៅពេលចាប់ផ្តើម ដូច្នេះវីដេអូថ្មីត្រូវរង់ចាំការចាប់ផ្តើមឡើងវិញលើកបន្ទាប់។

ការរចនា

វីដេអូនីមួយៗត្រូវបានបម្លែងម្តងទៅជា MPEG-TS នៅតាមទំហំ និងអត្រាប៊ូតុង (frame rate) របស់ស្ទ្រីម; វីដេអូបញ្ឈរត្រូវបានដាក់លើច្បាប់ចម្លងព្រិលរបស់វាជំនួសឱ្យរបារខ្មៅ។ ដំណើរការ ffmpeg មួយអាន MPEG-TS ពីបញ្ចូលស្តង់ដាររបស់វា និងកូដឌីងនៅអត្រាប៊ូតុងថេរជាមួយ keyframe រៀងរាល់ពីរវិនាទី ដូចដែលការបញ្ចូលផ្សាយបន្តផ្ទាល់រំពឹងទុក។ កម្មវិធីបញ្ចូលតូចមួយសរសេរឯកសារដែលបានរៀបចំរួចចូលទៅក្នុងបំពង់នោះម្តងមួយៗ ក្នុងល្បឿនពិត ដោយជ្រើសរើសឯកសារបន្ទាប់នៅពេលប្តូរនីមួយៗ៖ វីដេអូដែលមិនធ្លាប់លេងមុន បន្ទាប់មក វីដេអូដែលលេងយូរបំផុត។ កម្មវិធីអាន MPEG-TS របស់ ffmpeg ឃើញថាពេលវេលា (timestamps) របស់ឯកសារនីមួយៗចាប់ផ្តើមឡើងវិញ ហើយវាផ្លាស់ទីពួកវា ដូច្នេះលទ្ធផលរបស់វាដំណើរការបន្តដោយគ្មានការឈប់។

ព័ត៌មានលម្អិតទីមួយ៖ ល្បឿនពីបៃដំបូង

កំណែដំបូងរបស់យើងចាប់ផ្តើមម៉ោងរបស់វានៅពេល ffmpeg ចាប់ផ្តើម។ ការរៀបចំឯកសារដំបូងចំណាយពេលប្រាំបួនវិនាទី ដូច្នេះកម្មវិធីបញ្ចូលគិតថាវាយឺតជាងប្រាំបួនវិនាទី ហើយបានបញ្ជូនពួកវាទាំងអស់ក្នុងពេលតែមួយ។ ការចាប់ផ្តើមម៉ោងនៅបៃដំបូងដែលបានសរសេរបានកែវិញ៖ ការដំណើរការរយៈពេល 53 វិនាទី បានផលិតស្ទ្រីមរយៈពេល 53 វិនាទី។

ព័ត៌មានលម្អិតទីពីរ៖ សំឡេងនៅត្រង់ចំណុចប្រសព្វ

នៅពេលប្តូរ សំឡេងរបស់ឯកសារបន្ទាប់បានចាប់ផ្តើម 17 មិល្លីវិនាទីមុនពេលសំឡេងរបស់ឯកសារមុនបញ្ចប់។ កម្មវិធីកូដឌីងបានព្រមានថាបញ្ចូលរបស់វាបានត្រឡប់ "ថយក្រោយក្នុងពេលវេលា" ហើយកម្មវិធី muxer បានជួសជុលពេលវេលា (timestamp)។ ការធ្វើ resampling ជាមួយ aresample=async=1:min_hard_comp=0.01:first_pts=0 កាត់បន្ថយ ឬបន្ថែមការត្រួតស៊ីគ្នាបែបនេះមុនពេលកម្មវិធីកូដឌីងឃើញ។ ក្នុងការដំណើរការរយៈពេលលើសមួយនាទីបន្តិច ជាមួយការប្តូរប្រាំដង ពេលវេលាសំឡេង និងវីដេអូទាំងអស់នៅក្នុងស្ទ្រីមដែលទទួលបានបានកើនឡើង ហើយស្ទ្រីមបានដេកូដដោយគ្មានកំហុសតែមួយ។

ព័ត៌មានលម្អិតទីបី៖ ការព្រមានមួយចំនួនគឺធម្មតា

ឯកសារនីមួយៗចាប់ផ្តើមឡើងវិញនូវក្បាលរាប់ MPEG-TS និងម៉ោងរបស់វា ដូច្នេះ ffmpeg រាយការណ៍ "Packet corrupt" និង "timestamp discontinuity" នៅពេលប្តូរនីមួយៗ។ បន្ទាត់ទាំងនោះត្រូវបានរំពឹងទុក ហើយយើងដកវាចេញពីកំណត់ត្រា (log) ដើម្បីឱ្យកំហុសពិតប្រាកដលេចធ្លោ។

ម៉ាស៊ីនត្រួតពិនិត្យ

ប្រសិនបើ ffmpeg ចេញពីការដំណើរការ ឬវឌ្ឍនភាពរបស់វាឈប់សម្រាកមួយនាទី ការផ្សាយបន្តផ្ទាល់នឹងចាប់ផ្តើមឡើងវិញ ដោយមានការឈប់សម្រាកកាន់តែយូរឡើងៗ ហើយផ្ញើសារមួយបន្ទាប់ពីបរាជ័យជាបន្តបន្ទាប់។ ក្នុងការសាកល្បងរបស់យើង យើងបានបញ្ឈប់កម្មវិធីបម្លែងវីដេអូដោយដៃ ហើយការផ្សាយបន្តផ្ទាល់ត្រឡប់មកវិញក្នុងរយៈពេល 7 វិនាទីបន្ទាប់មក ហើយវីដេអូដែលបានបន្ថែមកំឡុងពេលដំណើរការ បានចូលរួមក្នុងការបង្វិលសារឡើងវិញដោយមិនចាំបាច់ភ្ជាប់ឡើងវិញ។ ការចាប់ផ្តើមឡើងវិញគឺជាការភ្ជាប់ឡើងវិញខ្លីមួយ ដូច្នេះសូមកំណត់ការផ្សាយបន្តផ្ទាល់របស់ YouTube ឱ្យចាប់ផ្តើមដោយស្វ័យប្រវត្តិ និងកុំឱ្យឈប់ដោយស្វ័យប្រវត្តិ។ កូនសោរផ្សាយបន្តផ្ទាល់ត្រូវបានលាក់ក្នុងគ្រប់បន្ទាត់កំណត់ត្រា រួមទាំងកំណត់ត្រារបស់ ffmpeg ផងដែរ។ Studio ផ្តល់ជូននូវឆានែលផ្សាយបន្តផ្ទាល់នេះជាសេវា systemd។

បានធ្វើបច្ចុប្បន្នភាព: