สารบัญ:

Retro Idiot Box: 10 ขั้นตอน
Retro Idiot Box: 10 ขั้นตอน

วีดีโอ: Retro Idiot Box: 10 ขั้นตอน

วีดีโอ: Retro Idiot Box: 10 ขั้นตอน
วีดีโอ: งานของฉันคือการสังเกตป่าและมีสิ่งแปลก ๆ เกิดขึ้นที่นี่ 2024, กรกฎาคม
Anonim
Retro Idiot Box
Retro Idiot Box

ฉันพบโทรทัศน์แบบพกพา Magnavox รุ่นเก่าจากปี 1984 วางอยู่บนหิ้งที่ร้านขายของมือสองในพื้นที่ของฉัน ฉันคิดในใจว่า "โอ้ เรียบร้อย!" เมื่อตรวจสอบเพิ่มเติม ฉันสังเกตเห็นป้ายราคา 15 ดอลลาร์บนนั้น ดังนั้นฉันจึงตัดสินใจนำมันกลับบ้านและทำอะไรบางอย่างที่ดูน่าสนใจ ฉันจำได้ว่าดูการฉายซ้ำตอนเป็นเด็กของภาพยนตร์คลาสสิกที่ยอดเยี่ยมทั้งหมดในขาวดำอันรุ่งโรจน์ และต้องการทำให้สิ่งนี้เป็นจริงอีกครั้ง

ปัญหาคือไม่มีสถานีแอนะล็อกอีกต่อไปแล้ว และสิ่งนี้ไม่สามารถถอดรหัส ATSC ใดๆ หรือการถอดรหัสดิจิทัลใดๆ ได้เลย ฉันสังเกตเห็นว่ามีการเชื่อมต่อ AV ที่ด้านข้าง และมีราสเบอร์รี่ pi อยู่สองสามตัว ดังนั้นฉันจึงตัดสินใจเริ่มการผจญภัยเพื่อค้นหาว่าฉันจะสตรีมช่องไปยังช่องนี้ได้อย่างไร อยากให้ดูเฉียบด้วย ฉันจะไม่ใช้งานแบตเตอรี่ D-cell 9 ก้อน ดังนั้นฉันจึงสามารถซ่อน rpi ในช่องใส่แบตเตอรี่พร้อมกับสิ่งของอื่นๆ มากมาย

ขั้นตอนที่ 1: รับรายการ IPTV ที่ดี

รับรายการ IPTV ที่ดี
รับรายการ IPTV ที่ดี

รายการ IPTV รายวันมีสถานี iptv ฟรีให้เลือกมากมายซึ่งจัดตามประเทศ เลือกประเทศที่ต้องการและดาวน์โหลดไฟล์ m3u

สำหรับซอฟต์แวร์ที่อยู่ในนี้ m3u เป็นรูปแบบที่จำเป็น คุณสามารถอ่านเพิ่มเติมเกี่ยวกับลักษณะเฉพาะของรูปแบบได้ที่นี่

ขั้นตอนที่ 2: การทดสอบโค้ดเบื้องต้น

รหัสหลามที่เราจะเขียนแยกวิเคราะห์ไฟล์ m3u ลงในรายการสถานี

#!/usr/bin/python3

นำเข้ากระบวนการย่อยจากคลาส sys นำเข้า argv สถานี: def _init_ (ตัวเอง): self.channel = 0 self.name = '' self.address = '' channel_list = พร้อม open('./us-m3uplaylist-2020-08- 17-1.m3u', 'r') เป็น m3u: i = 0 สำหรับบรรทัดใน m3u: if line.startswith('#EXTINF'): this = Station() this.name = line.split(', ') [1] line = next(m3u) this.address = line.strip() this.channel = i channel_list.append(this) i = i + 1 กระบวนการ = subprocess. Popen(['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list[int(argv[1])].address])

มาทำลายสิ่งนี้กันเถอะ

#!/usr/bin/python3

สิ่งนี้บอก bash ว่าเราจะใช้ python3 เพื่อตีความไฟล์นี้

นำเข้ากระบวนการย่อยจาก sys นำเข้า argv

เราจะต้องใช้โมดูลกระบวนการย่อยเพื่อเปิดใช้อินสแตนซ์ vlc ของเรา และเราต้องใช้ argv เพื่อเลือกช่องที่เราจะเปิดใช้ vlc

คลาส สถานี: def _init_(ตัวเอง): self.channel = 0 self.name = '' self.address = ''

สิ่งนี้กำหนดคลาสที่เรียกว่าสถานี แต่ละช่องจะมีหมายเลขช่อง ชื่อของช่องที่นำมาจากไฟล์ m3u และที่อยู่ของช่องที่สตรีมมาจาก

channel_list =

นี่คือรายการที่จะจัดเก็บช่องทั้งหมดที่แยกวิเคราะห์จากไฟล์ m3u

ด้วย open('./us-m3uplaylist-2020-08-17-1.m3u', 'r') เป็น m3u: i = 0 สำหรับบรรทัดใน m3u: if line.startswith('#EXTINF'): this = Station () this.name = line.split(', ')[1] line = next(m3u) this.address = line.strip() this.channel = ฉัน channel_list.append(this) i = i + 1

ลูปนี้เปิดเพลย์ลิสต์ m3u และนำเข้าข้อมูล บรรทัดไฟล์ m3u ที่เราสนใจเริ่มต้นด้วย #EXTINF ซึ่งระบุรายการใหม่ในไฟล์เพลย์ลิสต์ ค่าที่น่าสนใจถัดไปคือชื่อ ซึ่งอยู่ในบรรทัดเดียวกับ #EXTINF แต่มีเครื่องหมายจุลภาคคั่นระหว่าง บรรทัดต่อไปนี้ของ m3u โดยเฉพาะคือที่อยู่ของสตรีม มีตัววนซ้ำ "i" ที่ใช้ในการนับว่าช่องใดเป็นช่องใด ลูปนี้วนซ้ำทั่วทั้งไฟล์ m3u และเติม channel_list ด้วยสถานี

กระบวนการ = กระบวนการย่อยปรากฏขึ้น (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list[int(argv[1])].address])

ไลบรารีกระบวนการย่อยอนุญาตให้ python เรียกกระบวนการ (โปรแกรม) และส่งคืน PID (Process ID) สิ่งนี้ทำให้ python สามารถจัดการการเปิดและปิดโปรแกรมได้ "ถูกต้อง" โดยไม่ต้องกรอกไฟล์ประวัติ หรืออนุญาตให้เรียกใช้โค้ดตามอำเภอใจมากขึ้นด้วยการเรียก "ระบบ" ทั่วไป แต่ละองค์ประกอบของอาร์เรย์ที่ใช้เป็นอาร์กิวเมนต์ของ Popen นั้นจะถูกพิมพ์ในบรรทัดคำสั่ง

vlc --loop --intf dummy --ที่อยู่เต็มหน้าจอ

คำสั่งข้างต้นเป็นสิ่งที่ต้องการเรียกใช้โดยตัวเลือก --loop แก้ไขปัญหาบางอย่างด้วยการหยุดสตรีมในขณะที่โหลดชิ้นถัดไป (ปัญหา m3u8 แปลก ๆ) --intf dummy เริ่ม vlc โดยไม่มีอินเทอร์เฟซ เพียงหน้าจอ --fullscreen เปิดวิดีโอในโหมดเต็มหน้าจอ (ไม่มีทาง!) และที่อยู่คือที่อยู่ของสตรีม ดังที่คุณเห็นในโค้ด เรากำลังระบุที่อยู่จากหมายเลขช่องของรายการ ซึ่งระบุไว้ที่รันไทม์ผ่านคำสั่ง argv บันทึกไฟล์นี้เป็น tv_channels.py เปลี่ยนตำแหน่งเพลย์ลิสต์ในไฟล์ python ให้ชี้ไปที่เพลย์ลิสต์ของคุณ และคุณสามารถเรียกใช้โค้ดได้ดังนี้:

หลาม tv_channels.py

ขั้นตอนที่ 3: เพิ่ม GPIO

เพิ่ม GPIO
เพิ่ม GPIO
เพิ่ม GPIO
เพิ่ม GPIO

แผนผังแสดงหมุด GPIO สองตัวที่ใช้สำหรับปุ่ม และแต่ละอันมีตัวต้านทานแบบดึงขึ้นเพื่อให้พิน GPIO ถูกดึงขึ้นสูงหลังจากกดปุ่ม โค้ดที่กำหนดไว้ก่อนหน้านี้สามารถปรับปรุงให้การทำงานราบรื่นขึ้นอีกเล็กน้อยโดยการเพิ่มความสามารถของ GPIO สิ่งนี้ทำให้เราสามารถเปลี่ยนช่องด้วยปุ่ม แทนที่จะเป็นคีย์บอร์ดและคำสั่ง argv เหมือนกับ a สำหรับ realsies ทีวี

สิ่งแรกที่ควรทราบคือฉันมีโทรทัศน์ที่กำหนดเป็นชั้นเรียน ในการเป็นโทรทัศน์ เราต้องอยู่ในช่องปัจจุบัน มีรายการช่องที่เป็นไปได้ และสามารถเปลี่ยนช่องได้ ในตัวอย่างนี้ วิธีเดียวในการเปลี่ยนช่องคือเลื่อนรายการช่องขึ้น และเลื่อนรายการช่องลง เมื่อตัดสินใจเลือกช่องแล้ว เราจะต้องเริ่ม VLC บนช่องที่เราต้องการดู

#!/usr/bin/python3

from time import sleep นำเข้ากระบวนการย่อยจาก sys import argv จาก gpiozero import คลาสปุ่ม Station: def _init_ (ตัวเอง): self.channel = 0 self.name = '' self.address = '' self.process = '' class โทรทัศน์: def _init_(ตัวเอง, ชื่อไฟล์): self.current_channel = 0 self.channel_list = self.build_channel_list(ชื่อไฟล์) self.start_channel() def build_channel_list(ตัวเอง, ชื่อไฟล์): ด้วย open(ชื่อไฟล์, 'r') เป็น m3u: i = 0 สำหรับบรรทัดใน m3u: if line.startswith('#EXTINF'): this = Station() this.name = line.split(', ')[1] line = next(m3u) this.address = line strip() this.channel = i self.channel_list.append(this) i = i + 1 def channel_up(self): self.current_channel = self.current_channel + 1 หาก self.current_channel > len(self.channel_list): ตนเอง current_channel = len (self.channel_list) self.start_channel () def channel_down (ตัวเอง): self.current_channel = self.current_channel - 1 ถ้า self.current_channel < 0: self.current_channel = 0 self.start_channel() def start_channel (ตัวเอง): ลอง: self.process kill() ยกเว้น: pass print('starting channel %d' % self.current_channel) self.process = subprocess. Popen(['vlc', '-q', '--loop', '--intf', ' ดัมมี่', '--เต็มจอ', self.channel_list[self.current_channel].address]) this = Television('./us-m3uplaylist-2020-08-17-1.m3u') channel_UP = Button(18) channel_DN = ปุ่ม (23) ในขณะที่ True: channel_UP.when_pressed = this.channel_up channel_DN. when_pressed = this.channel_down

การทำซ้ำของรหัสนี้มีการปรับปรุงค่อนข้างน้อย ตอนนี้ใช้โมดูลที่เรียกว่า gpiozero ซึ่งราสเบอร์รี่ pi ต้องการเพื่อให้เข้าถึงฟังก์ชันการทำงานของหมุด GPIO ได้อย่างง่ายดาย

sudo apt-get ติดตั้ง python3-gpiozero

หรือ

sudo pip ติดตั้ง gpiozero

ตามที่เห็นในรหัสของฉัน ฉันได้เลือก GPIO 18 และ GPIO 23 สำหรับช่อง UP และช่อง DOWN ตามลำดับ ไลบรารี gpiozero มีคลาสที่ดีสำหรับฟังก์ชันปุ่มสำหรับ when_pressed, is_pressed, when_held ฯลฯ ซึ่งทำให้ง่าย ฉันเลือก when_pressed ซึ่งหมายถึงฟังก์ชันเรียกกลับให้ทำงานเมื่อตรวจพบสัญญาณนี้

การเปลี่ยนแปลงครั้งใหญ่ครั้งสุดท้ายคือการรวมตัวเลือก ' -q ' ในการเรียกกระบวนการย่อย VLC นี่เพียงเรียกใช้ vlc โดยไม่มีเอาต์พุตทั้งหมดไปยังเทอร์มินัลเพื่อให้ปราศจากความยุ่งเหยิง เพื่อให้เราสามารถเห็นคำสั่งการพิมพ์ข้อมูลในโค้ด

ขั้นตอนที่ 4: รวมฮาร์ดแวร์เพื่อให้ดูคมชัด

ผสานฮาร์ดแวร์เพื่อให้ดูคมชัด
ผสานฮาร์ดแวร์เพื่อให้ดูคมชัด
ผสานฮาร์ดแวร์เพื่อให้ดูคมชัด
ผสานฮาร์ดแวร์เพื่อให้ดูคมชัด
ผสานฮาร์ดแวร์เพื่อให้ดูคมชัด
ผสานฮาร์ดแวร์เพื่อให้ดูคมชัด

ฉันยังไม่รู้ว่าต้องทำอย่างไร และมันจะเป็นวิธีแก้ปัญหาเฉพาะสำหรับทีวีแต่ละรุ่นที่ใช้งาน ฉันต้องคิดให้หนักเกี่ยวกับเรื่องนี้และสำรวจโทรทัศน์เพื่อหาแหล่งพลังงานที่ดีสำหรับ pi เมื่อฉันยัดคอมพิวเตอร์เข้าไปในช่องใส่แบตเตอรี่ขนาดใหญ่ ฉันยังพิจารณาใช้ปุ่มนาฬิกาสำหรับการเลือกช่อง เนื่องจากมีการวางไว้บนโทรทัศน์อย่างสวยงาม และนาฬิกาก็ไม่ทำงานอยู่ดี ฉันจะโพสต์เพิ่มเติมเมื่อฉันพบวิธีแก้ปัญหาที่ดี แต่นี่คือที่ที่โครงการของฉันจะแตกต่างอย่างมากจากของคนอื่นๆ เพลิดเพลินไปกับการรวม IPTV ที่เหมือนทีวีจริง!

ขั้นตอนที่ 5: Pi Power

Pi Power
Pi Power

สำหรับทีวีรุ่นที่ฉันพบ ต้องใช้แหล่งจ่ายไฟ 12V ฉันสำรวจรอบๆ บอร์ดแล้ว แต่ไม่เห็นตัวควบคุมพลังงานที่ชัดเจนสำหรับ 5V ดังนั้นที่ที่ชัดเจนที่สุดในการจัดหาแหล่งจ่ายไฟที่มั่นคงคือบนแผงวงจรที่มีขั้วต่อแบบบาร์เรลสำหรับ 12V เข้ามา มีปัญหาที่ชัดเจนกับสิ่งนี้. เราไม่ต้องการทอด pi ดังนั้นเราจะต้องมีตัวควบคุมกำลัง ฉันได้เลือก MP2315 Step-Down Power Converter มันสกปรกราคาถูกและใช้งานง่าย เราจะประสานอินพุต 12VDC จากขั้วต่อบาร์เรลบน PCB เข้ากับพิน IN+ และ GND ของตัวแปลง และ VO+ กับพิน 2 บน Raspberry Pi รวมถึง GND

ก่อนดำเนินการนี้ ต้องแน่ใจว่าได้เปิดเครื่องคอนเวอร์เตอร์และตรวจดูให้แน่ใจว่า 5V ที่เหมาะสมออกมาจากเอาต์พุต ฉันเลือกตัวเลือกที่ง่ายที่สุดด้วยแรงดันไฟฟ้าที่ปรับได้เดินสาย ที่กันจอนจะปรับแรงดันไฟ ฉันจึงดูเอาท์พุตแรงดันไฟด้วยมัลติมิเตอร์ขณะปรับที่กันจอนด้วยไขควง

ขั้นตอนที่ 6: การรวมพลัง

การรวมพลัง
การรวมพลัง
การรวมพลัง
การรวมพลัง
การรวมพลัง
การรวมพลัง

หลังจากสำรวจดูโทรทัศน์แล้ว ก็ตัดสินใจว่าสถานที่ที่ดีที่สุดในการดึงกระแสไฟคือจากขั้วลบของขั้วต่อแบบบาร์เรลและสวิตช์เปิด/ปิดของโทรทัศน์ ซึ่งหมายความว่าเราสามารถเปิดและปิดสตรีมด้วยโทรทัศน์ได้ เปิด pi อย่างต่อเนื่องโดยดึงโดยตรงจากขั้วต่อบาร์เรล

สายไฟถูกบัดกรีและป้อนเข้าที่ด้านข้างของ PCB ถัดจากเคสจนกระทั่งถึงด้านหลังของตัวเครื่อง โดยถูกป้อนผ่านรูที่อยู่ด้านหลังของช่องใส่แบตเตอรี่ เมื่อป้อนเข้าไปแล้ว เราสามารถเตรียมปลายสายและประสานเข้ากับตัวควบคุมกำลัง ฉันปรับเป็น 5V เพื่อจ่ายไฟให้กับ pi และหมุดหัวบัดกรีเพื่อให้เราสามารถเรียกใช้จัมเปอร์ตัวเมียกับตัวเมียจากตัวควบคุมพลังงานโดยตรงไปยังชุดส่วนหัว GPIO ของ pi โดยปกติจะไม่แนะนำ เนื่องจาก pi มักจะได้รับพลังงานผ่าน UBS ซึ่งมีตัวควบคุมแบบอินไลน์เพื่อปรับสภาพ 5V แต่เนื่องจากกำลังได้รับการควบคุมแล้ว จึงน่าจะใช้ได้

มีเสียงรบกวนจากการทำสิ่งนี้ เนื่องจากมีกราวด์วนอยู่ในระบบ ฉันลองจุดพลังและจุดกราวด์หลายจุดทั่วทั้งกระดานโดยหวังว่าจะได้คำตอบง่ายๆ แต่ไม่พบเลย ฉันยังบัดกรีสายเคเบิล microUSB เข้ากับตัวควบคุมโหมดสวิตช์เพื่อดูว่าการบังคับพลังงานผ่านตัวควบคุมภายในของ pi จะแก้ไขปัญหาได้หรือไม่ มันไม่ได้ การแก้ปัญหาจะอยู่ในหม้อแปลงแยกกราวด์เสียงบางตัว สิ่งเหล่านี้ได้รับคำสั่งมากกว่าสร้างเพราะมีราคาถูกและบรรจุอย่างดี คุณสามารถรับได้จากร้านค้าหรือแผนกเครื่องเสียงรถยนต์ส่วนใหญ่ นี่คือสิ่งที่ฉันเลือก

ขั้นตอนที่ 7: โซลูชันปุ่มระยะยาว

โซลูชันปุ่มระยะยาว
โซลูชันปุ่มระยะยาว
โซลูชันปุ่มระยะยาว
โซลูชันปุ่มระยะยาว

ไม่ต้องสงสัยเลยว่าปุ่มต่างๆ จะไม่อยู่บนเขียงหั่นขนม ดังนั้นจึงจำเป็นต้องมีวิธีแก้ปัญหาที่ถาวรกว่านี้ ฉันหยิบโปรโตบอร์ดเก่าขึ้นมาแล้วโยนวงจรพร้อมกับหมุดส่วนหัวเพื่อให้เข้าถึงสัญญาณได้ง่าย นี่คือที่ที่ทุกคนจะมีความคิดเห็นที่แตกต่างกันเกี่ยวกับวิธีการแนบหรือติดตั้งปุ่มต่างๆ ฉันกำลังเลือกโปรโตบอร์ดและเพียงแค่แนบมันเข้ากับแชสซีเพื่อให้ที่จับที่แกว่งไปบนหน้าจอเพื่อพกพาไม่รบกวน รู้สึกอิสระที่จะรวมเอาการออกแบบโดยการเพิ่มเคสที่พิมพ์ 3 มิติที่ทำให้การติดตั้งราบรื่น ใช้น็อตและสลักเกลียว กาวแฟนซี รวมปุ่มดั้งเดิม อะไรก็ได้ ตราบใดที่ใช้งานได้ก็ไม่มีคำตอบที่ผิด

สิ่งเหล่านี้จะถูกติดตั้งไว้ที่ด้านนอกของเคส และ Raspberry Pi จะถูกซุกไว้ภายในช่องใส่แบตเตอรี่ที่กว้างมาก ดังนั้นจึงจำเป็นต้องเจาะรูเล็กๆ เพื่อให้สายเคเบิลออกจากช่องใส่แบตเตอรี่ได้

ขั้นตอนที่ 8: ตรวจสอบความพอดีขั้นสุดท้าย

Final Fit Check
Final Fit Check

อุปกรณ์ทั้งหมดต้องได้รับการตรวจสอบเป็นครั้งสุดท้ายเพื่อดูว่าจำเป็นต้องทำรูทั้งหมดไว้ที่ใดกับแชสซี และรูขนาดใด ฯลฯ จำเป็นต้องทำ นอกจากนี้ ควรพิจารณาตำแหน่งที่จะวางส่วนประกอบต่างๆ เพื่อให้ง่ายต่อการเชื่อมต่อและเข้าถึง เรื่องสั้นโดยย่อ ตรวจสอบให้แน่ใจว่าทุกอย่างลงตัวในที่ที่คุณคิดว่ามันทำ ก่อนที่คุณจะสร้างความเสียหายให้กับโครงการของคุณอย่างไม่สามารถแก้ไขได้ และต้องเอาจุดประกายออกมา

ขั้นตอนที่ 9: การบูรณาการขั้นสุดท้าย

บูรณาการขั้นสุดท้าย
บูรณาการขั้นสุดท้าย
บูรณาการขั้นสุดท้าย
บูรณาการขั้นสุดท้าย
บูรณาการขั้นสุดท้าย
บูรณาการขั้นสุดท้าย

ตอนนี้ฮาร์ดแวร์ทั้งหมดอยู่ในที่ที่มันต้องการ และทุกอย่างก็พอดีพอๆ กับตัวแมลงในพรม มาตัดสิ่งต่าง ๆ กันเถอะ! ฉันระบุตำแหน่งบนช่องใส่แบตเตอรี่ซึ่งฉันสามารถเดินสาย AV ออกได้โดยใช้การเยื้องเล็กๆ ในพลาสติก ฉันบดมันด้วยเครื่องบดแบบตั้งโต๊ะ มันทำให้งานค่อนข้างสั้น ฉันใช้เดรเมลเพื่อบดพลาสติกให้มากขึ้นเพื่อให้พอดีกับสายเคเบิล

องค์ประกอบสุดท้ายคือตัวเลือกช่อง ฉันเจาะรูเล็กๆ ในช่องแบตเตอรี่และเดินสายเฮดเดอร์ทีละสาย ปุ่มต่างๆ ถูกเชื่อมต่อเข้าด้วยกัน และฉันติดโปรโตบอร์ดเข้ากับโครงเครื่องพลาสติกด้วยเวลโครที่ติดกาวไว้ล่วงหน้าสองส่วน ฉันเข้าใจว่ามีวิธีที่ดีกว่านี้ประมาณ 1200 วิธีในการทำเช่นนี้ แต่วิธีนี้ใช้ได้ผล และฉันมีทุกสิ่งที่ฉันต้องการในมือ

ขั้นตอนที่ 10: เพลิดเพลินกับ IPTV วินเทจของคุณ

เพลิดเพลินไปกับ IPTV วินเทจของคุณ
เพลิดเพลินไปกับ IPTV วินเทจของคุณ
เพลิดเพลินไปกับ IPTV วินเทจของคุณ
เพลิดเพลินไปกับ IPTV วินเทจของคุณ
เพลิดเพลินไปกับ IPTV วินเทจของคุณ
เพลิดเพลินไปกับ IPTV วินเทจของคุณ

ที่เกี่ยวกับสรุปมันขึ้น ค้นหารายการและสนุกกับการรับชม อย่านั่งใกล้เกินไปแม้ว่า คุณจะเน่าสมองของคุณ!

มีพื้นที่มากมายในการปรับปรุงโครงการนี้ ดังนั้นให้นำไปในทิศทางใดก็ได้ที่คุณต้องการ แต่การมาไกลขนาดนี้ก็สนุกดี สำหรับฉัน ฉันเรียกใช้สิ่งนี้จาก cronjob เมื่อรีบูต ดังนั้น stdout จึงไม่จับข้อความจากสคริปต์ python ผมขอแก้ไขนะครับ จะได้รู้ว่าอยู่ช่องไหนครับ การเพิ่มที่ดีอีกอย่างหนึ่งคือดองเกิลคีย์บอร์ดไร้สายบน Pi วิธีนี้จะช่วยให้คุณเปลี่ยนเครือข่าย wifi หากคุณออกจากบ้านพร้อมกับทีวี โดยไม่คำนึงถึง. เป็นโปรเจ็กต์ที่สนุก และฉันแทบรอไม่ไหวที่จะเริ่มต้นในครั้งต่อไป

แนะนำ: