匿名
這是一個很奇怪的需求,有一台ios12的裝置,無法更新的情況下,在有「家長鎖」的情況下,只能用以下3個APP時鐘、SAFARI、設定;特別的是,SAFARI被家長設定只能允許三個網址(大概就是翰林雲端這種類型的線上學習平台),其他的網址都封鎖,要看LANGLIVE,有幾個重要的線索,1.,允許的domain可以允許所有port,2.,設定可以連線任意WIFI,可以手動設DNS SERV。
先製備一個DNS SERV將該三允許的DOMAIN導到某台可自己控制的SERV上,DNS SERV使用windows機器跑technitium(NAT DNS PORT)。
發現到1.safari (ios12)無法webrtc但可hls 2.不同於CHROME可以支援裸TS,SAFARI需要video.js去包HLS(之類的這句話我不確定)
接著自己可控制的SERV,先跑一個video.js的HTML,隨便一個PORT都行,關於串流伺服器,使用 https://hub.docker.com/r/bluenviron/mediamtx,資料流會是[影片檔案源]->DOCKER->前端,其中第一個箭頭走RTSP,第二個箭頭走HLS(M3U8)。
先看第二個箭頭,
sudo docker run --rm -it --network=host -e MTX_LISTENIP=0.0.0.0 -e MTX_HLS=true -e MTX_HLSVARIANT=mpegts -e MTX_HLSSEGMENTDURATION=2s -e MTX_WEBRTCADDITIONALHOSTS=DOMAINNAME.COM.TW,123.321.123.321,127.0.0.1,localhost -e MTX_HLSDIR=/tmp/hls bluenviron/mediamtx:1-ffmpeg
注意到,1.,IMG我用有帶FFMPEG的,至於為啥,也沒為啥,2.,-e MTX_WEBRTCADDITIONALHOSTS 參數,是因為我需要用DOMAIN進入,而非數字IP,3.,其他的參數控制M3U8裡面的文字要怎樣,IOS很機車,對M3U8的規定很嚴格,甚至IOS12更不人性,M3U8不是裡面文字隨便寫都可以。
接著看第一個箭頭,
ffmpeg -hwaccel cuda -i 影片來源檔案.mkv -map 0:v:0 -map 0:a:0 -c:v h264_nvenc -preset p7 -profile:v high -level 4.1 -pix_fmt yuv420p -rc vbr_hq -b:v 6000k -maxrate 6000k -bufsize 12000k -r 30 -vsync cfr -g 60 -keyint_min 60 -sc_threshold 0 -colorspace bt709 -color_primaries bt709 -color_trc bt709 -c:a aac -profile:a aac_low -ar 48000 -ac 2 -b:a 128k -movflags +faststart -tag:v avc1 -y 輸出影片檔案.mp4
ffmpeg -re -stream_loop -1 -i 輸出影片檔案.mp4 \
-c copy \
-f rtsp -rtsp_transport tcp \
rtsp://127.0.0.1:8554/mystream
解析,第二段,就是STREAM出,沒啥好看的,重點都在第一段,比如說yuv420可以,444不行,422我不知道,其他的詳情看 https://developer.apple.com/documentation/ http-live-streaming/hls-authoring-specification-for-apple-devices,就可以知道蘋果多機車。
反正就是畫面的格式,聲音的格式,分別要是對的,不然除了串流SERV會爆錯,CLI端的BROWSER 播影片API也會爆錯(這就需要看APPLE的SPEC)。
沒理解錯的話,FPS要恆定,APPLE的CLI要求的。
未來展望,影片來源要變成M3U8串流,而非yt-dlp的mkv。
可以看影片了!開心!
你可能有興趣的文章...
全部留言
匿名
未來展望的解答(PART1) ffmpeg -re \ -rw_timeout 15000000 \ -reconnect 1 -reconnect_streamed 1 -reconnect_on_network_error 1 \ -fflags +genpts \ -hwaccel cuda \ -i " https://video-ws-aws.langhongtw.com/live/6166027Y.flv" \ -map 0:v:0 -map 0:a:0? \
匿名
(PART2) -c:v h264_nvenc -rc vbr -tune hq -multipass 2 \ -profile:v high -level 4.1 -pix_fmt yuv420p \ -fps_mode cfr -r 30 -g 60 -keyint_min 60 -sc_threshold 0 \ -vf "settb=AVTB,setpts=PTS-STARTPTS" \ -c:a aac -ar 48000 -ac 2 -b:a 128k \ -af "aresample=async=1:min_hard_comp=0.100:first_pts=0,asetpts=PTS-STARTPTS" \ -muxpreload 0 -muxdelay 0 \ -f rtsp -rtsp_transport tcp \ rtsp://127.0.0.1:8554/mystream