สร้างสตรีม hls โดยใช้ตัวแปลงสัญญาณ h265


3

ฉันพยายามแปลงh264วิดีโอเป็นสตรีม hls ซึ่งใช้h265ตัวแปลงสัญญาณ ตามที่บทความของ bitmovinแนะนำเราจำเป็นต้องใช้fragmented mp4เพื่อให้hls/h265สตรีมทำงานกับซาฟารีได้

  1. ฉันสามารถแปลงh264เป็นh265คำสั่งนี้ได้อย่างถูกต้อง

    ffmpeg -i input.mp4 -c:v libx265 -tag:v hvc1 out.mp4
    
  2. ฉันสามารถแปลงอินพุตวิดีโอ ( h264) เป็น hls ( fragmented mp4) โดยใช้คำสั่งนี้

    ffmpeg -y -i input.mp4 \
        -c copy -hls_segment_type fmp4 -hls_time 6 -hls_list_size 10 \
        -hls_flags delete_segments+append_list+split_by_time \ 
        -hls_playlist_type vod manifest.m3u8
    

ตอนนี้เมื่อฉันใช้คำสั่งข้างต้นโดยการระบุh265output hls stream ไม่ทำงานใน Safari มันพ่นข้อผิดพลาดนี้

Plugin Handled Load

คำสั่ง

ffmpeg -y -i input.mp4 \
    -vf scale=640:360 -c:v libx265 -tag:v hvc1 -c:a copy \
    -hls_segment_type fmp4 -hls_time 6 -hls_list_size 10 \
    -hls_flags delete_segments+append_list+split_by_time \
    -hls_playlist_type vod manifest.m3u8

สิ่งที่อาจเป็นปัญหาที่นี่?


ฉันพบสิ่งนี้เช่นกัน ฉัน จำกัด ให้แคบลงสำหรับปัญหาที่ Safari มีด้วยตัวเข้ารหัส libx265 hevc หากคุณใช้ hevc_videotoolbox (ด้วย -allow_sw 0 หรือ 1) มันจะเข้ารหัสอย่างถูกต้องและ Safari จะเล่น มันเป็นความอัปยศเพราะคุณภาพของ hevc_videotoolbox นั้นค่อนข้างแย่สำหรับ bitrate ที่ต่ำกว่า 5,000k
ไบรอันสก็อต

การค้นหาเพิ่มเติมทำให้ฉันมีปัญหาอย่างน้อยหนึ่งปัญหาที่แอป Apple มีกับ libx265: วางแท็ก "hev1" แทนแท็ก "hvc1" ในคอนเทนเนอร์ mp4 (ดูการสนทนาในDiscussions.apple.com/thread/8091782 ) ฉันพยายามแทนที่แท็ก (-tag: v hvc1) แต่นั่นไม่ได้ช่วยแก้ปัญหาสำหรับ Safari
ไบรอันสก็อต

คำตอบ:


0

ฉันทดสอบสิ่งนี้ด้วย ffmpeg 4.1.1 วันนี้บน macOS 10.14.3 และดูเหมือนว่าจะทำงานได้อย่างสวยงาม ฉันต้องแปลงรหัสเป็น MP4 ในขั้นต้น (ไม่สามารถไปที่ HLS โดยตรงในระหว่างขั้นตอนการแปลงเนื่องจาก m3u8 ที่ได้นั้นไม่สามารถเล่นได้ใน Safari - ดูเหมือนข้อผิดพลาด ffmpeg) แต่ฟังก์ชั่นบรรจุภัณฑ์ทำงานได้อย่างสมบูรณ์และ ฉันสามารถเล่น HEVC HLS m3u8 ที่เป็นผลลัพธ์ (ใน UHDp60 HDR10 ได้ถึงแม้ว่าจะมีการบัฟเฟอร์เล็กน้อยบน iPhone XS Max ของฉันและการแสดงผลแบบไม่แมปโทนใน macOS) ใน Safari ทั้ง MacOS 10.14.3 และ iOS 12.1 0.2

ตามที่ระบุไว้ข้างต้นก่อนอื่นฉันต้องแปลงรหัสเป็น MP4 (ตัวอย่างต่อไปนี้ใช้อินพุต UHDp60 HEVC HDR10 และแปลงรหัสเป็น 1080p60 HEVC HDR10):

ffmpeg -y -i source.mp4 -c:v libx265              \
    -tag:v hvc1 -pix_fmt yuv420p10le -s 1920x1080 \
    -x265-params "colorprim=bt2020:transfer=smpte2084:colormatrix=bt2020nc:bitrate=4000:keyint=120:strict-cbr" \
    -c:a copy ~/Sites/HLS/1080p/HDR10.mp4

จากไฟล์ผลลัพธ์ฉันสามารถทำแพ็คเกจ HLS ได้:

ffmpeg -y -i ~/Sites/HLS/1080p/HDR10.mp4 -c copy \
    -hls_segment_type fmp4 -hls_time 6 -hls_list_size 10 \
    -hls_flags delete_segments+append_list+split_by_time \
    -hls_playlist_type vod ~/Sites/HLS/1080p/HDR10.m3u8

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.