需要转播Twitch和Youtube还有非洲台的PUBG赛事到B站,又不想转码消耗资源,想出了利用ffmpeg拉流再推流的办法,但是在实现的过程中发现,即使是网络情况良好的非洲台,转播也是一卡一卡的,极其的没有观看体验,这种情况应该就是拉流和推流之间没有延迟,衔接上出现了一点问题,即使添加了各种参数,比如bufsize和max_delay也无济于事。
经过研究发现在网络易出现波动的转播,最好还是添加个中转过程,这个中转过程增大了转播的延迟,比如延迟20秒,但是抵抗了网络波动,观看体验还是比较好,实现方法就是拉流拉到本地生成m3u8,然后再推这个m3u8流到B站,在推流的过程中发现,如果不添加live_start_index这个参数的话,会默认拉取m3u8列表中最新的ts,这显然与我们缓存策略相违背,添加了之后,问题解决。
//转发非洲台
ffmpeg -headers "Referer: https://play.afreecatv.com/pubg/245720935" -headers "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0" -reconnect 1 -i "https://live-global-cdn-v02.afreecatv.com/live-stmc-25/auth_playlist.m3u8?aid=.A32.7bbT56vyHM9fKZk.8yKqYm0_-TbTpcy9TowJA5moEBWwKh5Koe4uyMxJZQfnugZGljul80bQl0zo3EZrZj7VF_iVdoEVwwGoHUl-jR1OQA-Mkd6Sj08u_rOiEnqLCt1xt8rhri5CSs0zl434" -c:v copy -c:a copy -f hls -hls_time 5.0 -hls_list_size 10 -hls_flags 2 live/tv.m3u8
转发非洲台需要添加refer和ua,这个有点奇葩。
抓取出twitch的直播流后,是不需要翻Q就可以播放的
ffmpeg -reconnect 1 -i "https://video-weaver.lax03.hls.ttvnw.net/v1/playlist/CrQGb__hfW3MRUNMlKw728ryV23dd_z1zXZyrcXpRgLCjdi37HIZHv2foO9udUdw01K31nfqzunENFwokS3STkrI55G9vT-llTaVqQRLk-JqazvDCiauaZR3O4C9-lUemz2MSP4AdX7PVoXu-rU6QUi218hsUs5oFBSmek0Y1mIEz3EpO-yq8hDgjl4aWoqU1SMpGNrgnM5LKnVWNBjYbCyeg1REu8Cu04AvTbTrT03cOl12ljvrKqWTQjZrSdU56Xujd9AV4D73_zT_TN0b_b2TMOVUFuWdpGuqNleD6V2FgfoqiAB4a5ookDUB-GA4hpoVYUzcpTahqBfROz9dVPiMkaGGchZUipNiEjbsWeSFrViwobZUCHyboN7XSFf36rbaLMSTNdXoHZmNGRhqF-KJG7QKxjZN7A0fMHhiLf947aYUkgiutB3wwm0ymWTwB7zMZzGpE-1n_EQSULXcomzKyTmr_7oj10laW3TIwV3eKY-P34bGGBbd1Usv0YZOtzw8G32aFuR8k9mAvDM9DmO67c5yEbqbXF-mFRu2sGoQgcRPLPOjism82MRABNmi7OOlNUwQwRSRcAMO1-phrumTd0ONA1VHQlp85cAwprcHCfGRGK-eKuo2S_3Tgzop25dKiQkfN13ex4AwU3PpVARxvjFQGOIhco3C2N-8dQehz0KliP2tC4h8q72Z5DeOSmb_jzz6W2Gr8P00WEK17eE8pFgxx7N0eaFlDvSM2SchVtMJy73E7HVv1d0F2i1b6lo5YS3mxXebbJ2-30Pl5FWrwcHp9xKDQ95XrgEb3tQ2zfy64VYz2lTKH9O6j-K84Qc8iaLhJm9WcN6-mb8ANzD8sBjInz1kqRi-bwnQwh3YsFD_BizRJRt5aoWBI8uT-5T1NfuTOMHTgGrnZHicXqHi1kGyMzNwxQzDkVDli1IJMEERQ6nd77-2WqlSNEPrkRs7JfYbGZ44yx9dU2tcaDAsbV6xEgscJ8sgeOS0hBkPjVg2B-KGDHlfOSZcNARwyoAD7p-cgv4XqS1bzzglaexzU0JOC56F0vDcpGVOcX1opUWvwmgporX65NIomdpCYKd7k9Y5URoMKQISjkcPU3t0mhevIAEqCXVzLWVhc3QtMjCaBg.m3u8" -c:v copy -c:a copy -f hls -hls_time 2.0 -hls_list_size 10 -hls_flags 2 live/tv.m3u8
而youtube的直播就需要找台香港轻量云或者在本机的CMD添加下代理。Youtube直播需要先用yt-dlp抓出直播源
set http_proxy=http://192.168.1.27:20811
set https_proxy=http://192.168.1.27:20811
接下来就是推流,最好本机用hfs等轻量http服务器拉取,直接读取m3u8文件总会有小问题
ffmpeg -reconnect 1 -re -live_start_index 2 -i "http://127.0.0.1/live/tv.m3u8" -drop_pkts_on_overflow 1 -attempt_recovery 1 -recover_any_error 1 -c:v copy -c:a copy -f flv "rtmp://live-push.bilivideo.com/live-bvc/?streamname=live_573371393_34738821&key=秘钥&schedule=rtmp&pflag=1" -reconnect 1
本来是准备用python写个GUI出来,看来也没必要了。
//todo
一个框填源地址,一个框填写推流地址,
启动一个线程用于抓取m3u8并显示进度,开启一个线程用于推流并显示进度,开启一个http服务用于中转