improved
added channel stream support
This commit is contained in:
parent
db6d506b7a
commit
4012f4a5ce
@ -35,7 +35,7 @@ def raw_converter(dl, song, video):
|
|||||||
)
|
)
|
||||||
|
|
||||||
async def leave_call(chat_id: int):
|
async def leave_call(chat_id: int):
|
||||||
process = FFMPEG_PROCESSES.get(chat_id)
|
process = FFMPEG_PROCESS.get(chat_id)
|
||||||
if process:
|
if process:
|
||||||
try:
|
try:
|
||||||
process.send_signal(SIGINT)
|
process.send_signal(SIGINT)
|
||||||
@ -80,7 +80,7 @@ async def startvideo(client, m: Message):
|
|||||||
replied = m.reply_to_message
|
replied = m.reply_to_message
|
||||||
if not replied:
|
if not replied:
|
||||||
if len(m.command) < 2:
|
if len(m.command) < 2:
|
||||||
await m.reply("💡 reply to video or provide youtube/live video url to start video streaming")
|
await m.reply("💡 **reply to video or provide youtube/live video url to start video streaming**")
|
||||||
else:
|
else:
|
||||||
livelink = m.text.split(None, 1)[1]
|
livelink = m.text.split(None, 1)[1]
|
||||||
chat_id = m.chat.id
|
chat_id = m.chat.id
|
||||||
@ -199,3 +199,116 @@ async def stopvideo(client, m: Message):
|
|||||||
async def handler(client: PyTgCalls, update: Update):
|
async def handler(client: PyTgCalls, update: Update):
|
||||||
chat_id = update.chat.id
|
chat_id = update.chat.id
|
||||||
await call_py.leave_group_call(chat_id)
|
await call_py.leave_group_call(chat_id)
|
||||||
|
|
||||||
|
|
||||||
|
@Client.on_message(command(["cplay", f"cplay@{Veez.BOT_USERNAME}"]) & filters.group & ~filters.edited)
|
||||||
|
@authorized_users_only
|
||||||
|
async def chstream(client, m: Message):
|
||||||
|
replied = m.reply_to_message
|
||||||
|
if not replied:
|
||||||
|
if len(m.command) < 2:
|
||||||
|
await m.reply("💡 **reply to video or provide youtube/live video url to start video streaming**")
|
||||||
|
else:
|
||||||
|
livelink = m.text.split(None, 1)[1]
|
||||||
|
chat_id = CHANNEL
|
||||||
|
try:
|
||||||
|
livelink = await asyncio.wait_for(
|
||||||
|
app.loop.run_in_executor(
|
||||||
|
None,
|
||||||
|
lambda : youtube(livelink)
|
||||||
|
),
|
||||||
|
timeout=None
|
||||||
|
)
|
||||||
|
except asyncio.TimeoutError:
|
||||||
|
await m.reply("TimeoutError: process is taking unexpected time")
|
||||||
|
return
|
||||||
|
if not livelink:
|
||||||
|
await m.reply("failed to get video data")
|
||||||
|
return
|
||||||
|
process = raw_converter(livelink, f'audio{chat_id}.raw', f'video{chat_id}.raw')
|
||||||
|
FFMPEG_PROCESS[chat_id] = process
|
||||||
|
msg = await m.reply("🔁 **starting video streaming...**")
|
||||||
|
await asyncio.sleep(10)
|
||||||
|
try:
|
||||||
|
audio_file = f'audio{chat_id}.raw'
|
||||||
|
video_file = f'video{chat_id}.raw'
|
||||||
|
while not os.path.exists(audio_file) or \
|
||||||
|
not os.path.exists(video_file):
|
||||||
|
await asyncio.sleep(2)
|
||||||
|
await call_py.join_group_call(
|
||||||
|
chat_id,
|
||||||
|
InputAudioStream(
|
||||||
|
audio_file,
|
||||||
|
AudioParameters(
|
||||||
|
bitrate=48000,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
InputVideoStream(
|
||||||
|
video_file,
|
||||||
|
VideoParameters(
|
||||||
|
width=854,
|
||||||
|
height=480,
|
||||||
|
frame_rate=20,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
stream_type=StreamType().local_stream,
|
||||||
|
)
|
||||||
|
await msg.edit("💡 **video streaming channel started !**")
|
||||||
|
await idle()
|
||||||
|
except Exception as e:
|
||||||
|
await msg.edit(f"🚫 **error** - `{e}`")
|
||||||
|
|
||||||
|
elif replied.video or replied.document:
|
||||||
|
msg = await m.reply("📥 **downloading video...**")
|
||||||
|
video = await client.download_media(m.reply_to_message)
|
||||||
|
chat_id = CHANNEL
|
||||||
|
await msg.edit("🔁 **preparing video...**")
|
||||||
|
os.system(f"ffmpeg -i '{video}' -f s16le -ac 1 -ar 48000 'audio{chat_id}.raw' -y -f rawvideo -r 20 -pix_fmt yuv420p -vf scale=640:360 'video{chat_id}.raw' -y")
|
||||||
|
try:
|
||||||
|
audio_file = f'audio{chat_id}.raw'
|
||||||
|
video_file = f'video{chat_id}.raw'
|
||||||
|
while not os.path.exists(audio_file) or \
|
||||||
|
not os.path.exists(video_file):
|
||||||
|
await asyncio.sleep(2)
|
||||||
|
await call_py.join_group_call(
|
||||||
|
chat_id,
|
||||||
|
InputAudioStream(
|
||||||
|
audio_file,
|
||||||
|
AudioParameters(
|
||||||
|
bitrate=48000,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
InputVideoStream(
|
||||||
|
video_file,
|
||||||
|
VideoParameters(
|
||||||
|
width=640,
|
||||||
|
height=360,
|
||||||
|
frame_rate=20,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
stream_type=StreamType().local_stream,
|
||||||
|
)
|
||||||
|
await msg.edit("💡 **video streaming channel started !**")
|
||||||
|
except Exception as e:
|
||||||
|
await msg.edit(f"🚫 **error** - `{e}`")
|
||||||
|
await idle()
|
||||||
|
else:
|
||||||
|
await m.reply("💭 **please reply to video or video file to stream**")
|
||||||
|
|
||||||
|
|
||||||
|
@Client.on_message(command(["cstop", f"cstop@{Veez.BOT_USERNAME}"]) & filters.group & ~filters.edited)
|
||||||
|
@authorized_users_only
|
||||||
|
async def chstopvideo(client, m: Message):
|
||||||
|
chat_id = CHANNEL
|
||||||
|
try:
|
||||||
|
process = FFMPEG_PROCESS.get(chat_id)
|
||||||
|
if process:
|
||||||
|
try:
|
||||||
|
process.send_signal(SIGINT)
|
||||||
|
await asyncio.sleep(3)
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
await call_py.leave_group_call(chat_id)
|
||||||
|
await m.reply("✅ **video streaming channel ended**")
|
||||||
|
except Exception as e:
|
||||||
|
await m.reply(f"🚫 **error** - `{e}`")
|
||||||
|
Loading…
Reference in New Issue
Block a user