private void openButton_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.RestoreDirectory = true; openFileDialog1.Filter = "All files (*.*)|*.*"; if (openFileDialog1.ShowDialog() != DialogResult.OK) return; textBox1.Text = openFileDialog1.FileName; if (TeamTalk.GetMediaFileInfo(openFileDialog1.FileName, ref info)) { if (info.audioFmt.nAudioFmt != AudioFileFormat.AFF_NONE) audioLabel.Text = String.Format("{0} Hz, {1}", info.audioFmt.nSampleRate, (info.audioFmt.nChannels == 1 ? "Mono" : "Stereo")); else audioLabel.Text = "Unknown"; if (info.videoFmt.picFourCC != FourCC.FOURCC_NONE) { videoLabel.Text = String.Format("{0}x{1} FPS: {2}", info.videoFmt.nWidth, info.videoFmt.nHeight, info.videoFmt.nFPS_Numerator); } else videoLabel.Text = "Unknown"; } else { info = new MediaFileInfo(); } }
void ttclient_OnUserRecordMediaFile(int nUserID, MediaFileInfo mediafileinfo) { User user = new User(); ttclient.GetUser(nUserID, ref user); switch (mediafileinfo.nStatus) { case MediaFileStatus.MFS_STARTED : AddStatusMessage("Start audio file for " + user.szNickname); break; case MediaFileStatus.MFS_FINISHED: AddStatusMessage("Finished audio file for " + user.szNickname); break; case MediaFileStatus.MFS_ERROR: AddStatusMessage("Error writing audio file for " + user.szNickname); break; case MediaFileStatus.MFS_ABORTED: AddStatusMessage("Aborted audio file for " + user.szNickname); break; } }
void ttclient_OnStreamMediaFile(MediaFileInfo mediafileinfo) { switch (mediafileinfo.nStatus) { case MediaFileStatus.MFS_ABORTED: AddStatusMessage("Aborted media file stream to channel"); break; case MediaFileStatus.MFS_ERROR: AddStatusMessage("Error in media file stream to channel"); break; case MediaFileStatus.MFS_FINISHED: AddStatusMessage("Finished media file stream to channel"); break; case MediaFileStatus.MFS_STARTED: AddStatusMessage("Started media file stream to channel"); break; } streamMediaFileToChannelToolStripMenuItem.Checked = mediafileinfo.nStatus == MediaFileStatus.MFS_STARTED; }
/** * @brief Get the properties of a media file. * * Use this function to determine the audio and video properties of * a media file, so the user knows what can be streamed. * * @see TeamTalk.StartStreamingMediaFileToChannel() */ public static bool GetMediaFileInfo(string szMediaFilePath, ref MediaFileInfo lpMediaFileInfo) { return TTDLL.TT_GetMediaFileInfo(szMediaFilePath, ref lpMediaFileInfo); }
public void TestMediaStreamVideo() { const string USERNAME = "******", PASSWORD = "******"; string NICKNAME = "TeamTalk.NET - " + GetCurrentMethod(); const UserRight USERRIGHTS = UserRight.USERRIGHT_TRANSMIT_MEDIAFILE_AUDIO | UserRight.USERRIGHT_TRANSMIT_MEDIAFILE_VIDEO; MakeUserAccount(GetCurrentMethod(), USERNAME, PASSWORD, USERRIGHTS); TeamTalk ttclient = NewClientInstance(); InitSound(ttclient); Connect(ttclient); Login(ttclient, NICKNAME, USERNAME, PASSWORD); JoinRoot(ttclient); MediaFileInfo mf = new MediaFileInfo(); Assert.IsTrue(TeamTalk.GetMediaFileInfo(MEDIAFILE_VIDEO, ref mf), "get media file info"); Assert.IsTrue(mf.uDurationMSec > 0, "media file time"); Assert.IsTrue(mf.audioFmt.nSampleRate > 0, "sample rate"); Assert.IsTrue(mf.audioFmt.nChannels > 0, "channels"); Assert.IsTrue(mf.videoFmt.nWidth > 0, "has video"); VideoCodec vidcodec = new VideoCodec(); vidcodec.nCodec = Codec.WEBM_VP8_CODEC; vidcodec.webm_vp8.nRcTargetBitrate = 0; Assert.IsTrue(ttclient.StartStreamingMediaFileToChannel(MEDIAFILE_VIDEO, vidcodec), "start stream media file"); TTMessage msg = new TTMessage(); User user = new User(); bool video = false, audio = false; int videoframes = 0; while (ttclient.GetMessage(ref msg, 2000)) { switch (msg.nClientEvent) { case ClientEvent.CLIENTEVENT_USER_STATECHANGE: user = (User)msg.DataToObject(); audio |= user.uUserState.HasFlag(UserState.USERSTATE_MEDIAFILE_AUDIO); video |= user.uUserState.HasFlag(UserState.USERSTATE_MEDIAFILE_VIDEO); break; case ClientEvent.CLIENTEVENT_USER_MEDIAFILE_VIDEO: { Bitmap bmp; VideoFrame f = ttclient.AcquireUserMediaVideoFrame(msg.nSource, out bmp); videoframes++; Assert.IsTrue(f.nWidth > 0, "acquired video frame"); Assert.IsTrue(ttclient.ReleaseUserMediaVideoFrame(f), "release video frame"); break; } } } Assert.IsTrue(audio, "media audio playback"); Assert.IsTrue(video, "media video playback"); Assert.IsTrue(videoframes>0, "got video frames"); UserStatistics stats = new UserStatistics(); Assert.IsTrue(ttclient.GetUserStatistics(ttclient.GetMyUserID(), ref stats)); Assert.IsTrue(stats.nMediaFileAudioPacketsRecv > 0); Assert.IsTrue(stats.nMediaFileVideoFramesRecv > 0); Assert.IsTrue(stats.nMediaFileVideoPacketsRecv > 0); Assert.IsTrue(ttclient.StopStreamingMediaFileToChannel(), "stop stream"); }
public void TestMediaStreamAudio() { const string USERNAME = "******", PASSWORD = "******"; string NICKNAME = "TeamTalk.NET - " + GetCurrentMethod(); const UserRight USERRIGHTS = UserRight.USERRIGHT_TRANSMIT_MEDIAFILE_AUDIO; MakeUserAccount(GetCurrentMethod(), USERNAME, PASSWORD, USERRIGHTS); TeamTalk ttclient = NewClientInstance(); InitSound(ttclient); Connect(ttclient); Login(ttclient, NICKNAME, USERNAME, PASSWORD); JoinRoot(ttclient); MediaFileInfo mf = new MediaFileInfo(); Assert.IsTrue(TeamTalk.GetMediaFileInfo(MEDIAFILE_AUDIO, ref mf), "get media file info"); Assert.IsTrue(mf.uDurationMSec > 0, "media file time"); Assert.IsTrue(mf.audioFmt.nSampleRate > 0, "sample rate"); Assert.IsTrue(mf.audioFmt.nChannels > 0, "channels"); VideoCodec vidcodec = new VideoCodec(); vidcodec.nCodec = Codec.NO_CODEC; Assert.IsTrue(ttclient.StartStreamingMediaFileToChannel(MEDIAFILE_AUDIO, vidcodec), "start stream media file"); TTMessage msg = new TTMessage(); Assert.IsTrue(WaitForEvent(ttclient, ClientEvent.CLIENTEVENT_USER_STATECHANGE, DEF_WAIT, ref msg), "wait for state change, player launch"); Assert.IsTrue(WaitForEvent(ttclient, ClientEvent.CLIENTEVENT_USER_STATECHANGE, DEF_WAIT, ref msg), "wait for state change, playback"); User user = (User)msg.DataToObject(); Assert.IsTrue(user.uUserState.HasFlag(UserState.USERSTATE_MEDIAFILE_AUDIO), "media playback"); WaitForEvent(ttclient, ClientEvent.CLIENTEVENT_NONE, 5000); Assert.IsTrue(ttclient.SetUserAudioStreamBufferSize(ttclient.UserID, StreamType.STREAMTYPE_MEDIAFILE_AUDIO, 5000)); Assert.IsTrue(ttclient.GetUser(ttclient.UserID, ref user)); Assert.AreEqual(5000, user.nBufferMSecMediaFile); Assert.IsTrue(ttclient.StopStreamingMediaFileToChannel(), "stop stream"); UserStatistics stats = new UserStatistics(); Assert.IsTrue(ttclient.GetUserStatistics(ttclient.GetMyUserID(), ref stats)); Assert.IsTrue(stats.nMediaFileAudioPacketsRecv > 0); Assert.IsFalse(ttclient.StartStreamingMediaFileToChannel("sdfsdf", vidcodec), "start stream invalid media file"); }
static void ttclient_OnUserAudioFile(int nUserID, MediaFileInfo mediafileinfo) { User user = new User(); if (ttclient.GetUser(nUserID, ref user)) { switch (mediafileinfo.nStatus) { case MediaFileStatus.MFS_ERROR : Console.WriteLine("Failed to store audio file for #{0} {1}.", user.nUserID, user.szNickname); break; case MediaFileStatus.MFS_STARTED : Console.WriteLine("Storing audio from #{0} for {1} to file.", user.nUserID, user.szNickname); break; case MediaFileStatus.MFS_FINISHED : Console.WriteLine("Finished storing audio from #{0} {1} to file.", user.nUserID, user.szNickname); break; case MediaFileStatus.MFS_ABORTED : Console.WriteLine("Aborted storing audio from #{0} {1} to file.", user.nUserID, user.szNickname); break; } } }